From ea17aadef46fd29850160987fe7740ceed1381ad Mon Sep 17 00:00:00 2001 From: Deon George Date: Wed, 1 Jul 2009 16:09:17 +1000 Subject: [PATCH] Latest SANDPIT - MERGE from CVS (MERGE-GIT) --- VERSION | 2 +- config/config.php.example | 457 +- doc/demo-reset.sh | 2 +- doc/phpldapadmin-demo.conf | 24 +- doc/pla-test-i18n.ldif | 2 +- hooks/functions/example.php | 404 ++ htdocs/add_attr.php | 167 - htdocs/add_attr_form.php | 283 +- htdocs/add_oclass.php | 70 - htdocs/add_oclass_form.php | 134 +- htdocs/add_value.php | 88 - htdocs/add_value_form.php | 430 +- htdocs/cmd.php | 56 +- htdocs/collapse.php | 11 +- htdocs/common.php | 8 +- htdocs/compare.php | 569 +- htdocs/compare_form.php | 64 +- htdocs/copy.php | 202 +- htdocs/copy_form.php | 159 +- htdocs/create.php | 157 +- htdocs/create_confirm.php | 134 + htdocs/css/style.css | 94 +- htdocs/delete.php | 51 +- htdocs/delete_attr.php | 66 +- htdocs/delete_form.php | 77 +- htdocs/download_binary_attr.php | 56 +- htdocs/draw_tree_node.php | 69 +- htdocs/entry_chooser.php | 130 +- htdocs/expand.php | 11 +- htdocs/export.php | 106 +- htdocs/export_form.php | 161 +- htdocs/header.php | 69 - htdocs/images/disabled.png | Bin 0 -> 692 bytes htdocs/images/{warning.png => error-big.png} | Bin htdocs/images/error.png | Bin 692 -> 796 bytes htdocs/images/invalid.png | Bin 0 -> 692 bytes htdocs/images/{notice.png => warn-big.png} | Bin htdocs/images/warning_small.png | Bin 796 -> 0 bytes htdocs/import.php | 116 + .../{ldif_import_form.php => import_form.php} | 15 +- htdocs/index.php | 38 +- htdocs/js/ajaxtree.js | 163 + htdocs/js/entry_chooser.js | 2 +- htdocs/js/jscalendar/calendar-blue2.css | 236 - htdocs/js/jscalendar/calendar-brown.css | 225 - htdocs/js/jscalendar/calendar-green.css | 229 - htdocs/js/jscalendar/calendar-setup.js | 2 +- .../js/jscalendar/calendar-setup_stripped.js | 21 - htdocs/js/jscalendar/calendar-system.css | 251 - htdocs/js/jscalendar/calendar-tas.css | 239 - htdocs/js/jscalendar/calendar-win2k-1.css | 271 - htdocs/js/jscalendar/calendar-win2k-2.css | 271 - .../js/jscalendar/calendar-win2k-cold-1.css | 265 - .../js/jscalendar/calendar-win2k-cold-2.css | 271 - htdocs/js/jscalendar/calendar.js | 2 +- htdocs/js/jscalendar/calendar.php | 119 - htdocs/js/jscalendar/calendar_stripped.js | 14 - htdocs/js/jscalendar/menuarrow2.gif | Bin 49 -> 0 bytes htdocs/js/phplayersmenu/lib/PHPLIB.php | 2 +- htdocs/js/pla_ajax.js | 23 +- htdocs/js/search_util.js | 2 +- htdocs/js/templaterender.js | 84 + htdocs/js/tree_hide.js | 4 +- htdocs/ldif_import.php | 202 - htdocs/login.php | 164 +- htdocs/login_form.php | 53 +- htdocs/logout.php | 41 +- htdocs/mass_delete.php | 2 +- htdocs/modify_member_form.php | 138 +- htdocs/monitor.php | 266 + htdocs/password_checker.php | 55 +- htdocs/purge_cache.php | 18 +- htdocs/query_engine.php | 21 + htdocs/rdelete.php | 88 +- htdocs/refresh.php | 41 +- htdocs/rename.php | 69 +- htdocs/rename_form.php | 45 +- htdocs/schema.php | 473 +- htdocs/search.php | 396 -- htdocs/server_info.php | 122 +- htdocs/show_cache.php | 44 +- htdocs/template_engine.php | 89 +- htdocs/update.php | 161 +- htdocs/update_confirm.php | 354 +- htdocs/view_jpeg_photo.php | 80 +- htdocs/welcome.php | 33 +- index.php | 2 +- lib/AJAXTree.php | 459 +- lib/Attribute.php | 613 +- lib/AttributeFactory.php | 183 +- lib/BinaryAttribute.php | 19 +- lib/DateAttribute.php | 13 +- lib/DefaultCreatingEntry.php | 211 - lib/DefaultEditingEntry.php | 101 - lib/DefaultEntryFactory.php | 19 - lib/DnAttribute.php | 15 +- lib/Entry.php | 316 -- lib/EntryFactory.php | 24 - lib/EntryReader.php | 394 -- lib/EntryWriter.php | 109 - lib/EntryWriter1.php | 2732 --------- lib/EntryWriter2.php | 301 - lib/GidAttribute.php | 15 +- lib/HTMLTree.php | 657 +-- lib/JpegAttribute.php | 13 +- lib/MultiLineAttribute.php | 24 +- lib/ObjectClassAttribute.php | 16 +- lib/PLMTree.php | 169 - lib/PageRender.php | 1154 ++++ lib/PasswordAttribute.php | 13 +- lib/Query.php | 251 + lib/QueryRender.php | 544 ++ lib/RandomPasswordAttribute.php | 16 +- lib/SambaPasswordAttribute.php | 15 +- lib/SelectionAttribute.php | 45 +- lib/ShadowAttribute.php | 15 +- lib/Template.php | 1377 +++++ lib/TemplateCreatingEntry.php | 342 -- lib/TemplateEditingEntry.php | 335 -- lib/TemplateEntryFactory.php | 19 - lib/TemplateRender.php | 2421 ++++++++ lib/Tree.php | 397 +- lib/TreeItem.php | 217 + lib/Visitor.php | 122 +- lib/blowfish.php | 6 +- lib/common.php | 191 +- lib/config_default.php | 359 +- lib/createlm.php | 67 +- lib/ds.php | 505 ++ lib/ds_ldap.php | 2138 +++++++ lib/ds_ldap_pla.php | 724 +++ lib/emuhash_functions.php | 78 +- lib/export_functions.php | 1089 ++-- lib/functions.php | 2621 ++++----- lib/hooks.php | 106 +- lib/import_functions.php | 611 ++ lib/ldap_error_codes.txt | 3 +- lib/ldap_supported_oids.txt | 6 +- lib/ldif_functions.php | 1046 ---- lib/page.php | 255 +- lib/query_functions.php | 24 + lib/schema_functions.php | 891 ++- lib/search_form_advanced.php | 123 - lib/search_form_predefined.php | 68 - lib/search_form_simple.php | 82 - lib/search_results_list.php | 72 - lib/search_results_table.php | 115 - lib/server_functions.php | 3402 ----------- lib/session_functions.php | 97 +- lib/syslog.php | 62 +- lib/template_functions.php | 1053 +--- lib/timeout_functions.php | 81 - lib/xml2array.php | 146 + lib/xmlTemplates.php | 420 ++ locale/ca_ES/LC_MESSAGES/messages.mo | Bin 12923 -> 22265 bytes locale/ca_ES/LC_MESSAGES/messages.po | 3493 +++--------- locale/cs_CZ/LC_MESSAGES/messages.mo | Bin 25630 -> 36410 bytes locale/cs_CZ/LC_MESSAGES/messages.po | 4281 +++++--------- locale/de_DE/LC_MESSAGES/messages.mo | Bin 30513 -> 39181 bytes locale/de_DE/LC_MESSAGES/messages.po | 4345 +++++--------- locale/es_ES/LC_MESSAGES/messages.mo | Bin 48515 -> 46157 bytes locale/es_ES/LC_MESSAGES/messages.po | 4909 ++++++---------- locale/fi_FI/LC_MESSAGES/messages.mo | Bin 36725 -> 46798 bytes locale/fi_FI/LC_MESSAGES/messages.po | 2367 +++----- locale/fr_FR/LC_MESSAGES/messages.mo | Bin 49414 -> 51716 bytes locale/fr_FR/LC_MESSAGES/messages.po | 4674 +++++++-------- locale/hu_HU/LC_MESSAGES/messages.mo | Bin 26215 -> 36853 bytes locale/hu_HU/LC_MESSAGES/messages.po | 4265 +++++--------- locale/it_IT/LC_MESSAGES/messages.mo | Bin 47454 -> 47520 bytes locale/it_IT/LC_MESSAGES/messages.po | 850 ++- locale/ja_JP/LC_MESSAGES/messages.mo | Bin 35933 -> 41228 bytes locale/ja_JP/LC_MESSAGES/messages.po | 4906 ++++++++-------- locale/pl_PL/LC_MESSAGES/messages.mo | Bin 48423 -> 47545 bytes locale/pl_PL/LC_MESSAGES/messages.po | 950 ++-- locale/pt_BR/LC_MESSAGES/messages.mo | Bin 37998 -> 36811 bytes locale/pt_BR/LC_MESSAGES/messages.po | 4283 +++++--------- locale/ru_RU/LC_MESSAGES/messages.mo | Bin 60325 -> 45388 bytes locale/ru_RU/LC_MESSAGES/messages.po | 4367 +++++--------- locale/zh_CN/LC_MESSAGES/messages.mo | Bin 30895 -> 45880 bytes locale/zh_CN/LC_MESSAGES/messages.po | 5016 +++++++---------- queries/SambaUsers.xml | 31 + queries/UserList.xml | 41 + templates/creation/SUSE-posixGroup.xml | 41 - templates/creation/SUSE-sambaGroupMapping.xml | 68 - templates/creation/alias.xml | 18 +- templates/creation/courierMailAccount.xml | 62 +- templates/creation/courierMailAlias.xml | 14 +- templates/creation/dNSDomain.xml | 16 +- templates/creation/example.xml | 13 +- templates/creation/inetOrgPerson.xml | 26 +- templates/creation/kolabPerson.xml | 41 +- templates/creation/mozillaOrgPerson.xml | 116 +- templates/creation/organizationalRole.xml | 16 +- templates/creation/ou.xml | 12 +- templates/creation/posixAccount.xml | 63 +- templates/creation/posixGroup.xml | 18 +- templates/creation/sambaDomain.xml | 13 +- templates/creation/sambaGroupMapping.xml | 37 +- templates/creation/sambaMachine.xml | 42 +- templates/creation/sambaSamAccount.xml | 100 +- templates/creation/sendmailMTAAliasObject.xml | 16 +- templates/creation/sendmailMTAClass.xml | 13 +- templates/creation/sendmailMTACluster.xml | 11 +- templates/creation/sendmailMTAMapObject.xml | 33 +- templates/creation/sendmailVirtualDomain.xml | 13 +- templates/creation/sendmailVirtualUser.xml | 22 +- templates/creation/simpleSecurityObject.xml | 30 +- templates/modification/inetOrgPerson.xml | 41 +- templates/template.dtd | 55 +- tools/po/Makefile | 10 +- 210 files changed, 37284 insertions(+), 52716 deletions(-) create mode 100644 hooks/functions/example.php delete mode 100644 htdocs/add_attr.php delete mode 100644 htdocs/add_oclass.php delete mode 100644 htdocs/add_value.php create mode 100644 htdocs/create_confirm.php delete mode 100644 htdocs/header.php create mode 100644 htdocs/images/disabled.png rename htdocs/images/{warning.png => error-big.png} (100%) create mode 100644 htdocs/images/invalid.png rename htdocs/images/{notice.png => warn-big.png} (100%) delete mode 100644 htdocs/images/warning_small.png create mode 100644 htdocs/import.php rename htdocs/{ldif_import_form.php => import_form.php} (69%) create mode 100644 htdocs/js/ajaxtree.js delete mode 100644 htdocs/js/jscalendar/calendar-blue2.css delete mode 100644 htdocs/js/jscalendar/calendar-brown.css delete mode 100644 htdocs/js/jscalendar/calendar-green.css delete mode 100644 htdocs/js/jscalendar/calendar-setup_stripped.js delete mode 100644 htdocs/js/jscalendar/calendar-system.css delete mode 100644 htdocs/js/jscalendar/calendar-tas.css delete mode 100644 htdocs/js/jscalendar/calendar-win2k-1.css delete mode 100644 htdocs/js/jscalendar/calendar-win2k-2.css delete mode 100644 htdocs/js/jscalendar/calendar-win2k-cold-1.css delete mode 100644 htdocs/js/jscalendar/calendar-win2k-cold-2.css delete mode 100644 htdocs/js/jscalendar/calendar.php delete mode 100644 htdocs/js/jscalendar/calendar_stripped.js delete mode 100644 htdocs/js/jscalendar/menuarrow2.gif create mode 100644 htdocs/js/templaterender.js delete mode 100644 htdocs/ldif_import.php create mode 100644 htdocs/monitor.php create mode 100644 htdocs/query_engine.php delete mode 100644 htdocs/search.php delete mode 100644 lib/DefaultCreatingEntry.php delete mode 100644 lib/DefaultEditingEntry.php delete mode 100644 lib/DefaultEntryFactory.php delete mode 100644 lib/Entry.php delete mode 100644 lib/EntryFactory.php delete mode 100644 lib/EntryReader.php delete mode 100644 lib/EntryWriter.php delete mode 100644 lib/EntryWriter1.php delete mode 100644 lib/EntryWriter2.php delete mode 100644 lib/PLMTree.php create mode 100644 lib/PageRender.php create mode 100644 lib/Query.php create mode 100644 lib/QueryRender.php create mode 100644 lib/Template.php delete mode 100644 lib/TemplateCreatingEntry.php delete mode 100644 lib/TemplateEditingEntry.php delete mode 100644 lib/TemplateEntryFactory.php create mode 100644 lib/TemplateRender.php create mode 100644 lib/TreeItem.php create mode 100644 lib/ds.php create mode 100644 lib/ds_ldap.php create mode 100644 lib/ds_ldap_pla.php create mode 100644 lib/import_functions.php delete mode 100644 lib/ldif_functions.php create mode 100644 lib/query_functions.php delete mode 100644 lib/search_form_advanced.php delete mode 100644 lib/search_form_predefined.php delete mode 100644 lib/search_form_simple.php delete mode 100644 lib/search_results_list.php delete mode 100644 lib/search_results_table.php delete mode 100644 lib/server_functions.php delete mode 100644 lib/timeout_functions.php create mode 100644 lib/xml2array.php create mode 100644 lib/xmlTemplates.php create mode 100644 queries/SambaUsers.xml create mode 100644 queries/UserList.xml delete mode 100644 templates/creation/SUSE-posixGroup.xml delete mode 100644 templates/creation/SUSE-sambaGroupMapping.xml diff --git a/VERSION b/VERSION index 6e355ff..ebf8ab3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -$Name: RELEASE-1_1_0_7 $ +$Name$ diff --git a/config/config.php.example b/config/config.php.example index 3137afa..b17cad5 100644 --- a/config/config.php.example +++ b/config/config.php.example @@ -13,11 +13,11 @@ * To override a default, use the $config->custom variable to do so. * For example, the default for defining the language in config_default.php * - * $this->default->appearance['lang'] = array( + * $this->default->appearance['language'] = array( * 'desc'=>'Language', * 'default'=>'auto'); * - * to override this, use $config->custom->appearance['lang'] = 'en'; + * to override this, use $config->custom->appearance['language'] = 'en_EN'; * * This file is also used to configure your LDAP server connections. * @@ -57,8 +57,8 @@ /* The temporary storage directory where we will put jpegPhoto data This directory must be readable and writable by your web server. */ -// $config->custom->jpeg['tmpdir'] = "/tmp"; // Example for Unix systems -# $config->custom->jpeg['tmpdir'] = "c:\\temp"; // Example for Windows systems +// $config->custom->jpeg['tmpdir'] = '/tmp'; // Example for Unix systems +# $config->custom->jpeg['tmpdir'] = 'c:\\temp'; // Example for Windows systems /* Set this to (bool)true if you do NOT want a random salt used when calling crypt(). Instead, use the first two letters of the user's @@ -84,6 +84,7 @@ $config->custom->commands['all'] = array( 'home' => true, 'external_links' => array('feature' => true, + 'forum' => true, 'bug' => true, 'donation' => true, 'help' => true, @@ -118,21 +119,8 @@ $config->custom->commands['all'] = array( /* If you want to choose the appearance of the tree, specify a class name which inherits from the Tree class. */ -// $config->custom->appearance['tree'] = "AJAXTree"; -# $config->custom->appearance['tree'] = "HTMLTree"; - -/* If you want to customise the entry view/edition, specify your factory name which - inherits from the EntryFactory class. - The 'DefaultEntryFactory' draws all the attributes of an entry according this - config file and the ldap schema definition ; the 'TemplateEntryFactory' draws - an entry according to the template whose regexp matches with the dn. */ -# $config->custom->appearance['entry_factory'] = "DefaultEntryFactory"; -// $config->custom->appearance['entry_factory'] = "TemplateEntryFactory"; - -/* If you want to customise an attribute view/edition, specify your factory name which - inherits from the AttributeFactory class. - An AttributeFactory defines which class to use to represent a given attribute */ -// $config->custom->appearance['attribute_factory'] = "AttributeFactory"; +// $config->custom->appearance['tree'] = 'AJAXTree'; +# $config->custom->appearance['tree'] = 'HTMLTree'; /* Just show your custom templates. */ // $config->custom->appearance['custom_templates_only'] = false; @@ -150,30 +138,118 @@ $config->custom->commands['all'] = array( // $config->custom->appearance['tree_width'] = null; # $config->custom->appearance['tree_width'] = 250; +/*********************************************/ +/* User-friendly attribute translation */ +/*********************************************/ + +/* Use this array to map attribute names to user friendly names. For example, if + you don't want to see "facsimileTelephoneNumber" but rather "Fax". */ +// $config->custom->appearance['friendly_attrs'] = array(); +$config->custom->appearance['friendly_attrs'] = array( + 'facsimileTelephoneNumber' => 'Fax', + 'gid' => 'Group', + 'mail' => 'Email', + 'telephoneNumber' => 'Telephone', + 'uid' => 'User Name', + 'userPassword' => 'Password' +); + +/*********************************************/ +/* Hidden attributes */ +/*********************************************/ + +/* You may want to hide certain attributes from being edited. If you want to + hide attributes from the user, you should use your LDAP servers ACLs. + NOTE: The user must be able to read the hide_attrs_exempt entry to be + excluded. */ +// $config->custom->appearance['hide_attrs'] = array(); +# $config->custom->appearance['hide_attrs'] = array('objectClass'); + +/* Members of this list will be exempt from the hidden attributes.*/ +// $config->custom->appearance['hide_attrs_exempt'] = null; +# $config->custom->appearance['hide_attrs_exempt'] = 'cn=PLA UnHide,ou=Groups,c=AU'; + +/*********************************************/ +/* Read-only attributes */ +/*********************************************/ + +/* You may want to phpLDAPadmin to display certain attributes as read only, + meaning that users will not be presented a form for modifying those + attributes, and they will not be allowed to be modified on the "back-end" + either. You may configure this list here: + NOTE: The user must be able to read the readonly_attrs_exempt entry to be + excluded. */ +// $config->custom->appearance['readonly_attrs'] = array(); + +/* Members of this list will be exempt from the readonly attributes.*/ +// $config->custom->appearance['readonly_attrs_exempt'] = null; +# $config->custom->appearance['readonly_attrs_exempt'] = 'cn=PLA ReadWrite,ou=Groups,c=AU'; + +/*********************************************/ +/* Group attributes */ +/*********************************************/ + +/* Add "modify group members" link to the attribute. */ +// $config->custom->modify_member['groupattr'] = array('member','uniqueMember','memberUid'); + +/* Configure filter for member search. This only applies to "modify group members" feature */ +// $config->custom->modify_member['filter'] = '(objectclass=Person)'; + +/* Attribute that is added to the group member attribute. */ +// $config->custom->modify_member['attr'] = 'dn'; + +/* For Posix attributes */ +// $config->custom->modify_member['posixattr'] = 'uid'; +// $config->custom->modify_member['posixfilter'] = '(uid=*)'; +// $config->custom->modify_member['posixgroupattr'] = 'memberUid'; + +/*********************************************/ +/* Support for attrs display order */ +/*********************************************/ + +/* Use this array if you want to have your attributes displayed in a specific + order. You can use default attribute names or their fridenly names. + For example, "sn" will be displayed right after "givenName". All the other + attributes that are not specified in this array will be displayed after in + alphabetical order. */ +// $config->custom->appearance['attr_display_order'] = array(); +# $config->custom->appearance['attr_display_order'] = array( +# 'givenName', +# 'sn', +# 'cn', +# 'displayName', +# 'uid', +# 'uidNumber', +# 'gidNumber', +# 'homeDirectory', +# 'mail', +# 'userPassword' +# ); + /*********************************************/ /* Define your LDAP servers in this section */ /*********************************************/ -$i=0; -$ldapservers = new LDAPServers; +$servers = new Datastore(); +$servers->newServer('ldap_pla'); /* A convenient name that will appear in the tree viewer and throughout phpLDAPadmin to identify this LDAP server to users. */ -$ldapservers->SetValue($i,'server','name','My LDAP Server'); +$servers->setValue('server','name','My LDAP Server'); /* Examples: 'ldap.example.com', 'ldaps://ldap.example.com/', 'ldapi://%2fusr%local%2fvar%2frun%2fldapi' (Unix socket at /usr/local/var/run/ldap) */ -// $ldapservers->SetValue($i,'server','host','127.0.0.1'); +// $servers->setValue('server','host','127.0.0.1'); /* The port your LDAP server listens on (no quotes). 389 is standard. */ -// $ldapservers->SetValue($i,'server','port',389); +// $servers->setValue('server','port',389); /* Array of base DNs of your LDAP server. Leave this blank to have phpLDAPadmin auto-detect it for you. */ -// $ldapservers->SetValue($i,'server','base',array('')); +// $servers->setValue('server','base',array('')); /* Four options for auth_type: 1. 'cookie': you will login via a web form, and a client-side cookie will @@ -189,23 +265,23 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); your situation. If you choose 'cookie', your cookie contents will be encrypted using blowfish and the secret your specify above as session['blowfish']. */ -// $ldapservers->SetValue($i,'server','auth_type','cookie'); +// $servers->setValue('login','auth_type','session'); /* The DN of the user for phpLDAPadmin to bind with. For anonymous binds or 'cookie' or 'session' auth_types, LEAVE THE LOGIN_DN AND LOGIN_PASS BLANK. If you specify a login_attr in conjunction with a cookie or session auth_type, then you can also specify the login_dn/login_pass here for searching the directory for users (ie, if your LDAP server does not allow anonymous binds. */ -// $ldapservers->SetValue($i,'login','dn',''); -# $ldapservers->SetValue($i,'login','dn','cn=Manager,dc=example,dc=com'); +// $servers->setValue('login','bind_id',''); +# $servers->setValue('login','bind_id','cn=Manager,dc=example,dc=com'); /* Your LDAP password. If you specified an empty login_dn above, this MUST also be blank. */ -// $ldapservers->SetValue($i,'login','pass',''); -# $ldapservers->SetValue($i,'login','pass','secret'); +// $servers->setValue('login','bind_pass',''); +# $servers->setValue('login','bind_pass','secret'); /* Use TLS (Transport Layer Security) to connect to the LDAP server. */ -// $ldapservers->SetValue($i,'server','tls',false); +// $servers->setValue('server','tls',false); /************************************ * SASL Authentication * @@ -214,19 +290,19 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); /* Enable SASL authentication LDAP SASL authentication requires PHP 5.x configured with --with-ldap-sasl=DIR. If this option is disabled (ie, set to false), then all other sasl options are ignored. */ -// $ldapservers->SetValue($i,'server','sasl_auth',false); +// $servers->setValue('server','sasl_auth',false); /* SASL auth mechanism */ -// $ldapservers->SetValue($i,'server','sasl_mech','PLAIN'); +// $servers->setValue('server','sasl_mech','PLAIN'); /* SASL authentication realm name */ -// $ldapservers->SetValue($i,'server','sasl_realm',''); -# $ldapservers->SetValue($i,'server','sasl_realm',"example.com"); +// $servers->setValue('server','sasl_realm',''); +# $servers->setValue('server','sasl_realm','example.com'); /* SASL authorization ID name If this option is undefined, authorization id will be computed from bind DN, using sasl_authz_id_regex and sasl_authz_id_replacement. */ -// $ldapservers->SetValue($i,'server','sasl_authz_id', null); +// $servers->setValue('server','sasl_authz_id', null); /* SASL authorization id regex and replacement When sasl_authz_id property is not set (default), phpLDAPAdmin will try to @@ -241,24 +317,19 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); For info about pcre regexes, see: - pcre(3), perlre(3) - http://www.php.net/preg_replace */ -// $ldapservers->SetValue($i,'server','sasl_authz_id_regex',null); -// $ldapservers->SetValue($i,'server','sasl_authz_id_replacement',null); -# $ldapservers->SetValue($i,'server','sasl_authz_id_regex','/^uid=([^,]+)(.+)/i'); -# $ldapservers->SetValue($i,'server','sasl_authz_id_replacement','$1'); +// $servers->setValue('server','sasl_authz_id_regex',null); +// $servers->setValue('server','sasl_authz_id_replacement',null); +# $servers->setValue('server','sasl_authz_id_regex','/^uid=([^,]+)(.+)/i'); +# $servers->setValue('server','sasl_authz_id_replacement','$1'); /* SASL auth security props. See http://beepcore-tcl.sourceforge.net/tclsasl.html#anchor5 for explanation. */ -// $ldapservers->SetValue($i,'server','sasl_props',null); - -/* If the link between your web server and this LDAP server is slow, it is - recommended that you set 'low_bandwidth' to true. This will enable - phpLDAPadmin to forego some "fancy" features to conserve bandwidth. */ -// $ldapservers->SetValue($i,'server','low_bandwidth',false); +// $servers->setValue('server','sasl_props',null); /* Default password hashing algorithm. One of md5, ssha, sha, md5crpyt, smd5, blowfish, crypt or leave blank for now default algorithm. */ -// $ldapservers->SetValue($i,'appearance','password_hash','md5'); +// $servers->setValue('appearance','password_hash','md5'); /* If you specified 'cookie' or 'session' as the auth_type above, you can optionally specify here an attribute to use when logging in. If you enter @@ -269,7 +340,7 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); DN to use when searching in 'login_dn' and 'login_pass' above. You may also specify 'string', in which case you can provide a string to use for logging users in. See 'login_string' directly below. */ -// $ldapservers->SetValue($i,'login','attr','dn'); +// $servers->setValue('login','attr','dn'); /* If you specified something different from 'dn', for example 'uid', as the login_attr above, you can optionally specify here to fall back to @@ -278,7 +349,7 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); the ldap administrator wants to log in with his root-dn, that does not necessarily have the uid attribute. When using this feature, login_class is ignored. */ -// $ldapservers->SetValue($i,'login','fallback_dn',false); +// $servers->setValue('login','fallback_dn',false); /* If you specified 'cookie' or 'session' as the auth_type above, and you specified 'string' for 'login_attr' above, you must provide a string here for @@ -286,24 +357,24 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); "uid=dsmith,ou=People,dc=example,dc=com", then I can specify a string "uid=,ou=People,dc=example,dc=com" and my users can login with their user names alone, ie: "dsmith" in this case. */ -# $ldapservers->SetValue($i,'login','string','uid=,ou=People,dc=example,dc=com'); +# $servers->setValue('login','string','uid=,ou=People,dc=example,dc=com'); /* If 'login_attr' is used above such that phpLDAPadmin will search for your DN at login, you may restrict the search to a specific objectClass. EG, set this to 'posixAccount' or 'inetOrgPerson', depending upon your setup. */ -// $ldapservers->SetValue($i,'login','class',null); +// $servers->setValue('login','class',null); /* Specify true If you want phpLDAPadmin to not display or permit any modification to the LDAP server. */ -// $ldapservers->SetValue($i,'server','read_only',false); +// $servers->setValue('server','read_only',false); /* Specify false if you do not want phpLDAPadmin to draw the 'Create new' links in the tree viewer. */ -// $ldapservers->SetValue($i,'appearance','show_create',true); +// $servers->setValue('appearance','show_create',true); /* This feature allows phpLDAPadmin to automatically determine the next available uidNumber for a new entry. */ -// $ldapservers->SetValue($i,'auto_number','enable',true); +// $servers->setValue('auto_number','enable',true); /* The mechanism to use when finding the next available uidNumber. Two possible values: 'uidpool' or 'search'. @@ -311,75 +382,62 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); blindly lookup the next available uidNumber. The 'search' mechanism searches for entries with a uidNumber value and finds the first available uidNumber (slower). */ -// $ldapservers->SetValue($i,'auto_number','mechanism','search'); +// $servers->setValue('auto_number','mechanism','search'); /* The DN of the search base when the 'search' mechanism is used above. */ -# $ldapservers->SetValue($i,'auto_number','search_base','ou=People,dc=example,dc=com'); +# $servers->setValue('auto_number','search_base','ou=People,dc=example,dc=com'); -/* The minimum number to use when searching for the next available UID number - (only when 'search' is used for auto_uid_number_mechanism' */ -// $ldapservers->SetValue($i,'auto_number','min',1000); - -/* The DN of the uidPool entry when 'uidpool' mechanism is used above. */ -// $ldapservers->SetValue($i,'auto_number','uidpool_dn','cn=uidPool,dc=example,dc=com'); +/* The minimum number to use when searching for the next available number + (only when 'search' is used for auto_number */ +// $servers->setValue('auto_number','min',array('uidNumber'=>1000,'gidNumber'=>500)); /* If you set this, then phpldapadmin will bind to LDAP with this user ID when searching for the uidnumber. The idea is, this user id would have full (readonly) access to uidnumber in your ldap directory (the logged in user may not), so that you can be guaranteed to get a unique uidnumber for your directory. */ -// $ldapservers->SetValue($i,'auto_number','dn',null); +// $servers->setValue('auto_number','dn',null); /* The password for the dn above. */ -// $ldapservers->SetValue($i,'auto_number','pass',null); +// $servers->setValue('auto_number','pass',null); /* Enable anonymous bind login. */ -// $ldapservers->SetValue($i,'login','anon_bind',true); +// $servers->setValue('login','anon_bind',true); /* Use customized page with prefix when available. */ -# $ldapservers->SetValue($i,'custom','pages_prefix','custom_'); - -/* If you set this, then phpldapadmin will bind to LDAP with this user when - testing for unique attributes (as set in unique_attrs array). If you want to - enforce unique attributes, than this id should have full (readonly) access - to the attributes in question (the logged in user may not have enough access) -*/ -// $ldapservers->SetValue($i,'unique_attrs','dn',null); - -/* The password for the dn above */ -// $ldapservers->SetValue($i,'unique_attrs','pass',null); +# $servers->setValue('custom','pages_prefix','custom_'); /* If you set this, then only these DNs are allowed to log in. This array can contain individual users, groups or ldap search filter(s). Keep in mind that the user has not authenticated yet, so this will be an anonymous search to the LDAP server, so make your ACLs allow these searches to return results! */ -# $ldapservers->SetValue($i,'login','allowed_dns',array( +# $servers->setValue('login','allowed_dns',array( # 'uid=stran,ou=People,dc=example,dc=com', # '(&(gidNumber=811)(objectClass=groupOfNames))', # '(|(uidNumber=200)(uidNumber=201))', # 'cn=callcenter,ou=Group,dc=example,dc=com')); /* Set this if you dont want this LDAP server to show in the tree */ -// $ldapservers->SetValue($i,'appearance','visible',true); +// $servers->setValue('server','visible',true); /* This is the time out value in minutes for the server. After as many minutes of inactivity you will be automatically logged out. If not set, the default value will be ( session_cache_expire()-1 ) */ -# $ldapservers->SetValue($i,'login','timeout',30); +# $servers->setValue('login','timeout',30); /* Set this if you want phpldapadmin to perform rename operation on entry which has children. Certain servers are known to allow it, certain are not */ -// $ldapservers->SetValue($i,'server','branch_rename',false); +// $servers->setValue('server','branch_rename',false); /* If you set this, then phpldapadmin will show these attributes as internal attributes, even if they are not defined in your schema. */ -// $ldapservers->SetValue($i,'server','custom_sys_attrs',array('')); -# $ldapservers->SetValue($i,'server','custom_sys_attrs',array('passwordExpirationTime','passwordAllowChangeTime')); +// $servers->setValue('server','custom_sys_attrs',array('')); +# $servers->setValue('server','custom_sys_attrs',array('passwordExpirationTime','passwordAllowChangeTime')); /* If you set this, then phpldapadmin will show these attributes on objects, even if they are not defined in your schema. */ -// $ldapservers->SetValue($i,'server','custom_attrs',array('')); -# $ldapservers->SetValue($i,'server','custom_attrs',array('nsRoleDN','nsRole','nsAccountLock')); +// $servers->setValue('server','custom_attrs',array('')); +# $servers->setValue('server','custom_attrs',array('nsRoleDN','nsRole','nsAccountLock')); /* These attributes will be forced to MAY attributes and become option in the templates. If they are not defined in the templates, then they wont appear @@ -387,8 +445,27 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); server may automatically calculate a default value. In Fedora Directory Server using the DNA Plugin one could ignore uidNumber, gidNumber and sambaSID. */ -// $ldapservers->SetValue($i,'force_may','attrs',array('')); -# $ldapservers->SetValue($i,'force_may','attrs',array('uidNumber','gidNumber','sambaSID')); +// $servers->setValue('force_may','attrs',array('')); +# $servers->setValue('force_may','attrs',array('uidNumber','gidNumber','sambaSID')); + +/*********************************************/ +/* Unique attributes */ +/*********************************************/ + +/* You may want phpLDAPadmin to enforce some attributes to have unique values + (ie: not belong to other entries in your tree. This (together with + 'unique','dn' and 'unique','pass' option will not let updates to + occur with other attributes have the same value. */ +# $servers->setValue('unique','attrs',array('mail','uid','uidNumber')); + +/* If you set this, then phpldapadmin will bind to LDAP with this user ID when + searching for attribute uniqueness. The idea is, this user id would have full + (readonly) access to your ldap directory (the logged in user may not), so + that you can be guaranteed to get a unique uidnumber for your directory. */ +// $servers->setValue('unique','dn',null); + +/* The password for the dn above. */ +// $servers->setValue('unique','pass',null); /************************************************************************** * If you want to configure additional LDAP servers, do so below. * @@ -397,172 +474,50 @@ $ldapservers->SetValue($i,'server','name','My LDAP Server'); **************************************************************************/ /* -$i++; -$ldapservers->SetValue($i,'server','name','LDAP Server'); -$ldapservers->SetValue($i,'server','host','127.0.0.1'); -$ldapservers->SetValue($i,'server','port',389); -$ldapservers->SetValue($i,'server','base',array('')); -$ldapservers->SetValue($i,'server','auth_type','cookie'); -$ldapservers->SetValue($i,'login','dn',''); -$ldapservers->SetValue($i,'login','pass',''); -$ldapservers->SetValue($i,'server','tls',false); -$ldapservers->SetValue($i,'server','low_bandwidth',false); -$ldapservers->SetValue($i,'appearance','password_hash','md5'); -$ldapservers->SetValue($i,'login','attr','dn'); -$ldapservers->SetValue($i,'login','string',null); -$ldapservers->SetValue($i,'login','class',null); -$ldapservers->SetValue($i,'server','read_only',false); -$ldapservers->SetValue($i,'appearance','show_create',true); -$ldapservers->SetValue($i,'auto_number','enable',true); -$ldapservers->SetValue($i,'auto_number','mechanism','search'); -$ldapservers->SetValue($i,'auto_number','search_base',null); -$ldapservers->SetValue($i,'auto_number','min',1000); -$ldapservers->SetValue($i,'auto_number','dn',null); -$ldapservers->SetValue($i,'auto_number','pass',null); -$ldapservers->SetValue($i,'login','anon_bind',true); -$ldapservers->SetValue($i,'custom','pages_prefix','custom_'); -$ldapservers->SetValue($i,'unique_attrs','dn',null); -$ldapservers->SetValue($i,'unique_attrs','pass',null); +$servers->setValue('server','name','LDAP Server'); +$servers->setValue('server','host','127.0.0.1'); +$servers->setValue('server','port',389); +$servers->setValue('server','base',array('')); +$servers->setValue('login','auth_type','cookie'); +$servers->setValue('login','bind_id',''); +$servers->setValue('login','bind_pass',''); +$servers->setValue('server','tls',false); # SASL auth -$ldapservers->SetValue($i,'server','sasl_auth',true); -$ldapservers->SetValue($i,'server','sasl_mech','PLAIN'); -$ldapservers->SetValue($i,'server','sasl_realm','EXAMPLE.COM'); -$ldapservers->SetValue($i,'server','sasl_authz_id',null); -$ldapservers->SetValue($i,'server','sasl_authz_id_regex','/^uid=([^,]+)(.+)/i'); -$ldapservers->SetValue($i,'server','sasl_authz_id_replacement','$1'); -$ldapservers->SetValue($i,'server','sasl_props',null); +$servers->setValue('server','sasl_auth',true); +$servers->setValue('server','sasl_mech','PLAIN'); +$servers->setValue('server','sasl_realm','EXAMPLE.COM'); +$servers->setValue('server','sasl_authz_id',null); +$servers->setValue('server','sasl_authz_id_regex','/^uid=([^,]+)(.+)/i'); +$servers->setValue('server','sasl_authz_id_replacement','$1'); +$servers->setValue('server','sasl_props',null); + +$servers->setValue('appearance','password_hash','md5'); +$servers->setValue('login','attr','dn'); +$servers->setValue('login','fallback_dn',false); +$servers->setValue('login','string',null); +$servers->setValue('login','class',null); +$servers->setValue('server','read_only',false); +$servers->setValue('appearance','show_create',true); + +$servers->setValue('auto_number','enable',true); +$servers->setValue('auto_number','mechanism','search'); +$servers->setValue('auto_number','search_base',null); +$servers->setValue('auto_number','min',array('uidNumber'=>1000,'gidNumber'=>500)); +$servers->setValue('auto_number','dn',null); +$servers->setValue('auto_number','pass',null); + +$servers->setValue('login','anon_bind',true); +$servers->setValue('custom','pages_prefix','custom_'); +$servers->setValue('unique','attrs',array('mail','uid','uidNumber')); +$servers->setValue('unique','dn',null); +$servers->setValue('unique','pass',null); + +$servers->setValue('server','visible',true); +$servers->setValue('login','timeout',30); +$servers->setValue('server','branch_rename',false); +$servers->setValue('server','custom_sys_attrs',array('passwordExpirationTime','passwordAllowChangeTime')); +$servers->setValue('server','custom_attrs',array('nsRoleDN','nsRole','nsAccountLock')); +$servers->setValue('force_may','attrs',array('uidNumber','gidNumber','sambaSID')); */ - -/*********************************************/ -/* User-friendly attribute translation */ -/*********************************************/ - -/* Use this array to map attribute names to user friendly names. For example, if - you don't want to see "facsimileTelephoneNumber" but rather "Fax". */ -$friendly_attrs = array(); - -$friendly_attrs['facsimileTelephoneNumber'] = 'Fax'; -$friendly_attrs['telephoneNumber'] = 'Phone'; -$friendly_attrs['uid'] = 'User Name'; - -/*********************************************/ -/* Support for attrs display order */ -/*********************************************/ - -/* Use this array if you want to have your attributes displayed in a specific - order. You can use default attribute names or their fridenly names. - For example, "sn" will be displayed right after "givenName". All the other - attributes that are not specified in this array will be displayed after in - alphabetical order. */ -# $attrs_display_order = array( -# 'givenName', -# 'sn', -# 'cn', -# 'displayName', -# 'uid', -# 'uidNumber', -# 'gidNumber', -# 'homeDirectory', -# 'mail', -# 'userPassword' -# ); - -/*********************************************/ -/* Hidden attributes */ -/*********************************************/ - -/* You may want to hide certain attributes from being displayed in the editor - screen. Do this by adding the desired attributes to this list (and uncomment - it). This only affects the editor screen. Attributes will still be visible in - the schema browser and elsewhere. An example is provided below: - NOTE: The user must be able to read the hidden_except_dn entry to be - excluded. */ -# $hidden_attrs = array( 'jpegPhoto', 'objectClass' ); -# $hidden_except_dn = "cn=PLA UnHide,ou=Groups,c=AU"; - -/* Hidden attributes in read-only mode. If undefined, it will be equal to - $hidden_attrs. */ -# $hidden_attrs_ro = array( -# 'objectClass','shadowWarning', 'shadowLastChange', 'shadowMax', -# 'shadowFlag', 'shadowInactive', 'shadowMin', 'shadowExpire'); - -/** **/ -/** Read-only attributes **/ -/** **/ - -/* You may want to phpLDAPadmin to display certain attributes as read only, - meaning that users will not be presented a form for modifying those - attributes, and they will not be allowed to be modified on the "back-end" - either. You may configure this list here: - NOTE: The user must be able to read the read_only_except_dn entry to be - excluded. */ -# $read_only_attrs = array( 'objectClass' ); -# $read_only_except_dn = "cn=PLA ReadWrite,ou=Groups,c=AU"; - -/* An example of how to specify multiple read-only attributes: */ -# $read_only_attrs = array( 'jpegPhoto', 'objectClass', 'someAttribute' ); - -/*********************************************/ -/* Unique attributes */ -/*********************************************/ - -/* You may want phpLDAPadmin to enforce some attributes to have unique values - (ie: not belong to other entries in your tree. This (together with - unique_attrs['dn'] and unique_attrs['pass'] option will not let updates to - occur with other attributes have the same value. - NOTE: Currently the unique_attrs is NOT enforced when copying a dn. (Need to - present a user with the option of changing the unique attributes. */ -# $unique_attrs = array('uid','uidNumber','mail'); - -/*********************************************/ -/* Group attributes */ -/*********************************************/ - -/* Add "modify group members" link to the attribute. */ -// $config->custom->modify_member['groupattr'] = array('member','uniqueMember','memberUid'); - -/* Configure filter for member search. This only applies to "modify group members" feature */ -// $config->custom->modify_member['filter'] = '(objectclass=Person)'; - -/* Attribute that is added to the group member attribute. */ -// $config->custom->modify_member['attr'] = 'dn'; - -/*********************************************/ -/* Predefined Queries (canned views) */ -/*********************************************/ - -/* To make searching easier, you may setup predefined queries below: */ -$q=0; -$queries = array(); - -/* The name that will appear in the simple search form */ -$queries[$q]['name'] = 'User List'; - -/* The base to search on */ -$queries[$q]['base'] = 'dc=example,dc=com'; - -/* The search scope (sub, base, one) */ -$queries[$q]['scope'] = 'sub'; - -/* The LDAP filter to use */ -$queries[$q]['filter'] = '(&(objectClass=posixAccount)(uid=*))'; - -/* The attributes to return */ -$queries[$q]['attributes'] = 'cn, uid, homeDirectory, telephonenumber, jpegphoto'; - -/* If you want to configure more pre-defined queries, copy and paste the above (including the "$q++;") */ -$q++; -$queries[$q]['name'] = 'Samba Users'; -$queries[$q]['base'] = 'dc=example,dc=com'; -$queries[$q]['scope'] = 'sub'; -$queries[$q]['filter'] = '(&(|(objectClass=sambaAccount)(objectClass=sambaSamAccount))(objectClass=posixAccount)(!(uid=*$)))'; -$queries[$q]['attributes'] = 'uid, smbHome, uidNumber'; - -$q++; -$queries[$q]['name'] = 'Samba Computers'; -$queries[$q]['base'] = 'dc=example,dc=com'; -$queries[$q]['scope'] = 'sub'; -$queries[$q]['filter'] = '(&(objectClass=sambaAccount)(uid=*$))'; -$queries[$q]['attributes'] = 'uid, homeDirectory'; ?> diff --git a/doc/demo-reset.sh b/doc/demo-reset.sh index 74e6218..e9ce517 100755 --- a/doc/demo-reset.sh +++ b/doc/demo-reset.sh @@ -1,7 +1,7 @@ #!/bin/sh for i in $(grep directory phpldapadmin-demo.conf|awk '{print $2}'); do - rm -f $i/*dbb $i/alock $i/log.* + rm -f $i/*.dbb $i/*.bdb $i/__db.??? $i/alock $i/log.* done slapadd -b "dc=example.com" -l ldif-example.com diff --git a/doc/phpldapadmin-demo.conf b/doc/phpldapadmin-demo.conf index 91d602c..3abc83a 100644 --- a/doc/phpldapadmin-demo.conf +++ b/doc/phpldapadmin-demo.conf @@ -1,19 +1,27 @@ +include /etc/openldap/schema/uidpool.schema + TLSCACertificateFile /etc/openldap/pla/ca-bundle.crt TLSCertificateFile /etc/openldap/pla/slapd.crt TLSCertificateKeyFile /etc/openldap/pla/slapd.key +access to dn.regex="o=Simpsons$" attrs=userpassword + by anonymous auth + by self write + by * none + +access to dn.base="" by * read access to dn.regex="dc=example.com$" by * write access to dn.regex="dc=example,dc=com$" by * write access to dn.regex="o=Simpsons$" by self write - by dn.regex="cn=.*,ou=People,o=Simpsons" write + by dn.regex="cn=.*,ou=Pets,o=Simpsons" write by * read access to * by * read -database ldbm +database bdb suffix "dc=example.com" rootdn "cn=Manager,dc=example.com" rootpw NotAllowed @@ -28,7 +36,7 @@ index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub -database ldbm +database bdb suffix "dc=example,dc=com" rootdn "cn=Manager,dc=example,dc=com" rootpw NotAllowed @@ -43,7 +51,7 @@ index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub -database ldbm +database bdb suffix "o=Simpsons" rootdn "cn=Manager,o=Simpsons" rootpw NotAllowed @@ -57,3 +65,11 @@ index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub + +database monitor +access to * by * read + +database config +access to * by * read +rootdn cn=admin,cn=config +rootpw password diff --git a/doc/pla-test-i18n.ldif b/doc/pla-test-i18n.ldif index b094593..fefaaf2 100644 --- a/doc/pla-test-i18n.ldif +++ b/doc/pla-test-i18n.ldif @@ -1,4 +1,4 @@ -# $Header: /cvsroot/phpldapadmin/phpldapadmin/doc/pla-test-i18n.ldif,v 1.4 2004/03/19 20:22:54 i18phpldapadmin Exp $ +# $Header$ # This is a Test-File for characters / encoding # 1. Change the # ,dc=example,dc=com diff --git a/hooks/functions/example.php b/hooks/functions/example.php new file mode 100644 index 0000000..0fd8311 --- /dev/null +++ b/hooks/functions/example.php @@ -0,0 +1,404 @@ +sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Global Vars: %s',join('| ',array_keys($GLOBALS))), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('post_session_init','example_post_session_init'); + +/** + * This pre_connect function is called before making a connection to the LDAP server. + * While PLA makes many calls to connect to the LDAP server, this is called only once + * when caching is turned on. + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @see post_connect + */ +function example_pre_connect() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
',$args[0],$args[1]), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('pre_connect','example_pre_connect'); + +/** + * This post_connect function is called after making a connection to the LDAP server. + * While PLA makes many calls to connect to the LDAP server, this is called only once + * when caching is turned on. + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string User ID of the user who successfully made the connection. + * @see pre_connect + */ +function example_post_connect() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • User DN: %s
',$args[0],$args[1],$args[2]), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('post_connect','example_post_connect'); + +/** + * This pre_entry_create function is called before an entry is created in ds_ldap_pla::add(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the entry created + * @param array Attributes for the new DN + * @see post_entry_create + */ +function example_pre_entry_create() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attributes: %s
',$args[0],$args[1],$args[2],join(',',(array_keys($args[3])))), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('pre_entry_create','example_pre_entry_create'); + +/** + * This post_entry_create function is called after an entry is created in ds_ldap_pla::add(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the entry created + * @param array Attributes for the new DN + * @see pre_entry_create + */ +function example_post_entry_create() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attributes: %s
',$args[0],$args[1],$args[2],join(',',(array_keys($args[3])))), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('post_entry_create','example_post_entry_create'); + +/** + * This pre_entry_delete function is called before an entry is deleted in ds_ldap_pla::delete(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the entry deleted + * @see post_entry_delete + */ +function example_pre_entry_delete() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
',$args[0],$args[1],$args[2]), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('pre_entry_delete','example_pre_entry_delete'); + +/** + * This post_entry_delete function is called after an entry is deleted in ds_ldap_pla::delete(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the entry deleted + * @see pre_entry_delete + */ +function example_post_entry_delete() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
',$args[0],$args[1],$args[2]), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('post_entry_delete','example_post_entry_delete'); + +/** + * This pre_entry_rename function is called before an entry is renamed in ds_ldap_pla::rename(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string Old DN of the entry to be renamed + * @param string New RDN for the new entry + * @param string Container for the new entry + * @see post_entry_rename + */ +function example_pre_entry_rename() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • New RDN: %s
  • New Container: %s
',$args[0],$args[1],$args[2],$args[3],$args[4]), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('pre_entry_rename','example_pre_entry_rename'); + +/** + * This post_entry_rename function is called after an entry is renamed in ds_ldap_pla::rename(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string Old DN of the entry to be renamed + * @param string New RDN for the new entry + * @param string Container for the new entry + * @see pre_entry_rename + */ +function example_post_entry_rename() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • New RDN: %s
  • New Container: %s
',$args[0],$args[1],$args[2],$args[3],$args[4]), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('post_entry_rename','example_post_entry_rename'); + +/** + * This pre_entry_modify function is called before an entry is modified in ds_ldap_pla::modify(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the entry to be modified + * @param array Attributes to be modified + * @see post_entry_modify + */ +function example_pre_entry_modify() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attributes: %s
',$args[0],$args[1],$args[2],join('|',array_keys($args[3]))), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('pre_entry_modify','example_pre_entry_modify'); + +/** + * This post_entry_modify function is called after an entry is modified in ds_ldap_pla::modify(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the entry to be modified + * @param array Attributes to be modified + * @see pre_entry_modify + */ +function example_post_entry_modify() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attributes: %s
',$args[0],$args[1],$args[2],join('|',array_keys($args[3]))), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('post_entry_modify','example_post_entry_modify'); + +// pre_attr_add +// post_attr_add +/** + * This pre_attr_add function is called before an attribute is deleted in ds_ldap_pla::modify(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the attribute to be deleted + * @param string Attribute to be deleted + * @param array Old values + * @see post_attr_add + */ +function example_pre_attr_add() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attribute: %s
  • New Values: %s
',$args[0],$args[1],$args[2],$args[3],join('|',$args[4])), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('pre_attr_add','example_pre_attr_add'); + +/** + * This post_attr_add function is called after an attribute is added in ds_ldap_pla::modify(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the attribute to be added + * @param string Attribute to be added + * @param array New values + * @see pre_attr_add + */ +function example_post_attr_add() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attribute: %s
  • New Values: %s
',$args[0],$args[1],$args[2],$args[3],join('|',$args[4])), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('post_attr_add','example_post_attr_add'); + +// pre_attr_modify +// post_attr_modify +/** + * This pre_attr_modify function is called before an attribute is modified in ds_ldap_pla::modify(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the attribute to be modified + * @param string Attribute to be modified + * @param array New values + * @see post_attr_modify + */ +function example_pre_attr_modify() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attribute: %s
  • Old Values: %s
  • New Values: %s
',$args[0],$args[1],$args[2],$args[3],join('|',$args[4]),join('|',$args[5])), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('pre_attr_modify','example_pre_attr_modify'); + +/** + * This post_attr_modify function is called after an attribute is deleted in ds_ldap_pla::modify(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the attribute to be deleted + * @param string Attribute to be deleted + * @param array Old values + * @see pre_attr_modify + */ +function example_post_attr_modify() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attribute: %s
  • Old Values: %s
  • New Values: %s
',$args[0],$args[1],$args[2],$args[3],join('|',$args[4]),join('|',$args[5])), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('post_attr_modify','example_post_attr_modify'); + +/** + * This pre_attr_delete function is called before an attribute is deleted in ds_ldap_pla::modify(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the attribute to be deleted + * @param string Attribute to be deleted + * @param array Old values + * @see post_attr_delete + */ +function example_pre_attr_delete() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attribute: %s
  • Old Values: %s
',$args[0],$args[1],$args[2],$args[3],join('|',$args[4])), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('pre_attr_delete','example_pre_attr_delete'); + +/** + * This post_attr_delete function is called after an attribute is deleted in ds_ldap_pla::modify(). + * + * Arguments available are: + * @param int Server ID of the server to be connected to + * @param string Method. The user connection method, normally 'user'. + * @param string DN of the attribute to be deleted + * @param string Attribute to be deleted + * @param array Old values + * @see pre_attr_delete + */ +function example_post_attr_delete() { + $args = func_get_args(); + + system_message(array( + 'title'=>sprintf('Hook called [%s]',__METHOD__), + 'body'=>sprintf('Arguments:
  • Server ID: %s
  • Method: %s
  • DN: %s
  • Attribute: %s
  • Old Values: %s
',$args[0],$args[1],$args[2],$args[3],join('|',$args[4])), + 'type'=>'info','special'=>true)); + + return true; +} +add_hook('post_attr_delete','example_post_attr_delete'); +?> diff --git a/htdocs/add_attr.php b/htdocs/add_attr.php deleted file mode 100644 index 574e4f1..0000000 --- a/htdocs/add_attr.php +++ /dev/null @@ -1,167 +0,0 @@ -isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); - -if (! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('add attribute')),'error','index.php'); - -$entry = array(); -$entry['val'] = get_request('val','POST'); -$entry['binary'] = get_request('binary','POST'); - -$entry['dn']['string'] = get_request('dn','POST'); -$entry['dn']['encode'] = rawurlencode($entry['dn']['string']); - -$entry['attr']['string'] = get_request('attr','POST'); -$entry['attr']['encode'] = rawurlencode($entry['attr']['string']); - -if ((strlen($entry['binary']) <= 0) && (strlen($entry['val']) <= 0)) - error(_('You left the attribute value blank. Please go back and try again.'),'error','index.php'); - -/* - * Special case for binary attributes (like jpegPhoto and userCertificate): - * we must go read the data from the file and override $val with the binary data - * Secondly, we must check if the ";binary" option has to be appended to the name - * of the attribute. - */ - -# Check to see if this is a unique Attribute -if ($badattr = $ldapserver->checkUniqueAttr($entry['dn']['string'],$entry['attr']['string'],array($entry['val']))) { - $href = htmlspecialchars(sprintf('cmd.php?cmd=search&search=true&form=advanced&server_id=%s&filter=%s=%s', - $ldapserver->server_id,$entry['attr']['string'],$badattr)); - - error(sprintf(_('Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'),$entry['attr']['string'],$badattr,$entry['dn']['string'],$href),'error','index.php'); -} - -if (strlen($entry['binary']) > 0) { - if ($_FILES['val']['size'] == 0) - error(_('The file you chose is either empty or does not exist. Please go back and try again.'),'error','index.php'); - - if (! is_uploaded_file($_FILES['val']['tmp_name'])) { - if (isset($_FILES['val']['error'])) - - switch($_FILES['val']['error']) { - case 0: # No error; possible file attack! - error(_('Security error: The file being uploaded may be malicious.'),'error','index.php'); - break; - - case 1: # Uploaded file exceeds the upload_max_filesize directive in php.ini - error(_('The file you uploaded is too large. Please check php.ini, upload_max_size setting'),'error','index.php'); - break; - - case 2: # Uploaded file exceeds the MAX_FILE_SIZE directive specified in the html form - error(_('The file you uploaded is too large. Please check php.ini, upload_max_size setting'),'error','index.php'); - break; - - case 3: # Uploaded file was only partially uploaded - error(_('The file you selected was only partially uploaded, likley due to a network error.'),'error','index.php'); - break; - - case 4: # No file was uploaded - error(_('You left the attribute value blank. Please go back and try again.'),'error','index.php'); - break; - - default: # A default error, just in case! :) - error(_('Security error: The file being uploaded may be malicious.'),'error','index.php'); - break; - } - - else - error(_('Security error: The file being uploaded may be malicious.'),'error','index.php'); - } - - $binaryfile['name'] = $_FILES['val']['tmp_name']; - $binaryfile['handle'] = fopen($binaryfile['name'],'r'); - $binaryfile['data'] = fread($binaryfile['handle'],filesize($binaryfile['name'])); - fclose($binaryfile['handle']); - - $entry['val'] = $binaryfile['data']; - - if (is_binary_option_required($ldapserver,$entry['attr']['string'])) - $entry['attr']['string'] .= ';binary'; -} - -/* Automagically hash new userPassword attributes according to the - chosen in config.php. */ -if (strcasecmp($entry['attr']['string'],'userpassword') == 0) { - if (trim($ldapserver->default_hash) != '' ) { - $enc_type = $ldapserver->default_hash; - $entry['val'] = password_hash($entry['val'],$enc_type); - } - -} elseif (strcasecmp($entry['attr']['string'],'sambaNTPassword') == 0) { - $sambapassword = new smbHash; - $entry['val'] = $sambapassword->nthash($entry['val']); - -} elseif (strcasecmp($entry['attr']['string'],'sambaLMPassword') == 0) { - $sambapassword = new smbHash; - $entry['val'] = $sambapassword->lmhash($entry['val']); -} - -$new_entry = array($entry['attr']['string'] => $entry['val']); -$result = $ldapserver->attrModify($entry['dn']['string'],$new_entry); - -if ($result) { - header(sprintf('Location: cmd.php?cmd=template_engine&server_id=%s&dn=%s&modified_attrs[]=%s', - $ldapserver->server_id,$entry['dn']['encode'],$entry['attr']['encode'])); - die(); - -} else { - system_message(array( - 'title'=>_('Failed to add the attribute.'), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); -} - -/** - * Check if we need to append the ;binary option to the name - * of some binary attribute - * - * @param object $ldapserver Server Object that the attribute is in. - * @param attr $attr Attribute to test to see if it requires ;binary added to it. - * @return bool - */ - -function is_binary_option_required($ldapserver,$attr) { - # List of the binary attributes which need the ";binary" option - $binary_attributes_with_options = array( - # Superior: Ldapv3 Syntaxes (1.3.6.1.4.1.1466.115.121.1) - '1.3.6.1.4.1.1466.115.121.1.8' => 'userCertificate', - '1.3.6.1.4.1.1466.115.121.1.8' => 'caCertificate', - '1.3.6.1.4.1.1466.115.121.1.10' => 'crossCertificatePair', - '1.3.6.1.4.1.1466.115.121.1.9' => 'certificateRevocationList', - '1.3.6.1.4.1.1466.115.121.1.9' => 'authorityRevocationList', - # Superior: Netscape Ldap attributes types (2.16.840.1.113730.3.1) - '2.16.840.1.113730.3.1.40' => 'userSMIMECertificate' - ); - - $schema_attr = $ldapserver->getSchemaAttribute($attr); - if (! $schema_attr) - return false; - - $syntax = $schema_attr->getSyntaxOID(); - if (isset($binary_attributes_with_options[$syntax])) - return true; - - return false; -} -?> diff --git a/htdocs/add_attr_form.php b/htdocs/add_attr_form.php index 4455163..1c66f29 100644 --- a/htdocs/add_attr_form.php +++ b/htdocs/add_attr_form.php @@ -1,184 +1,183 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +# The DN we are working with +$request = array(); +$request['dn'] = get_request('dn','GET'); -$entry = array(); -$entry['dn']['string'] = get_request('dn','GET'); -$entry['rdn'] = get_rdn($entry['dn']['string']); +# Check if the entry exists. +if (! $request['dn'] || ! $app['server']->dnExists($request['dn'])) + error(sprintf(_('The entry (%s) does not exist.'),$request['dn']),'error','index.php'); -printf('

%s %s

',_('Add new attribute'),htmlspecialchars($entry['rdn'])); -printf('

%s: %s     %s: %s

', - _('Server'),$ldapserver->name,_('Distinguished Name'),htmlspecialchars($entry['dn']['string'])); +$request['page'] = new TemplateRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setDN($request['dn']); +$request['page']->accept(true); +$request['template'] = $request['page']->getTemplate(); -$dn = array(); -$dn['attrs'] = $ldapserver->getDNAttrs($entry['dn']['string']); -$dn['oclasses'] = $ldapserver->getDNAttr($entry['dn']['string'],'objectClass'); +# Render the form +if (get_request('meth','REQUEST') != 'ajax') { + $request['page']->drawTitle(sprintf('%s %s',_('Add new attribute'),get_rdn($request['dn']))); + $request['page']->drawSubTitle(); -if (! is_array($dn['oclasses'])) - $dn['oclasses'] = array($dn['oclasses']); + echo '
'; + if (count($request['template']->getAvailAttrs())) { + # If we have more than the configured entries, we'll separate our input to the old ways. + if (count($request['template']->getAvailAttrs()) > $_SESSION[APPCONFIG]->getValue('appearance','max_add_attrs')) { + $attr = array(); + $attr['avail'] = array(); + $attr['binary'] = array(); -$ldap['attrs']['avail'] = array(); + foreach ($request['template']->getAvailAttrs() as $attribute) + if ($app['server']->isAttrBinary($attribute->getName())) + array_push($attr['binary'],$attribute); + else + array_push($attr['avail'],$attribute); -if (array_search('extensibleObject',$dn['oclasses']) !== false) { - $ldap['attrs']['ldap'] = $ldapserver->SchemaAttributes(); + if (count($attr['avail']) > 0) { + echo '
'; + echo _('Add new attribute'); + echo '
'; + echo '
'; - foreach ($ldap['attrs']['ldap'] as $attr) - $ldap['attrs']['avail'][] = $attr->getName(); + echo '
'; -} else { - $ldap['oclasses'] = $ldapserver->SchemaObjectClasses($entry['dn']['string']); + if ($_SESSION[APPCONFIG]->getValue('confirm','update')) + echo ''; + else + echo ''; - foreach ($dn['oclasses'] as $oclass) { - $ldap['oclass'] = $ldapserver->getSchemaObjectClass($oclass,$entry['dn']['string']); + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['dn'])); - if ($ldap['oclass'] && strcasecmp('objectclass',get_class($ldap['oclass'])) == 0) - $ldap['attrs']['avail'] = array_merge($ldap['oclass']->getMustAttrNames($ldap['oclasses']), - $ldap['oclass']->getMayAttrNames($ldap['oclasses']), - $ldap['attrs']['avail']); - } -} + echo ''; -echo '
'; + echo ''; + printf('',_('Add')); + echo ''; -if (is_array($ldap['attrs']['avail']) && count($ldap['attrs']['avail']) > 0) { - echo '
'; - echo _('Add new attribute'); - echo '
'; - echo '
'; + } else { + echo '
'; + printf('(%s)',_('no new attributes available for this entry')); + } - echo '
'; - echo ''; - printf('',$ldapserver->server_id); - printf('',htmlspecialchars($entry['dn']['string'])); + if (count($attr['binary']) > 0) { + echo '
'; + echo _('Add new binary attribute'); + echo '
'; + echo '
'; - echo ''; + else + echo ''; - foreach ($ldap['attrs']['avail'] as $a) { + printf('',$app['server']->getIndex()); + printf('',$request['dn']); + echo ''; - # is there a user-friendly translation available for this attribute? - if ($_SESSION[APPCONFIG]->haveFriendlyName($a)) { - $attr_display = sprintf('%s (%s)', - htmlspecialchars($_SESSION[APPCONFIG]->getFriendlyName($a)), - htmlspecialchars($a)); + echo ''; + + echo ''; + printf('',_('Add')); + + if (! ini_get('file_uploads')) + printf('
%s
', + _('Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.')); + + else + printf('
%s: %s
',_('Maximum file size'),ini_get('upload_max_filesize')); + + echo '
'; + + } else { + echo '
'; + printf('(%s)',_('no new binary attributes available for this entry')); + } } else { - $attr_display = htmlspecialchars($a); + echo '
'; + + $request['page']->drawFormStart(); + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['dn'])); + + echo ''; + + foreach ($request['template']->getAvailAttrs() as $attribute) + $request['page']->draw('Template',$attribute); + + $request['page']->drawFormSubmitButton(); + echo '
'; + + $request['page']->drawFormEnd(); } - printf('',htmlspecialchars($a),$attr_display); + } else { + printf('(%s)',_('no new attributes available for this entry')); } + echo '
'; + +# The ajax addition (it is going into an existing TemplateRendered page +} else { + # Put our DIV there for the callback + echo '
'; + printf('%s',_('Add Attribute')); + echo '
'; + echo ''; + echo ''; + echo '
'; + + printf(''; - echo ''; - printf('',_('Add')); - echo ''; - -} else { - echo '
'; - printf('(%s)',_('no new attributes available for this entry')); -} - -if (count($ldap['binattrs']['avail']) > 0) { - echo '
'; - echo _('Add new binary attribute'); - echo '
'; - echo '
'; - - echo ''; - echo '
'; - echo ''; - printf('',$ldapserver->server_id); - printf('',$entry['dn']['string']); - echo ''; - - echo ''; - - echo ''; - printf('',_('Add')); - - if (! ini_get('file_uploads')) - printf('
%s
', - _('Your PHP configuration has disabled file uploads. Please check php.ini before proceeding.')); - - else - printf('
%s: %s
',_('Maximum file size'),ini_get('upload_max_filesize')); - - echo '
'; - -} else { - echo '
'; - printf('(%s)',_('no new binary attributes available for this entry')); -} - -echo ''; - -/** - * Given an attribute $x, this returns true if it is NOT already specified - * in the current entry, returns false otherwise. - * - * @param attr $x - * @return bool - * @ignore - */ -function not_an_attr($x) { - global $dn; - - foreach ($dn['attrs'] as $attr => $values) - if (strcasecmp($attr,$x) == 0) - return false; - - return true; + echo '
'; + echo '
'; + echo '
'; } ?> diff --git a/htdocs/add_oclass.php b/htdocs/add_oclass.php deleted file mode 100644 index c270071..0000000 --- a/htdocs/add_oclass.php +++ /dev/null @@ -1,70 +0,0 @@ -isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); - -if ($ldapserver->isAttrReadOnly('objectClass')) - error(_('ObjectClasses are flagged as read only in the phpLDAPadmin configuration.'),'error','index.php'); - -$entry = array(); -$entry['dn']['encode'] = get_request('dn'); -$entry['dn']['string'] = urldecode($entry['dn']['encode']); - -$entry['new']['oclass'] = unserialize(rawurldecode(get_request('new_oclass'))); -$entry['new']['attrs'] = get_request('new_attrs'); - -$new_entry = array(); -$new_entry['objectClass'] = $entry['new']['oclass']; - -if (is_array($entry['new']['attrs']) && count($entry['new']['attrs']) > 0) - foreach ($entry['new']['attrs'] as $attr => $val) { - - # Check to see if this is a unique Attribute - if ($badattr = $ldapserver->checkUniqueAttr($entry['dn']['string'],$attr,array($val))) { - $href['search'] = htmlspecialchars(sprintf('cmd.php?cmd=search&search=true&form=advanced&server_id=%s&filter=%s=%s', - $ldapserver->server_id,$attr,$badattr)); - - error(sprintf(_('Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'),$attr,$badattr,$entry['dn']['string'],$href['search']),'error','index.php'); - } - - $new_entry[$attr] = $val; - } - -$result = $ldapserver->attrModify($entry['dn']['string'],$new_entry); - -if (! $result) - system_message(array( - 'title'=>_('Could not perform ldap_mod_add operation.'), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); - -else { - $modified_attrs = array_keys($entry['new']['attrs']); - $modified_attrs[] = 'objectclass'; - - $href['complete'] = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s&modified_attrs=%s', - $ldapserver->server_id,$entry['dn']['encode'],serialize($modified_attrs)); - - header(sprintf('Location: %s',$href['complete'])); - die(); -} -?> diff --git a/htdocs/add_oclass_form.php b/htdocs/add_oclass_form.php index 22490f4..8e18686 100644 --- a/htdocs/add_oclass_form.php +++ b/htdocs/add_oclass_form.php @@ -1,81 +1,68 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +# Check if the entry exists. +if (! $request['dn'] || ! $app['server']->dnExists($request['dn'])) + error(sprintf(_('The entry (%s) does not exist.'),$request['dn']),'error','index.php'); -if (! $entry['oclass']['new']) - error(_('You did not select any ObjectClasses for this object. Please go back and do so.'),'error','index.php'); +$request['page'] = new TemplateRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setDN($request['dn']); +$request['page']->accept(true); +$request['template'] = $request['page']->getTemplate(); -/* Ensure that the object has defined all MUST attrs for this objectClass. - * If it hasn't, present a form to have the user enter values for all the - * newly required attrs. - */ - -$entry['dn']['attrs'] = $ldapserver->getDNAttrs($entry['dn']['string'],true); - -$entry['attrs']['current'] = array(); -foreach ($entry['dn']['attrs'] as $attr => $junk) - $entry['attrs']['current'][] = strtolower($attr); +$attribute_factory = new AttributeFactory(); # Grab the required attributes for the new objectClass -$ldap['oclasses'] = $ldapserver->SchemaObjectClasses(); +$ldap = array(); $ldap['attrs']['must'] = array(); -foreach ($entry['oclass']['new'] as $oclass_name) { - $ldap['oclass'] = $ldapserver->getSchemaObjectClass($oclass_name); - if ($ldap['oclass']) - $ldap['attrs']['must'] = array_merge($ldap['attrs']['must'],$ldap['oclass']->getMustAttrNames($ldap['oclasses'])); +foreach ($request['template']->getAttribute('objectclass')->getValues() as $oclass_name) { + # Exclude "top" if its there. + if (! strcasecmp('top',$oclass_name)) + continue; + + if ($soc = $app['server']->getSchemaObjectClass($oclass_name)) + $ldap['attrs']['must'] = array_merge($ldap['attrs']['must'],$soc->getMustAttrNames(true)); } + $ldap['attrs']['must'] = array_unique($ldap['attrs']['must']); /* Build a list of the attributes that this new objectClass requires, - * but that the object does not currently contain - */ + * but that the object does not currently contain */ $ldap['attrs']['need'] = array(); -foreach ($ldap['attrs']['must'] as $attr) { - $attr = $ldapserver->getSchemaAttribute($attr); +foreach ($ldap['attrs']['must'] as $attr) + if (is_null($request['template']->getAttribute($attr))) + array_push($ldap['attrs']['need'],$attribute_factory->newAttribute($attr,array('values'=>array()),$app['server']->getIndex())); - # First, check if one of this attr's aliases is already an attribute of this entry - foreach ($attr->getAliases() as $alias_attr_name) - if (in_array(strtolower($alias_attr_name),$entry['attrs']['current'])) - continue; - - if (in_array(strtolower($attr->getName()),$entry['attrs']['current'])) - continue; - - /* We made it this far, so the attribute needs to be added to this entry in order - * to add this objectClass */ - $ldap['attrs']['need'][] = $attr; -} +# Mark all the need attributes as shown +foreach ($ldap['attrs']['need'] as $index => $values) + $ldap['attrs']['need'][$index]->show(); if (count($ldap['attrs']['need']) > 0) { - printf('

%s

',_('New Required Attributes')); - printf('

%s %s %s

',_('This action requires you to add'),count($ldap['attrs']['need']),_('new attributes')); + $request['page']->drawTitle(sprintf('%s %s',_('Add new objectClass to'),get_rdn($request['dn']))); + $request['page']->drawSubTitle(); + echo '
'; printf('%s: %s %s %s %s', _('Instructions'), _('In order to add these objectClass(es) to this entry, you must specify'), @@ -84,39 +71,44 @@ if (count($ldap['attrs']['need']) > 0) { echo '

'; - echo '
'; - echo ''; - printf('',rawurlencode(serialize($entry['oclass']['new']))); - printf('',rawurlencode($entry['dn']['string'])); - printf('',$ldapserver->server_id); + echo ''; + + if ($_SESSION[APPCONFIG]->getValue('confirm','update')) + echo ''; + else + echo ''; + + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['dn'])); echo ''; printf('',_('New Required Attributes')); - foreach ($ldap['attrs']['need'] as $count => $attr) { - printf('',htmlspecialchars($attr->getName())); - printf('',htmlspecialchars($attr->getName())); + $counter = 0; + foreach ($request['template']->getAttribute('objectclass')->getValues() as $value) { + echo ''; } + foreach ($ldap['attrs']['need'] as $count => $attr) + $request['page']->draw('Template',$attr); + echo '
%s
%s
'; + $request['page']->draw('HiddenValue',$request['template']->getAttribute('objectclass'),$counter++); + echo '
'; - echo '

'; + echo '
'; printf('
',_('Add ObjectClass and Attributes')); echo '
'; + echo '
'; +# There are no other required attributes, so we just need to add the objectclass to the DN. } else { - $result = $ldapserver->attrModify($entry['dn']['string'],array('objectClass'=>$entry['oclass']['new'])); + $result = $app['server']->modify($request['dn'],$request['template']->getLDAPmodify()); - if (! $result) - system_message(array( - 'title'=>_('Could not perform ldap_mod_add operation.'), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); - - else { - $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s&modified_attrs[]=objectClass', - $ldapserver->server_id,rawurlencode($entry['dn']['string'])); + if ($result) { + $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s&modified_attrs[]=objectclass', + $app['server']->getIndex(),rawurlencode($request['dn'])); header(sprintf('Location: %s',$href)); die(); diff --git a/htdocs/add_value.php b/htdocs/add_value.php deleted file mode 100644 index e75608f..0000000 --- a/htdocs/add_value.php +++ /dev/null @@ -1,88 +0,0 @@ -isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); - -if (! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('add attribute value')),'error','index.php'); - -# The DN and ATTR we are working with. -$entry = array(); -$entry['dn']['encode'] = get_request('dn','POST',true); -$entry['dn']['string'] = rawurldecode($entry['dn']['encode']); -$entry['attr']['encode'] = get_request('attr','POST',true); -$entry['attr']['string'] = rawurldecode($entry['attr']['encode']); -$entry['attr']['html'] = htmlspecialchars($entry['attr']['string']); - -$entry['value']['string'] = get_request('new_value','POST',true); -$entry['value']['bin'] = get_request('binary','POST') ? true : false; - -if ($ldapserver->isAttrReadOnly($entry['attr']['string'])) - error(sprintf(_('The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'),$entry['attr']['html']),'error','index.php'); - -/* - * Special case for binary attributes: - * we must go read the data from the file. - */ -if ($entry['value']['bin']) { - $binaryfile['name'] = $_FILES['new_value']['tmp_name']; - $binaryfile['handle'] = fopen($binaryfile['name'],'r'); - $binaryfile['data'] = fread($binaryfile['handle'],filesize($binaryfile['name'])); - fclose($binaryfile['handle']); - - $entry['value']['string'] = $binaryfile['data']; -} - -$new_entry = array($entry['attr']['string']=>$entry['value']['string']); - -# Check to see if this is a unique Attribute -if ($badattr = $ldapserver->checkUniqueAttr($entry['dn']['string'],$entry['attr']['string'],$new_entry)) { - $href = htmlspecialchars(sprintf('cmd.php?cmd=search&search=true&form=advanced&server_id=%s&filter=%s=%s', - $ldapserver->server_id,$entry['attr']['string'],$badattr)); - - error(sprintf(_('Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'),$entry['attr']['string'],$badattr,$entry['dn']['string'],$href),'error','index.php'); -} - -# Call the custom callback for each attribute modification and verify that it should be modified. -if (run_hook('pre_attr_add', - array('server_id'=>$ldapserver->server_id,'dn'=> $entry['dn']['string'],'attr_name'=>$entry['attr']['string'],'new_value'=>$new_entry))) { - - if (run_hook('pre_attr_modify', - array('server_id'=>$ldapserver->server_id,'dn'=>$entry['dn']['string'],'attr_name'=>$entry['attr']['string'],'new_value'=>$new_entry))) { - - $add_result = $ldapserver->attrModify($entry['dn']['string'],$new_entry); - - if (! $add_result) { - system_message(array( - 'title'=>_('Could not perform ldap_mod_add operation.'), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); - - } else { - run_hook('post_attr_modify', - array('server_id'=>$ldapserver->server_id,'dn'=>$entry['dn']['string'],'attr_name'=>$entry['attr']['string'],'new_value'=>$new_entry)); - } - } -} - -header(sprintf('Location: cmd.php?cmd=template_engine&server_id=%s&dn=%s&modified_attrs[]=%s', - $ldapserver->server_id,$entry['dn']['encode'],$entry['attr']['encode'])); -die(); -?> diff --git a/htdocs/add_value_form.php b/htdocs/add_value_form.php index e77792e..e4b1685 100644 --- a/htdocs/add_value_form.php +++ b/htdocs/add_value_form.php @@ -1,327 +1,179 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); - # The DN and ATTR we are working with. -$entry = array(); -$entry['dn']['encode'] = get_request('dn','GET',true); -$entry['dn']['string'] = urldecode($entry['dn']['encode']); -$entry['dn']['html'] = htmlspecialchars($entry['dn']['string']); -$entry['attr']['string'] = get_request('attr','GET',true); -$entry['attr']['encode'] = rawurlencode($entry['attr']['string']); -$entry['attr']['html'] = htmlspecialchars($entry['attr']['string']); +$request = array(); +$request['dn'] = get_request('dn','GET',true); +$request['attr'] = get_request('attr','GET',true); -if (! is_null($entry['dn']['string'])) - $entry['rdn']['string'] = get_rdn($entry['dn']['string']); -else - $entry['rdn']['string'] = null; -$entry['rdn']['html'] = htmlspecialchars($entry['rdn']['string']); +# Check if the entry exists. +if (! $request['dn'] || ! $app['server']->dnExists($request['dn'])) + error(sprintf(_('The entry (%s) does not exist.'),$request['dn']),'error','index.php'); -/***************/ -/* get entry */ -/***************/ - -if (! $entry['dn']['string'] || ! $ldapserver->dnExists($entry['dn']['string'])) - error(sprintf(_('The entry (%s) does not exist.'),$entry['dn']['html']),'error','index.php'); +$request['page'] = new TemplateRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setDN($request['dn']); +$request['page']->accept(true); +$request['template'] = $request['page']->getTemplate(); -$tree = get_cached_item($ldapserver->server_id,'tree'); -$entry['ldap'] = null; -if ($tree) { - $entry['ldap'] = $tree->getEntry($entry['dn']['string']); - - if (! $entry['ldap']) - $tree->addEntry($entry['dn']['string']); - - $entry['ldap'] = $tree->getEntry($entry['dn']['string']); -} - -# Define the template of the entry if possible -eval('$reader = new '.$_SESSION[APPCONFIG]->GetValue('appearance','entry_reader').'($ldapserver);'); -$reader->visit('Start', $entry['ldap']); - -if (! $entry['ldap'] || $entry['ldap']->isReadOnly()) - error(sprintf(_('The entry (%s) is in readonly mode.'),$entry['dn']['html']),'error','index.php'); - -/*********************/ -/* attribute values */ -/*********************/ - -eval('$writer = new '.$_SESSION[APPCONFIG]->GetValue('appearance','entry_writer').'($ldapserver);'); - -$ldap['attr'] = $entry['ldap']->getAttribute($entry['attr']['string']); -if (!$ldap['attr']) { - # Define a new attribute for the entry - $attributefactoryclass = $_SESSION[APPCONFIG]->GetValue('appearance','attribute_factory'); - eval('$attribute_factory = new '.$attributefactoryclass.'();'); - $ldap['attr'] = $attribute_factory->newAttribute($entry['attr']['string'], array()); - $ldap['attr']->setEntry($entry['ldap']); -} -$ldap['count'] = $ldap['attr']->getValueCount(); - -if ($ldap['attr']->isReadOnly()) - error(sprintf(_('The attribute (%s) is in readonly mode.'),$entry['attr']['html']),'error','index.php'); +/* +if ($request['attribute']->isReadOnly()) + error(sprintf(_('The attribute (%s) is in readonly mode.'),$request['attr']),'error','index.php'); +# Check our permissions if (! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('add attribute value')),'error','index.php'); + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('add attribute value')),'error','index.php'); -if (($ldap['attr']->getValueCount() == 0) && ! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('add attribute')),'error','index.php'); +if (($request['attribute']->getValueCount() == 0) && ! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add')) + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('add attribute')),'error','index.php'); +*/ -$entry['attr']['oclass'] = (strcasecmp($entry['attr']['string'],'objectClass') == 0) ? true : false; +# Render the form +if (get_request('meth','REQUEST') != 'ajax') { + # Render the form. + $request['page']->drawTitle(sprintf('%s %s %s %s',_('Add new'),$request['attr'],_('value to'),get_rdn($request['dn']))); + $request['page']->drawSubTitle(); -if ($entry['attr']['oclass']) { - # Fetch all available objectClasses and remove those from the list that are already defined in the entry - $ldap['oclasses'] = $ldapserver->SchemaObjectClasses(); + if (! strcasecmp($request['attr'],'objectclass')) { + echo '

'; + echo ''; - foreach($ldap['attr']->getValues() as $oclass) - unset($ldap['oclasses'][strtolower($oclass)]); -} else { - $ldap['schema'] = $ldapserver->getSchemaAttribute($entry['attr']['string']); -} - -printf('

%s %s %s %s

', - _('Add new'),$entry['attr']['html'],_('value to'),$entry['rdn']['html']); -printf('

%s %s     %s: %s

', - _('Server'),$ldapserver->name,_('Distinguished Name'),$entry['dn']['html']); - -if ($entry['attr']['oclass']) { - echo ''; - echo ''; -} else { - echo ''; - echo ''; -} -printf('',$ldapserver->server_id); -printf('',$entry['dn']['encode']); - -echo '
'; -echo ''; -echo ''; -if ($ldap['count']) { - printf('', - _('Current list of'),$ldap['count'],_('values for attribute'),$ldap['attr']->getFriendlyName(),_(':')); -} else { - printf('', - _('No current value for attribute'),$ldap['attr']->getFriendlyName()); -} - -echo ''; -echo ''; + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['dn'])); -echo ''; -printf('',_('Enter the value you would like to add:')); -echo ''; echo ''; - if ($_SESSION[APPCONFIG]->GetValue('appearance','show_hints')) - printf('', - IMGDIR,_('Note: You may be required to enter new attributes that these objectClass(es) require')); - echo '
%s %s %s %s%s%s %s.'; -if ($ldap['count']) { - # Display current attribute values - echo '
'; - for ($i = 0; $i < $ldap['count']; $i++) { - $writer->draw('OldValue', $ldap['attr'], $i); - $writer->draw('ReadOnlyValue', $ldap['attr'], $i); + } else { + echo ''; + if ($_SESSION[APPCONFIG]->getValue('confirm','update')) + echo ''; + else + echo ''; } - echo '
'; -} else { - echo '

'; -} -echo '
%s'; + echo '
'; + echo ''; + echo ''; -if ($entry['attr']['oclass']) { - # Draw objectClass selection - echo '
', + _('Current list of'),$request['count'],_('values for attribute'),$request['attribute']->getFriendlyName()); + + echo ''; + + } else { + printf('', + _('No current value for attribute'),$request['attribute']->getFriendlyName()); + echo ''; } - echo ''; - echo '
'; - echo '%s %s %s %s:'; + + # Display current attribute values + echo '
'; + for ($i=0;$i<$request['count'];$i++) { + if ($i > 0) + echo '
'; + $request['page']->draw('CurrentValue',$request['attribute'],$i); + $request['page']->draw('HiddenValue',$request['attribute'],$i); + } + echo '
'; + + echo '
%s %s.

'; - echo '
'; - printf('',_('Add new ObjectClass')); - echo '
'; - echo '

Hint%s
'; - echo '
'; - echo '
'; + echo ''; + printf('%s',_('Enter the value(s) you would like to add:')); + echo ''; + + if (! strcasecmp($request['attr'],'objectclass')) { + # If our attr is an objectClass, fetch all available objectClasses and remove those from the list that are already defined in the entry + $socs = $app['server']->SchemaObjectClasses(); + + foreach ($request['attribute']->getValues() as $oclass) + unset($socs[strtolower($oclass)]); + + # Draw objectClass selection + echo ''; + echo '
'; + echo ''; + echo '
'; + + echo '
'; + printf('',_('Add new ObjectClass')); + echo '
'; + echo ''; + echo ''; + + if ($_SESSION[APPCONFIG]->getValue('appearance','show_hints')) + printf('
Hint%s
', + IMGDIR,_('Note: You may be required to enter new attributes that these objectClass(es) require')); + + echo ''; + echo '
'; + echo ''; + + } else { + # Draw a blank field + echo '
'; + $request['page']->draw('FormValue',$request['attribute'],$request['count']); + echo '
'; + + $sattr = $app['server']->getSchemaAttribute($request['attr']); + + if ($sattr->getDescription()) + printf('%s: %s
',_('Description'),$sattr->getDescription()); + + if ($sattr->getType()) + printf('%s: %s
',_('Syntax'),$sattr->getType()); + + if ($sattr->getMaxLength()) + printf('%s: %s %s
', + _('Maximum Length'),number_format($sattr->getMaxLength()),_('characters')); + + echo '
'; + printf('',_('Add New Value')); + echo '
'; + + echo ''; + echo ''; + echo ''; + echo ''; + } } else { - # Draw a blank field - echo '
'; - $writer->draw('BlankValue',$ldap['attr'],$ldap['count'],$reader); - echo '
'; + if (is_null($attribute = $request['template']->getAttribute($request['attr']))) { + $request['template']->addAttribute($request['attr'],array('values'=>array())); + $attribute = $request['template']->getAttribute($request['attr']); + $attribute->show(); - if ($ldap['schema']->getDescription()) - printf('%s: %s
',_('Description'),$ldap['schema']->getDescription()); + echo ''; + $request['page']->draw('Template',$attribute); + echo '
'; - if ($ldap['schema']->getType()) - printf('%s: %s
',_('Syntax'),$ldap['schema']->getType()); - - if ($ldap['schema']->getMaxLength()) - printf('%s: %s %s
', - _('Maximum Length'),number_format($ldap['schema']->getMaxLength()),_('characters')); - - echo '
'; - printf('',_('Add New Value')); - echo '
'; - - echo ''; - echo ''; - echo ''; - echo ''; - - # Javascript - echo ''; - - echo ''; - - echo ''; - - echo ''; - - echo ''; - - $writer->draw('Javascript', $ldap['attr']); - - echo ''; + } else { + $request['count'] = $attribute->getValueCount(); + $request['page']->draw('FormReadWriteValue',$attribute,$request['count']); + } } ?> diff --git a/htdocs/cmd.php b/htdocs/cmd.php index c2ba30d..39b5dbe 100644 --- a/htdocs/cmd.php +++ b/htdocs/cmd.php @@ -1,8 +1,15 @@ server_id); +# Set the index so that we render the right server tree. +$www['page'] = new page($app['server']->getIndex()); -if ($file) - include $file; +# See if we can render the command +if (trim($www['cmd'])) { + # If this is a READ-WRITE operation, the LDAP server must not be in READ-ONLY mode. + if ($app['server']->isReadOnly() && ! in_array(get_request('cmd','REQUEST'),$app['readwrite_cmds'])) + error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); + + # If this command has been disabled by the config. + if (! $_SESSION[APPCONFIG]->isCommandAvailable('script',$www['cmd'])) + system_message(array('title'=>_('Command disabled by the server configuration'), + _('Error'),'body'=>sprintf('%s: %s.',_('The command could not be run'),$www['cmd']),'type'=>'error'),'index.php'); +} + +if ($app['script_cmd']) + include $app['script_cmd']; + +# Refresh a frame - this is so that one frame can trigger another frame to be refreshed. +if (isAjaxEnabled() && get_request('refresh','REQUEST') && get_request('refresh','REQUEST') != get_request('frame','REQUEST')) { + printf(" +",get_request('refresh','REQUEST'),$app['server']->getIndex(),get_request('noheader','REQUEST',false,0),_('Auto refresh')); +} # Capture the output and put into the body of the page. $www['body'] = new block(); @@ -44,8 +74,8 @@ $www['body']->SetBody(ob_get_contents()); $www['page']->block_add('body',$www['body']); ob_end_clean(); -if ($www['meth'] == 'get_body') - $www['page']->body(true); +if ($www['meth'] == 'ajax') + $www['page']->show(get_request('frame','REQUEST',false,'BODY'),true,get_request('raw','REQUEST',false,false)); else $www['page']->display(); ?> diff --git a/htdocs/collapse.php b/htdocs/collapse.php index c8125a9..84d0f97 100644 --- a/htdocs/collapse.php +++ b/htdocs/collapse.php @@ -1,26 +1,29 @@ server_id,'tree'); +$tree = get_cached_item($app['server']->getIndex(),'tree'); $entry = $tree->getEntry($dn); $entry->close(); -set_cached_item($ldapserver->server_id,'tree','null',$tree); +set_cached_item($app['server']->getIndex(),'tree','null',$tree); header(sprintf('Location:index.php?server_id=%s&junk=%s#%s%s', - $ldapserver->server_id,random_junk(),htmlid($ldapserver->server_id,$dn),pla_session_param())); + $app['server']->getIndex(),random_junk(),htmlid($app['server']->getIndex(),$dn),app_session_param())); die(); ?> diff --git a/htdocs/common.php b/htdocs/common.php index 40a2d0f..1c001e2 100644 --- a/htdocs/common.php +++ b/htdocs/common.php @@ -1,11 +1,15 @@ getServer(get_request('server_id_src')); +$ldap['DST'] = $_SESSION[APPCONFIG]->getServer(get_request('server_id_dst')); -$ldapserver_src = $_SESSION[APPCONFIG]->ldapservers->Instance($server_id_src); -if (! $ldapserver_src->haveAuthInfo()) - error(_('Not enough information to login to server. Please check your configuration.'),'error','index.php'); +if (! $ldap['SRC']->dnExists($request['dnSRC'])) + error(sprintf('%s (%s)',_('No such entry.'),pretty_print_dn($request['dnSRC'])),'error','index.php'); -$ldapserver_dst = $_SESSION[APPCONFIG]->ldapservers->Instance($server_id_dst); -if (! $ldapserver_src->haveAuthInfo()) - error(_('Not enough information to login to server. Please check your configuration.'),'error','index.php'); +if (! $ldap['DST']->dnExists($request['dnDST'])) + error(sprintf('%s (%s)',_('No such entry.'),pretty_print_dn($request['dnDST'])),'error','index.php'); -if (! $ldapserver_src->dnExists($dn_src)) - error(sprintf('%s (%s)',_('No such entry.'),pretty_print_dn($dn_src)),'error','index.php'); +$request['pageSRC'] = new PageRender($ldap['SRC']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['pageSRC']->setDN($request['dnSRC']); +$request['pageSRC']->accept(); +$request['templateSRC'] = $request['pageSRC']->getTemplate(); -if (! $ldapserver_dst->dnExists($dn_dst)) - error(sprintf('%s (%s)',_('No such entry.'),pretty_print_dn($dn_dst)),'error','index.php'); - -$attrs_src = $ldapserver_src->getDNAttrs($dn_src,false,$_SESSION[APPCONFIG]->GetValue('deref','view')); -$attrs_dst = $ldapserver_dst->getDNAttrs($dn_dst,false,$_SESSION[APPCONFIG]->GetValue('deref','view')); +$request['pageDST'] = new PageRender($ldap['DST']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['pageDST']->setDN($request['dnDST']); +$request['pageDST']->accept(); +$request['templateDST'] = $request['pageDST']->getTemplate(); # Get a list of all attributes. -$attrs_all = array_keys($attrs_src); -foreach ($attrs_dst as $key => $val) - if (! in_array($key,$attrs_all)) - $attrs_all[] = $key; +$attrs_all = array_unique(array_merge($request['templateSRC']->getAttributeNames(),$request['templateDST']->getAttributeNames())); - printf('

%s

',_('Comparing the following DNs')); +$request['pageSRC']->drawTitle(_('Comparing the following DNs')); - echo ''; - echo ''; - printf('',_('Attribute')); +echo '
'; - printf('', - _('Server'),$ldapserver_src->name,_('Distinguished Name'),htmlspecialchars($dn_src)); +echo '

%s
 

%s: %s
%s: %s

'; +echo ''; - printf('', - _('Server'),$ldapserver_dst->name,_('Distinguished Name'),htmlspecialchars($dn_dst)); +$href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', + $ldap['SRC']->getIndex(),rawurlencode($request['dnSRC'])); +printf('', + _('Server'),$ldap['SRC']->getName(),_('Distinguished Name'), + htmlspecialchars($href),$request['dnSRC']); - echo ''; +$href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', + $ldap['DST']->getIndex(),rawurlencode($request['dnDST'])); +printf('', + _('Server'),$ldap['DST']->getName(),_('Distinguished Name'), + htmlspecialchars($href),$request['dnDST']); - echo ''; - echo ''; - echo ''; +echo ''; -if (! $attrs_all || ! is_array($attrs_all)) { - printf('',_('This entry has no attributes')); +echo ''; +echo ''; +echo ''; + +if (! is_array($attrs_all) || ! count($attrs_all)) { + printf('',_('This entry has no attributes')); print '

%s: %s
%s: %s

%s: %s
%s: %s
%s: %s
%s: %s
'; - echo '
'; - printf('',$ldapserver->server_id); - printf('',$ldapserver_dst->server_id); - printf('',$ldapserver_src->server_id); - printf('',htmlspecialchars($dn_dst)); - printf('',htmlspecialchars($dn_src)); - printf('',_('Switch Entry')); - echo '
'; - echo '
(%s)
'; +echo '
'; +printf('',$app['server']->getIndex()); +printf('',$ldap['DST']->getIndex()); +printf('',$ldap['SRC']->getIndex()); +printf('',htmlspecialchars($request['dnDST'])); +printf('',htmlspecialchars($request['dnSRC'])); +printf('',_('Switch Entry')); +echo '
'; +echo '
(%s)
'; + return; } sort($attrs_all); -$formdisplayed = false; # Work through each of the attributes. foreach ($attrs_all as $attr) { - # If this is the DN, get the next attribute. - if (! strcasecmp($attr,'dn')) - continue; - # Has the config.php specified that this attribute is to be hidden or shown? - if ($ldapserver_src->isAttrHidden($attr) || $ldapserver_dst->isAttrHidden($attr)) + if ($ldap['SRC']->isAttrHidden($attr) || $ldap['DST']->isAttrHidden($attr)) continue; - $schema_attr_src = $ldapserver_src->getSchemaAttribute($attr,$dn_src); - $schema_attr_dst = $ldapserver_dst->getSchemaAttribute($attr,$dn_dst); + $attributeSRC = $request['templateSRC']->getAttribute($attr); + $attributeDST = $request['templateDST']->getAttribute($attr); # Get the values and see if they are the same. - if (isset($attrs_src[$attr]) && isset($attrs_dst[$attr]) && $attrs_src[$attr] === $attrs_dst[$attr]) + if ($attributeSRC && $attributeDST && ($attributeSRC->getValues() == $attributeDST->getValues())) echo ''; else - echo ''; + echo ''; foreach (array('src','dst') as $side) { - - # Setup the $attr_note, which will be displayed to the right of the attr name (if any) - $attr_note = ' '; - - # is there a user-friendly translation available for this attribute? - if ($_SESSION[APPCONFIG]->haveFriendlyName($attr)) { - $attr_display = $_SESSION[APPCONFIG]->getFriendlyName($attr); - $attr_note = sprintf('%s',_('Note'),$attr_display,_('is an alias for'),$attr,_('alias')); - - } else { - $attr_display = $attr; - $attr_note = ' '; - } - - # is this attribute required by an objectClass? - $required_by = ''; + # If we are on the source side, show the attribute name. switch ($side) { case 'src': - $ldapserver = $ldapserver_src; - if ($schema_attr_src) - foreach ($schema_attr_src->getRequiredByObjectClasses() as $required) - if (isset($attrs_src['objectClass']) && in_array(strtolower($required),arrayLower($attrs_src['objectClass']))) - $required_by .= $required . ' '; + if ($attributeSRC) { + echo ''; + $request['pageSRC']->draw('Name',$attributeSRC); + echo ''; - # It seems that some LDAP servers (Domino) returns attributes in lower case? - elseif (isset($attrs_src['objectclass']) && in_array(strtolower($required),arrayLower($attrs_src['objectclass']))) - $required_by .= $required . ' '; + if ($request['pageSRC']->getServerID() == $request['pageDST']->getServerID()) + echo ' '; + + else { + echo ''; + $request['pageSRC']->draw('Notes',$attributeSRC); + echo ''; + } + + } else { + echo ' '; + } break; case 'dst': - $ldapserver = $ldapserver_dst; - if ($schema_attr_dst) - foreach ($schema_attr_dst->getRequiredByObjectClasses() as $required) - if (isset($attrs_dst['objectClass']) && in_array(strtolower($required),arrayLower($attrs_dst['objectClass']))) - $required_by .= $required . ' '; + if ($attributeDST) { + if ($attributeSRC && ($request['pageSRC']->getServerID() == $request['pageDST']->getServerID())) + echo ' '; + + else { + echo ''; + $request['pageDST']->draw('Name',$attributeDST); + echo ''; + } + + echo ''; + $request['pageDST']->draw('Notes',$attributeDST); + echo ''; + + } else { + echo ' '; + } - # It seems that some LDAP servers (Domino) returns attributes in lower case? - elseif (isset($attrs_dst['objectclass']) && in_array(strtolower($required),arrayLower($attrs_dst['objectclass']))) - $required_by .= $required . ' '; break; } - - # If we are on the source side, show the attr - if ($side == 'src') { - echo ''; - $schema_href = sprintf('cmd.php?cmd=schema&server_id=%s&view=attributes&viewvalue=%s',$server_id_src,real_attr_name($attr)); - printf('%s',sprintf(_('Click to view the schema definition for attribute type \'%s\''),$attr),$schema_href,$attr_display); - echo ''; - - printf('%s',$attr_note); - } - - echo ''; - - # Create our form if the dst is editable. - if ($side == 'dst' && ! $ldapserver_dst->isReadOnly() && ! $formdisplayed) { - $formdisplayed = true; - echo '
'; - printf('',$ldapserver_dst->server_id); - printf('',$dn_dst); - } - - if ($required_by) - printf('%s',sprintf(_('Required attribute for objectClass(es) %s'),$required_by),_('required')); - echo ''; - - if ($ldapserver->isAttrReadOnly($attr)) - printf('(%s)',_('This attribute has been flagged as read only by the phpLDAPadmin administrator'),_('read only')); } echo ''; + echo "\n\n"; - if (isset($attrs_src[$attr]) && isset($attrs_dst[$attr]) && $attrs_src[$attr] === $attrs_dst[$attr]) - echo ''; + # Get the values and see if they are the same. + if ($attributeSRC && $attributeDST && ($attributeSRC->getValues() == $attributeDST->getValues())) + echo ''; else - echo ''; + echo ''; foreach (array('src','dst') as $side) { - $vals = null; - - # If this attribute isnt set, then show a blank. - $toJump = 0; switch ($side) { case 'src': - print ' '; + echo ''; - if (! isset($attrs_src[$attr])) { - echo "<". _('No Value').">"; - $toJump = 1; - continue; - } else - $vals = $attrs_src[$attr]; + if ($attributeSRC && count($attributeSRC->getValues())) + $request['pageSRC']->draw('CurrentValues',$attributeSRC); + else + echo ''; + + echo '
 
'; - $ldapserver = $ldapserver_src; break; case 'dst': - print ' '; + echo ''; - if (! isset($attrs_dst[$attr])) { - echo "<". _('No Value').">"; - $toJump = 1; - continue; - } else - $vals = $attrs_dst[$attr]; + if ($attributeDST && count($attributeDST->getValues())) + $request['pageDST']->draw('CurrentValues',$attributeDST); + else + echo ''; + + echo '
 
'; - $ldapserver = $ldapserver_dst; break; } - - if ($toJump) - continue; - - if (! is_array($vals)) - $vals = array($vals); - - # Is this attribute a jpegPhoto? - if ($ldapserver->isJpegPhoto($attr)) { - - switch ($side) { - case 'src': - # Don't draw the delete buttons if there is more than one jpegPhoto (phpLDAPadmin can't handle this case yet) - draw_jpeg_photos($ldapserver,$dn_src,$attr,false); - break; - - case 'dst': - if ($ldapserver_dst->isReadOnly() || $ldapserver_dst->isAttrReadOnly($attr)) - draw_jpeg_photos($ldapserver,$dn_dst,$attr,false); - else - draw_jpeg_photos($ldapserver,$dn_dst,$attr,true); - - break; - } - - # proceed to the next attribute - echo ''."\n"; - continue; - } - - # Is this attribute binary? - if ($ldapserver->isAttrBinary($attr)) { - switch ($side) { - case 'src': - $href = sprintf("download_binary_attr.php?server_id=%s&dn=%s&attr=%s",$ldapserver->server_id,$encoded_dn_src,$attr); - break; - - case 'dst': - $href = sprintf("download_binary_attr.php?server_id=%s&dn=%s&attr=%s",$ldapserver->server_id,$encoded_dn_dst,$attr); - break; - } - - echo ''; - echo _('Binary value'); - echo '
'; - - if (count($vals) > 1) - for ($i=1; $i<=count($vals); $i++) - printf(' %s(%s)
',$href,$i,_('download value'),IMGDIR,$i); - else - printf(' %s
',$href,IMGDIR,_('download value')); - - if ($side == 'dst' && ! $ldapserver_dst->isReadOnly() && ! $ldapserver->isAttrReadOnly($attr)) - printf(' %s',$attr,IMGDIR,_('delete attribute')); - - echo '
'; - echo ''; - - continue; - } - - # Note: at this point, the attribute must be text-based (not binary or jpeg) - - /* - * If this server is in read-only mode or this attribute is configured as read_only, - * simply draw the attribute values and continue. - */ - - if ($side == 'dst' && ($ldapserver->isReadOnly() || $ldapserver->isAttrReadOnly($attr))) { - if (is_array($vals)) { - foreach ($vals as $i => $val) { - if (trim($val) == '') - printf('[%s]
',_('empty')); - - elseif (strcasecmp($attr,'userPassword') == 0 && $_SESSION[APPCONFIG]->GetValue('appearance','obfuscate_password_display')) - echo preg_replace('/./','*',$val).'
'; - - else - echo htmlspecialchars($val).'
'; - } - - # @todo: redundant - $vals is always an array. - } else { - if (strcasecmp($attr,'userPassword') == 0 && $_SESSION[APPCONFIG]->GetValue('appearance','obfuscate_password_display')) - echo preg_replace('/./','*',$vals).'
'; - else - echo $vals.'
'; - } - echo ''; - continue; - } - - # Is this a userPassword attribute? - if (! strcasecmp($attr,'userpassword')) { - $user_password = $vals[0]; - $enc_type = get_enc_type($user_password); - - # Set the default hashing type if the password is blank (must be newly created) - if ($user_password == '') { - $enc_type = get_default_hash($server_id); - } - - if ($side == 'dst') { - printf('',htmlspecialchars($user_password)); - echo ''; - printf('',$enc_type == '' ? 'clear' : $enc_type); - } - - if (obfuscate_password_display($enc_type)) - echo htmlspecialchars(preg_replace('/./','*',$user_password)); - else - echo htmlspecialchars($user_password); - - echo '
'; - - if ($side == 'dst') { - printf('',htmlspecialchars($user_password)); - echo enc_type_select_list($enc_type,'enc','userpassword',0); - } - - echo '
'; - ?> - - %s',_('Check password')); - - echo ''; - continue; - } - - # Is this a boolean attribute? - if ($ldapserver->isAttrBoolean($attr)) { - $val = $vals[0]; - - if ($side = 'dst') { - printf('',htmlspecialchars($attr),htmlspecialchars($val)); - - printf(''; - } - - echo ''; - continue; - } - - # End of special case attributes (non plain text). - foreach ($vals as $i => $val) { - - if ($side == 'dst') { - $input_name = sprintf('new_values[%s][%s]',htmlspecialchars($attr),$i); - - /* We smack an id="..." tag in here that doesn't have [][] in it to allow the - * draw_chooser_link() to identify it after the user clicks.*/ - $input_id = sprintf('"new_values_%s_%s',htmlspecialchars($attr),$i); - - echo ''; - printf('',htmlspecialchars($attr),$i,htmlspecialchars($val)); - } - - # Is this value is a structural objectClass, make it read-only - if (0 == strcasecmp($attr,'objectClass')) { - - printf('', - _('View the schema description for this objectClass'),$ldapserver->server_id,htmlspecialchars($val),IMGDIR); - - $schema_object = $ldapserver->getSchemaObjectClass($val); - - if ($schema_object->getType() == 'structural') { - printf('%s (%s)
', - $val,_('This is a structural ObjectClass and cannot be removed.'),_('structural')); - - if ($side == 'dst') - printf('',$input_name,$input_id,htmlspecialchars($val)); - - continue; - } - } - - if (is_dn_string($val) || $ldapserver->isDNAttr($attr)) - printf('', - sprintf(_('Go to %s'),htmlspecialchars($val)),$ldapserver->server_id,rawurlencode($val),IMGDIR); - - elseif (is_mail_string($val)) - printf('',htmlspecialchars($val),IMGDIR); - - elseif (is_url_string($val)) - printf('',htmlspecialchars($val),IMGDIR); - - if ($ldapserver->isMultiLineAttr($attr,$val)) { - if ($side == 'dst') - printf('',$input_name,$input_id,htmlspecialchars($val)); - else - echo htmlspecialchars($val); - - } else { - if ($side == 'dst') - printf('',$input_name,$input_id,htmlspecialchars($val)); - else - echo htmlspecialchars($val); - } - - # draw a link for popping up the entry browser if this is the type of attribute that houses DNs. - if ($ldapserver->isDNAttr($attr)) - draw_chooser_link("edit_form.$input_id",false); - - echo '
'; - } - - echo ''; - } /* end foreach value */ + } echo ''; - - # Draw the "add value" link under the list of values for this attributes - if (! $ldapserver_dst->isReadOnly()) { - - # First check if the required objectClass is in this DN - $isOK = 0; - $src_oclass = array(); - $attr_object = $ldapserver_dst->getSchemaAttribute($attr,$dn_dst); - foreach ($attr_object->used_in_object_classes as $oclass) { - if (in_array(strtolower($oclass),arrayLower($attrs_dst['objectClass']))) { - $isOK = 1; - break; - - } else { - # Find oclass that the source has that provides this attribute. - if (in_array($oclass,$attrs_src['objectClass'])) - $src_oclass[] = $oclass; - } - } - - echo '  '; - if (! $isOK) { - - if (count($src_oclass) == 1) - $add_href = sprintf('cmd.php?cmd=add_oclass_form&server_id=%s&dn=%s&new_oclass=%s', - $ldapserver_dst->server_id,$encoded_dn_dst,$src_oclass[0]); - else - $add_href = sprintf('cmd.php?cmd=add_value_form&server_id=%s&dn=%s&attr=objectClass', - $ldapserver_dst->server_id,$encoded_dn_dst); - - if ($attr == 'objectClass') - printf('
(%s)
',$add_href,_('Add ObjectClass and Attributes'),_('add value')); - else - printf('
(%s)
', - $add_href,sprintf(_('You need one of the following ObjectClass(es) to add this attribute %s.'),implode(" ",$src_oclass)), - _('Add new ObjectClass')); - - } else { - if (! $schema_attr_dst->getIsSingleValue() || (! isset($vals))) { - - $add_href = sprintf('cmd.php?cmd=add_value_form&erver_id=%s&dn=%s&attr=%s', - $ldapserver_dst->server_id,$encoded_dn_dst,rawurlencode($attr)); - - printf('
(%s)
', - $add_href,sprintf(_('Add an additional value to attribute \'%s\''),$attr),_('add value')); - } - } - } - - echo ''; - - # Get the values and see if they are the same. - if (isset($attrs_src[$attr]) && isset($attrs_dst[$attr]) && $attrs_src[$attr] === $attrs_dst[$attr]) - echo ''; - else - echo ' '; - -} /* End foreach ($attrs as $attr => $vals) */ - -if (! $ldapserver_dst->isReadOnly()) - printf(' 
',_('Save Changes')); - -echo ''; - -# If this entry has a binary attribute,we need to provide a form for it to submit when deleting it. */ -?> - - - - -
- - - -
+echo ''; +?> diff --git a/htdocs/compare_form.php b/htdocs/compare_form.php index 89bce98..575e93c 100644 --- a/htdocs/compare_form.php +++ b/htdocs/compare_form.php @@ -1,56 +1,50 @@ server_id,true,'server_id_dst'); +# The DN we are working with +$request = array(); +$request['dn'] = get_request('dn','GET'); -printf('

%s %s

',_('Compare another DN with'),htmlspecialchars($rdn)); -printf('

%s: %s',_('Server'),$ldapserver->name); -if ($dn) - printf('   %s: %s',_('Distinguished Name'),htmlspecialchars($dn)); -echo '

'; -echo "\n"; +# Check if the entry exists. +if (! $request['dn'] || ! $app['server']->dnExists($request['dn'])) + error(sprintf(_('The entry (%s) does not exist.'),$request['dn']),'error','index.php'); + +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setDN($request['dn']); +$request['page']->accept(); + +# Render the form +$request['page']->drawTitle(sprintf('%s %s',_('Compare another DN with'),get_rdn($request['dn']))); +$request['page']->drawSubTitle(); echo '
'; -printf('%s %s %s
',_('Compare'),htmlspecialchars($rdn),_('with ')); +printf('%s %s %s
',_('Compare'),get_rdn($request['dn']),_('with ')); -echo '
'; -printf('',$ldapserver->server_id); -printf('',$ldapserver->server_id); +echo ''; +echo ''; +printf('',$app['server']->getIndex()); +printf('',$app['server']->getIndex()); +printf('',htmlspecialchars($request['dn'])); echo "\n"; echo ''; -echo "\n"; -echo ''; -echo "\n"; echo ''; -printf('',_('Compare this DN with another'),_('Destination DN')); +printf('', + _('Compare this DN with another'),_('Destination DN')); echo ''; echo ''; echo "\n"; -printf('',_('Destination Server'),$select_server_html); +printf('',_('Destination Server'),server_select_list($app['server']->getIndex(),true,'server_id_dst')); echo "\n"; printf('',_('Compare')); diff --git a/htdocs/copy.php b/htdocs/copy.php index 3dab63b..8dc4264 100644 --- a/htdocs/copy.php +++ b/htdocs/copy.php @@ -1,89 +1,82 @@ isCommandAvailable('entry_move')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('copy entry')),'error','index.php'); +# The DNs we are working with +$request = array(); +$request['dnSRC'] = get_request('dn_src'); +$request['dnDST'] = get_request('dn_dst'); -$entry = array(); -$entry['src']['id'] = get_request('server_id'); -$entry['dst']['id'] = get_request('dest_server_id'); - -$entry['src']['ldapserver'] = $_SESSION[APPCONFIG]->ldapservers->Instance($entry['src']['id']); -$entry['dst']['ldapserver'] = $_SESSION[APPCONFIG]->ldapservers->Instance($entry['dst']['id']); - -if ($entry['dst']['ldapserver']->isReadOnly()) - error(_('Destination server is currently READ-ONLY.'),'error','index.php'); - -if (! $entry['src']['ldapserver']->haveAuthInfo() || ! $entry['dst']['ldapserver']->haveAuthInfo()) - error(_('Not enough information to login to server. Please check your configuration.'),'error','index.php'); - -$entry['src']['dn'] = get_request('old_dn'); -$entry['dst']['dn'] = get_request('new_dn'); -$entry['src']['recursive'] = (get_request('recursive') == 'on') ? true : false; -$entry['src']['remove'] = (get_request('remove') == 'yes') ? true : false; +$ldap = array(); +$ldap['SRC'] = $_SESSION[APPCONFIG]->getServer(get_request('server_id_src')); +$ldap['DST'] = $_SESSION[APPCONFIG]->getServer(get_request('server_id_dst')); # Error checking -if (strlen(trim($entry['dst']['dn'])) == 0) +if (! $_SESSION[APPCONFIG]->isCommandAvailable('entry_move')) + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('copy entry')),'error','index.php'); + +if (! trim($request['dnDST'])) error(_('You left the destination DN blank.'),'error','index.php'); -if (pla_compare_dns($entry['src']['dn'],$entry['dst']['dn']) == 0 && $entry['src']['id'] == $entry['dst']['id']) +if ($ldap['DST']->isReadOnly()) + error(_('Destination server is currently READ-ONLY.'),'error','index.php'); + +if ($ldap['DST']->dnExists($request['dnDST'])) + error(sprintf(_('The destination entry (%s) already exists.'),pretty_print_dn($request['dnDST'])),'error','index.php'); + +if (! $ldap['DST']->dnExists($ldap['DST']->getContainer($request['dnDST']))) + error(sprintf(_('The destination container (%s) does not exist.'), + pretty_print_dn($ldap['DST']->getContainer($request['dnDST']))),'error','index.php'); + +if (pla_compare_dns($request['dnSRC'],$request['dnDST']) == 0 && $ldap['SRC']->getIndex() == $ldap['DST']->getIndex()) error(_('The source and destination DN are the same.'),'error','index.php'); -if ($entry['dst']['ldapserver']->dnExists($entry['dst']['dn'])) - error(sprintf(_('The destination entry (%s) already exists.'),pretty_print_dn($entry['dst']['dn'])),'error','index.php'); +$request['recursive'] = (get_request('recursive') == 'on') ? true : false; +$request['remove'] = (get_request('remove') == 'yes') ? true : false; -if (! $entry['dst']['ldapserver']->dnExists(get_container($entry['dst']['dn']))) - error(sprintf(_('The destination container (%s) does not exist.'),pretty_print_dn(get_container($entry['dst']['dn']))),'error','index.php'); - -if ($entry['src']['recursive']) { +if ($request['recursive']) { $filter = get_request('filter','POST',false,'(objectClass=*)'); # Build a tree similar to that of the tree browser to give to r_copy_dn - $snapshot_tree = array(); - printf('

%s%s

',_('Copying '),htmlspecialchars($entry['src']['dn'])); + $ldap['tree'] = array(); + printf('

%s%s

',_('Copying '),$request['dnSRC']); printf('

%s

',_('Recursive copy progress')); print '

'; - print ''; - print _('Building snapshot of tree to copy... '); - $snapshot_tree = build_tree($entry['src']['ldapserver'],$entry['src']['dn'],array(),$filter); + print ''; + printf ('%s...',_('Building snapshot of tree to copy')); + + $ldap['tree'] = build_tree($ldap['SRC'],$request['dnSRC'],array(),$filter); printf('%s
',_('Success')); # Prevent script from bailing early on a long delete @set_time_limit(0); - $copy_result = r_copy_dn($entry['src']['ldapserver'],$entry['dst']['ldapserver'],$snapshot_tree,$entry['src']['dn'],$entry['dst']['dn']); - # @todo: This is not showing the complete results - only the children of the dst - need to look at. + $copy_result = r_copy_dn($ldap['SRC'],$ldap['DST'],$ldap['tree'],$request['dnSRC'],$request['dnDST'],$request['remove']); $copy_message = $copy_result; print '
'; } else { - $copy_result = copy_dn($entry['src']['ldapserver'],$entry['dst']['ldapserver'],$entry['src']['dn'],$entry['dst']['dn']); - $copy_message = sprintf('%s DN%s %s %s',_('Copy successful!'),_(':'),htmlspecialchars($entry['dst']['dn']),_('has been created.')); + $copy_result = copy_dn($ldap['SRC'],$ldap['DST'],$request['dnSRC'],$request['dnDST'],$request['remove']); + $copy_message = sprintf('%s %s: %s %s', + $request['remove'] ? _('Move successful') : _('Copy successful'), + _('DN'),$request['dnDST'],_('has been created.')); } if ($copy_result) { - $redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$entry['dst']['id'],rawurlencode($entry['dst']['dn'])); - $new_rdn = get_rdn($entry['dst']['dn']); - $container = get_container($entry['dst']['dn']); - - if ($entry['src']['remove']) - $redirect_url = sprintf('cmd.php?cmd=delete_form&server_id=%s&dn=%s',$entry['src']['id'],rawurlencode($entry['src']['dn'])); + $redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s&refresh=SID_%s_nodes&noheader=1', + $ldap['DST']->getIndex(),rawurlencode($request['dnDST']),$ldap['DST']->getIndex()); system_message(array( 'title'=>_('Copy Entry'), @@ -92,91 +85,102 @@ if ($copy_result) { $redirect_url); } -function r_copy_dn($ldapserver_src,$ldapserver_dst,$snapshottree,$root_dn,$dn_dst) { +function r_copy_dn($serverSRC,$serverDST,$snapshottree,$dnSRC,$dnDST,$remove) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $ldapserver_src->server_id,$ldapserver_dst->server_id,$snapshottree,$root_dn,$dn_dst); + $serverSRC->getIndex(),$serverDST->getIndex(),$snapshottree,$dnSRC,$dnDST); $copy_message = array(); - $copy_result = copy_dn($ldapserver_src,$ldapserver_dst,$root_dn,$dn_dst); + $children = isset($snapshottree[$dnSRC]) ? $snapshottree[$dnSRC] : null; - if (! $copy_result) - return false; + # If we have children, then we need to copy, then delete for a move + if (is_array($children) && count($children)) { - $copy_message[] = sprintf('%s DN: %s %s',_('Copy successful!'),htmlspecialchars($dn_dst),_('has been created.')); + $copy_result = copy_dn($serverSRC,$serverDST,$dnSRC,$dnDST,false); - $children = isset($snapshottree[$root_dn]) ? $snapshottree[$root_dn] : null; - if (is_array($children) && count($children) > 0) { - foreach($children as $child_dn) { - $child_rdn = get_rdn($child_dn); - $new_dest_dn = sprintf('%s,%s',$child_rdn,$dn_dst); - $copy_result = r_copy_dn($ldapserver_src,$ldapserver_dst,$snapshottree,$child_dn,$new_dest_dn); - $copy_message[] = array_shift($copy_result); + if (! $copy_result) + return false; + + array_push($copy_message,sprintf('%s %s: %s %s',_('Copy successful'),_('DN'),$dnDST,_('has been created.'))); + + $hadError = false; + foreach ($children as $child_dn) { + $dnDST_new = sprintf('%s,%s',get_rdn($child_dn),$dnDST); + $copy_result = r_copy_dn($serverSRC,$serverDST,$snapshottree,$child_dn,$dnDST_new,$remove); + $copy_message = array_merge($copy_message,array_values($copy_result)); + + if (! $copy_result) + $hadError = true; } + + if (! $hadError && $remove) { + $delete_result = $serverSRC->delete($dnSRC); + + if ($delete_result) + array_push($copy_message,sprintf('%s %s: %s %s',_('Delete successful'),_('DN'),$dnDST,_('has been deleted.'))); + } + + } else { + $copy_result = copy_dn($serverSRC,$serverDST,$dnSRC,$dnDST,$remove); + + array_push($copy_message,sprintf('%s %s: %s %s', + $remove ? _('Move successful') : _('Copy successful'), + _('DN'),$dnDST,_('has been created.'))); } return $copy_message; } -function copy_dn($ldapserver_src,$ldapserver_dst,$dn_src,$dn_dst) { +function copy_dn($serverSRC,$serverDST,$dnSRC,$dnDST,$remove) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__, - $ldapserver_src->server_id,$ldapserver_dst->server_id,$dn_src,$dn_dst); + $serverSRC->getIndex(),$serverDST->getIndex(),$dnSRC,$dnDST); - $new_entry = $ldapserver_src->getDNAttrs($dn_src); + $request = array(); + $request['pageSRC'] = new PageRender($serverSRC->getIndex(),get_request('template','REQUEST',false,'none')); + $request['pageSRC']->setDN($dnSRC); + $request['pageSRC']->accept(); - # modify the prefix-value (ie "bob" in cn=bob) to match the destination DN's value. - $rdn_attr = substr($dn_dst,0,strpos($dn_dst,'=')); - $rdn_value = get_rdn($dn_dst); - $rdn_value = substr($rdn_value,strpos($rdn_value,'=') + 1); - $new_entry[$rdn_attr] = $rdn_value; + $request['pageDST'] = new PageRender($serverDST->getIndex(),get_request('template','REQUEST',false,'none')); + $request['pageDST']->setContainer($serverDST->getContainer($dnDST)); + $request['pageDST']->accept(); - # don't need a dn attribute in the new entry - unset($new_entry['dn']); + $request['templateSRC'] = $request['pageSRC']->getTemplate(); + $request['templateDST'] = $request['pageDST']->getTemplate(); + $request['templateDST']->copy($request['pageSRC']->getTemplate(),get_rdn($dnDST,0)); - # Check the user-defined custom call back first - if (run_hook('pre_entry_create', - array ('server_id'=>$ldapserver_dst->server_id,'dn'=>$dn_dst,'attrs'=>$new_entry))) { - - $add_result = $ldapserver_dst->add($dn_dst,$new_entry); - if (! $add_result) { - echo '


'; - system_message(array( - 'title'=>_('Failed to copy DN.').sprintf(' (%s)',$dn_dst), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); - - } else { - run_hook('post_entry_create', - array('server_id'=>$ldapserver_dst->server_id,'dn'=>$dn_dst,'attrs'=>$new_entry)); - } + # Create of move the entry + if ($remove) + $add_result = $serverDST->rename($request['templateSRC']->getDN(),$request['templateDST']->getRDN(),$serverDST->getContainer($dnDST),true); + else + $add_result = $serverDST->add($request['templateDST']->getDN(),$request['templateDST']->getLDAPadd()); + if ($add_result) { return $add_result; } else { + system_message(array( + 'title'=>sprintf('%s (%s)',_('Failed to copy DN'),$request['templateDST']->getDN()), + 'body'=>ldap_error_msg($serverDST->getErrorMessage(null),$serverDST->getErrorNum(null)), + 'type'=>'error')); + return false; } } -/** - * @param object $ldapserver - * @param dn $dn - * @param array $tree - * @param string $filter - */ -function build_tree($ldapserver,$dn,$buildtree) { +function build_tree($server,$dn,$buildtree) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $ldapserver->server_id,$dn,$buildtree); + $server->getIndex(),$dn,$buildtree); - # we search all children, not only the visible children in the tree - $children = $ldapserver->getContainerContents($dn,0); + # We search all children, not only the visible children in the tree + $children = $server->getContainerContents($dn,null,0); - if (is_array($children) && count($children) > 0) { + if (count($children)) { $buildtree[$dn] = $children; foreach ($children as $child_dn) - $buildtree = build_tree($ldapserver,$child_dn,$buildtree); + $buildtree = build_tree($server,$child_dn,$buildtree); } if (DEBUG_ENABLED) diff --git a/htdocs/copy_form.php b/htdocs/copy_form.php index b397e18..a218e8b 100644 --- a/htdocs/copy_form.php +++ b/htdocs/copy_form.php @@ -1,32 +1,104 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +# The DN we are working with +$request = array(); +$request['dn'] = get_request('dn','GET'); -$entry = array(); -$entry['dn'] = get_request('dn','GET'); -$entry['rdn'] = get_rdn($entry['dn']); +# Check if the entry exists. +if (! $request['dn'] || ! $app['server']->dnExists($request['dn'])) + error(sprintf(_('The entry (%s) does not exist.'),$request['dn']),'error','index.php'); + +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setDN($request['dn']); +$request['page']->accept(); + +# Render the form +$request['page']->drawTitle(sprintf('%s %s',_('Copy'),get_rdn($request['dn']))); +$request['page']->drawSubTitle(); + +echo '
'; +printf('%s %s %s:

',_('Copy'),get_rdn($request['dn']),_('to a new object')); + +echo ''; +echo ''; +printf('',$app['server']->getIndex()); +printf('',$app['server']->getIndex()); +printf('',htmlspecialchars($request['dn'])); +echo "\n"; + +echo '
'; - -if (! $dn) { - printf('%s:',_('Compare this DN with another'),_('Source DN')); - echo ''; - printf('',htmlspecialchars($dn)); - draw_chooser_link('compare_form.dn_src','true',$rdn); - -} else - printf('',htmlspecialchars($dn)); - -echo '
%s:%s:'; echo ''; draw_chooser_link('compare_form.dn_dst','true',''); @@ -58,7 +52,7 @@ echo '
%s:%s
%s:%s
'; + +echo ''; +printf('', + _('The full DN of the new entry to be created when copying the source entry'),_('Destination DN')); +echo ''; +echo ''; +echo "\n"; + +printf('',_('Destination Server'),server_select_list($app['server']->getIndex(),true,'server_id_dst')); +echo "\n"; # We search all children, not only the visible children in the tree -$entry['children'] = $ldapserver->getContainerContents($entry['dn']); +$request['children'] = $app['server']->getContainerContents($request['dn']); -# Draw some javaScrpt to enable/disable the filter field if this may be a recursive copy -if (is_array($entry['children']) && count($entry['children']) > 0) { ?> +if (count($request['children']) > 0) { + echo ''; + printf('',_('Recursive copy')); + echo '',_('Recursively copy all children of this object as well.')); + echo ''; + echo "\n"; + echo ''; + printf('', + _('When performing a recursive copy, only copy those entries which match this filter'),_('Filter')); + echo ''; + echo "\n"; + + echo ''; + printf('',_('Delete after copy (move):')); + echo ''; + echo "\n"; + +} else { + printf('',_('Delete after copy (move):')); +} +echo "\n"; + +printf('',_('Copy ')); +echo "\n"; + +echo '
%s:'; +printf('',htmlspecialchars($request['dn'])); +draw_chooser_link('copy_form.dn_dst','true',get_rdn($request['dn'])); +echo '
%s:%s
:'; + printf('(%s)
%s:'; + echo '
%s'; + printf('(%s)',_('Make sure your filter (above) will select all child records.')); + echo '
%s
'; +echo '
'; + +if ($_SESSION[APPCONFIG]->getValue('appearance','show_hints')) + printf('Light%s', + IMGDIR,_('Hint: Copying between different servers only works if there are no schema violations')); + +echo '
'; + +# Draw the javascrpt to enable/disable the filter field if this may be a recursive copy +if (count($request['children']) > 0) { +?> - -%s %s',_('Copy'),htmlspecialchars($entry['rdn'])); -printf('

%s: %s     %s: %s

',_('Server'),$ldapserver->name, - _('Distinguished Name'),htmlspecialchars($entry['dn'])); -echo "\n"; - -echo '
'; -printf('%s %s %s:

',_('Copy'),htmlspecialchars($entry['rdn']),_('to a new object')); - -echo '
'; -echo ''; -printf('',htmlspecialchars($entry['dn'])); -printf('',$ldapserver->server_id); -echo "\n"; - -echo ''; -echo "\n"; - -echo ''; -printf('', - _('The full DN of the new entry to be created when copying the source entry'),_('Destination DN')); -printf(''; -echo "\n"; - -printf('',_('Destination Server'),server_select_list($ldapserver->server_id,true,'dest_server_id')); -echo "\n"; - -if (is_array($entry['children']) && count($entry['children']) > 0) { - echo ''; - printf('',_('Recursive copy')); - echo '',_('Recursively copy all children of this object as well.')); - echo ''."\n"; - - echo ''; - printf('',_('When performing a recursive copy, only copy those entries which match this filter'),_('Filter')); - echo ''."\n"; - - echo ''; - printf('',_('Delete after copy (move):')); - echo ''; - -} else { - printf('',_('Delete after copy (move):')); +',_('Copy ')); -echo "\n"; -echo '
%s:',htmlspecialchars($entry['dn'])); -draw_chooser_link('copy_form.new_dn','true',htmlspecialchars($entry['rdn'])); -echo '
%s%s
:'; - printf('(%s)
%s:'; - echo '
%s'; - printf('(%s)',_('Make sure your filter (above) will select all child records.')); - echo '
%s
'; -echo "\n"; - -if ($_SESSION[APPCONFIG]->GetValue('appearance','show_hints')) - printf('Light%s',IMGDIR,_('Hint: Copying between different servers only works if there are no schema violations')); - -echo '
'; ?> diff --git a/htdocs/create.php b/htdocs/create.php index 07ca5c2..7d65d7f 100644 --- a/htdocs/create.php +++ b/htdocs/create.php @@ -1,138 +1,111 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +# If cancel was selected, we'll redirect +if (get_request('cancel','REQUEST')) { + header('Location: index.php'); + die(); +} if (! $_SESSION[APPCONFIG]->isCommandAvailable('entry_create')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('create entry')),'error','index.php'); + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('create entry')),'error','index.php'); -$rdn_attr = get_request('rdn_attribute'); +$request = array(); +$request['redirect'] = get_request('redirect','POST',false,false); -$entryfactoryclass = $_SESSION[APPCONFIG]->GetValue('appearance','entry_factory'); -eval('$entry_factory = new '.$entryfactoryclass.'();'); -$entry = $entry_factory->newCreatingEntry(''); +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setContainer(get_request('container','REQUEST',true)); +$request['page']->accept(); +$request['template'] = $request['page']->getTemplate(); -eval('$reader = new '.$_SESSION[APPCONFIG]->GetValue('appearance', 'entry_reader').'($ldapserver);'); -$entry->accept($reader); +if (! $request['template']->getContainer() || ! $app['server']->dnExists($request['template']->getContainer())) + error(sprintf(_('The container you specified (%s) does not exist. Please try again.'),$request['template']->getContainer()),'error','index.php'); -$container = $entry->getContainer(); +# Check if the container is a leaf - we shouldnt really return a hit here, the template engine shouldnt have allowed a user to attempt to create an entry... +$tree = get_cached_item($app['server']->getIndex(),'tree'); +$request['container'] = $tree->getEntry($request['template']->getContainer()); +if (! $request['container']) + $tree->addEntry($request['template']->getContainer()); -if (!$container || !$ldapserver->dnExists($container)) - error(sprintf(_('The container you specified (%s) does not exist. Please try again.'),htmlspecialchars($container)),'error','index.php'); +$request['container'] = $tree->getEntry($request['template']->getContainer()); -$tree = get_cached_item($ldapserver->server_id,'tree'); -if ($tree) { - $container_entry = $tree->getEntry($container); - if (!$container_entry) - $tree->addEntry($container); +if ($request['container']->isLeaf()) + error(sprintf(_('The container (%s) is a leaf.'),$request['template']->getContainer()),'error','index.php'); - $container_entry = $tree->getEntry($container); - if ($container_entry->isLeaf()) - error(sprintf(_('The container (%s) is a leaf.'), htmlspecialchars($container)),'error','index.php'); +# Check our RDN +if (! count($request['template']->getRDNAttrs())) + error(_('The were no attributes marked as an RDN attribute.'),'error','index.php'); +if (! $request['template']->getRDN()) + error(_('The RDN field is empty?'),'error','index.php'); + +# Some other attribute checking... +foreach ($request['template']->getAttributes() as $attribute) { + # Check that our Required Attributes have a value - we shouldnt really return a hit here, the template engine shouldnt have allowed this to slip through. + # @todo this isIgnoredAttr() function is missing? + if ($attribute->isRequired() && ! count($attribute->getValues()) && ! $app['server']->isIgnoredAttr($attr->getName())) + error(sprintf(_('You left the value blank for required attribute (%s).'), + $attribute->getName(false)),'error','index.php'); } -$entry->setRdnAttributeName($rdn_attr); -if (!$entry->getRdnAttribute()) - error(sprintf(_('The Rdn attribute (%s) does not exist.'), htmlspecialchars($rdn_attr)),'error','index.php'); - -$new_dn = $entry->getDn(); -if (! $new_dn) - error(_('You left the RDN field blank.'),'error','index.php'); - -$redirect = get_request('redirect','POST',false,false); - -$new_entry = array(); -$attrs = $entry->getAttributes(); -foreach ($attrs as $attr) { - $vals = $attr->getValues(); - $new_vals = array(); - foreach ($vals as $val) { - if (strlen($val) > 0) - $new_vals[] = $val; - } - - if ($attr->isRequired() && !$new_vals && !$ldapserver->isIgnoredAttr($attr->getName())) - error(sprintf(_('You left the value blank for required attribute (%s).'),htmlspecialchars($attr->getName())),'error','index.php'); - - - if ($new_vals) - $new_entry[$attr->getName()] = $new_vals; -} - -if (! in_array('top', $new_entry['objectClass'])) - $new_entry['objectClass'][] = 'top'; - -foreach ($new_entry as $attr => $vals) { - # Check to see if this is a unique Attribute - if ($badattr = $ldapserver->checkUniqueAttr($new_dn,$attr,$vals)) { - $search_href = sprintf('?cmd=search&search=true&form=advanced&server_id=%s&filter=%s=%s', $ldapserver->server_id,$attr,$badattr); - error(sprintf(_('Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'),$attr,$badattr,$new_dn,$search_href),'error','index.php'); - } -} - -# Check the user-defined custom call back first -if (run_hook('pre_entry_create',array('server_id'=>$ldapserver->server_id,'dn'=>$new_dn,'attrs'=>$new_entry))) - $add_result = $ldapserver->add($new_dn,$new_entry); +# Create the entry +$add_result = $app['server']->add($request['template']->getDN(),$request['template']->getLDAPadd()); if ($add_result) { - run_hook('post_entry_create',array('server_id'=>$ldapserver->server_id,'dn'=>$new_dn,'attrs'=>$new_entry)); + $action_number = $_SESSION[APPCONFIG]->getValue('appearance','action_after_creation'); + $href = sprintf('cmd=template_engine&server_id=%s',$app['server']->getIndex()); - $action_number = $_SESSION[APPCONFIG]->GetValue('appearance', 'action_after_creation'); + if ($request['redirect']) + $redirect_url = $request['redirect']; - $container = get_container($new_dn,false); - //$container_container = get_container($container); + else if ($action_number == 2) + $redirect_url = sprintf('cmd.php?%s&template=%s&container=%s', + $href,$request['template']->getID(),rawurlencode($request['template']->getContainer())); - if ($redirect) { - $redirect_url = $redirect; - } else if ($action_number == 2) { - $redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&container=%s', $ldapserver->server_id, rawurlencode($container)); - } else { - $redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', $ldapserver->server_id, rawurlencode($new_dn)); - } + else + $redirect_url = sprintf('cmd.php?%s&template=%s&dn=%s', + $href,$request['template']->getID(),rawurlencode($request['template']->getDN())); if ($action_number == 1 || $action_number == 2) printf('',$redirect_url); if ($action_number == 1 || $action_number == 2) { - $create_message = sprintf('%s DN%s %s %s',_('Creation successful!'),_(':'),htmlspecialchars($new_dn),_('has been created.')); + $create_message = sprintf('%s %s: %s %s', + _('Creation successful!'),_('DN'),$request['template']->getDN(),_('has been created.')); + + if (isAjaxEnabled()) + $redirect_url .= sprintf('&refresh=SID_%s_nodes&noheader=1',$app['server']->getIndex()); system_message(array( 'title'=>_('Create Entry'), 'body'=>$create_message, 'type'=>'info'), $redirect_url); + } else { - printf('

%s

',_('Entry created')); + $request['page']->drawTitle(_('Entry created')); + $request['page']->drawSubTitle(sprintf('%s: %s   %s: %s', + _('Server'),$app['server']->getName(),_('Distinguished Name'),$request['template']->getDN())); + echo '
'; echo '
'; - printf('%s.',$ldapserver->server_id,rawurlencode($new_dn),_('Display the new created entry')); + printf('%s.', + htmlspecialchars($href),rawurlencode($request['template']->getDN()),_('Display the new created entry')); echo '
'; - printf('%s.',$ldapserver->server_id,rawurlencode($container),_('Create another entry')); + printf('%s.', + htmlspecialchars($href),rawurlencode($request['template']->getContainer()),_('Create another entry')); echo '
'; } - -} else { - system_message(array( - 'title'=>_('Could not add the object to the LDAP server.'), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); } ?> diff --git a/htdocs/create_confirm.php b/htdocs/create_confirm.php new file mode 100644 index 0000000..1276126 --- /dev/null +++ b/htdocs/create_confirm.php @@ -0,0 +1,134 @@ +isCommandAvailable('entry_create')) + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('create entry')),'error','index.php'); + +$request = array(); +$request['redirect'] = get_request('redirect','POST',false,false); + +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setContainer(get_request('container','REQUEST',true)); +$request['page']->accept(); +$request['template'] = $request['page']->getTemplate(); + +if (! $request['template']->getContainer() || ! $app['server']->dnExists($request['template']->getContainer())) + error(sprintf(_('The container you specified (%s) does not exist. Please try again.'),$request['template']->getContainer()),'error','index.php'); + +# Check if the container is a leaf - we shouldnt really return a hit here, the template engine shouldnt have allowed a user to attempt to create an entry... +$tree = get_cached_item($app['server']->getIndex(),'tree'); +$request['container'] = $tree->getEntry($request['template']->getContainer()); +if (! $request['container']) + $tree->addEntry($request['template']->getContainer()); + +$request['container'] = $tree->getEntry($request['template']->getContainer()); + +if ($request['container']->isLeaf()) + error(sprintf(_('The container (%s) is a leaf.'),$request['template']->getContainer()),'error','index.php'); + +# Check our RDN +if (! count($request['template']->getRDNAttrs())) + error(_('The were no attributes marked as an RDN attribute.'),'error','index.php'); +if (! $request['template']->getRDN()) + error(_('The RDN field is empty?'),'error','index.php'); + +# Some other attribute checking... +foreach ($request['template']->getAttributes() as $attribute) { + # Check that our Required Attributes have a value - we shouldnt really return a hit here, the template engine shouldnt have allowed this to slip through. + # @todo this isIgnoredAttr() function is missing? + if ($attribute->isRequired() && ! count($attribute->getValues()) && ! $app['server']->isIgnoredAttr($attr->getName())) + error(sprintf(_('You left the value blank for required attribute (%s).'), + $attribute->getName(false)),'error','index.php'); +} + +# Check for unique attributes +$app['server']->checkUniqueAttrs($request['template']->getDN(),$request['template']->getLDAPadd()); + +$request['page']->drawTitle(_('Create LDAP Entry')); +$request['page']->drawSubTitle(sprintf('%s: %s   %s: %s', + _('Server'),$app['server']->getName(),_('Container'),$request['template']->getContainer())); + +# Confirm the creation +if (count($request['template']->getLDAPadd(true))) { + echo '
'; + echo _('Do you want to create this entry?'); + echo '

'; + + echo "\n\n"; + echo '
'; + echo ''; + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['template']->getContainer())); + printf('',$request['template']->getID()); + foreach ($request['template']->getRDNAttrs() as $rdn) + printf('',htmlspecialchars($rdn)); + echo "\n"; + + $request['page']->drawHiddenAttributes(); + + echo ''; + echo "\n"; + + printf('', + _('Attribute'),_('New Value'),_('Skip')); + echo "\n\n"; + + $counter = 0; + printf('',$counter%2 ? 'even' : 'odd',$request['template']->getDN()); + + foreach ($request['template']->getLDAPadd(true) as $attribute) { + $counter++; + + printf('',$counter%2 ? 'even' : 'odd'); + printf('',$attribute->getFriendlyName()); + + # Show NEW Values + echo ''; + + # Show SKIP Option + $input_disabled = ''; + $input_onclick = ''; + + if ($attribute->isRequired()) + $input_disabled = 'disabled="disabled"'; + + printf('', + htmlspecialchars($attribute->getName()),htmlspecialchars($attribute->getName()),$input_disabled,$input_onclick); + echo ''; + echo "\n\n"; + } + + echo '
%s%s%s
%s
%s'; + $request['page']->draw('CurrentValues',$attribute); + echo '
'; + + echo '
'; + printf('',_('Commit')); + printf('',_('Cancel')); + echo '
'; + echo '
'; + + echo '
'; + +} else { + echo '
'; + echo _('You made no changes'); + $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', + $app['server']->getIndex(),rawurlencode($request['dn'])); + + printf(' %s.',htmlspecialchars($href),_('Go back')); + echo '
'; +} +?> diff --git a/htdocs/css/style.css b/htdocs/css/style.css index 61eae81..5346313 100644 --- a/htdocs/css/style.css +++ b/htdocs/css/style.css @@ -1,11 +1,11 @@ -/* $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/css/style.css,v 1.48.2.9 2009/03/20 07:33:04 wurley Exp $ */ +/* $Header$ */ /* Global Page */ table.page { font-weight: normal; color: #000000; - font-family: bitstream vera sans,luxi sans,verdana,geneva,arial,helvetica,sans-serif; + font-family: "bitstream vera sans","luxi sans",verdana,geneva,arial,helvetica,sans-serif; background-color: #FFFFFF; font-size: 13px; empty-cells: hide; @@ -32,7 +32,7 @@ table.page tr.head { color: #FFFFFF; background-color: #001188; font-weight: bold; - font-size: 12px; + font-size: 11px; height: 25px; } @@ -44,6 +44,15 @@ table.page tr.head img.logo { height: 60px; } +table.page tr.pagehead { +} + +table.page tr.pagehead td.imagetop { + width: 100%; + vertical-align: bottom; + text-align: right; +} + /* Global Page - Control Line */ table.page tr.control td { border-top: 1px solid #AAAACC; @@ -59,12 +68,13 @@ table.page table.control { table.page table.control td { border-top: 0px; border-bottom: 0px; - width: 30px; padding: 0px; - padding-top: 5px; - text-align: center; + padding-top: 2px; + padding-bottom: 2px; + text-align: left; vertical-align: top; font-size: 11px; + font-weight: bold; } table.page table.control img { @@ -349,6 +359,11 @@ table.tree a:hover { color: blue; } +table.tree span.dnicon img { + width: 16px; + padding-bottom: 0px; +} + /* Standard Form */ table.forminput { background-color: #F9F9FA; @@ -548,56 +563,6 @@ span.hint { color: #888; } -/* Edit DN - EntryWriter2 */ -table.entry tr.spacer { - background-color: #D0D0D0; -} - -table.entry tr td.ew2_icon { - vertical-align: top; -} - -table.entry tr td.ew2_attr { - vertical-align: top; - text-align: right; - font-size: 75%; - background-color: #fff; - font-weight: bold; -} - -table.entry tr td.ew2_attr a { - text-decoration: none; - color: #000000; -} - -table.entry tr td.ew2_attr a:hover { - text-decoration: underline; - color: #016; -} - -table.entry tr td.ew2_val { - text-align: left; - vertical-align: top; - padding-bottom: 10px; - padding-left: 50px; -} - -table.entry tr.updated td.ew2_attr { - text-align: right; - font-size: 75%; - border-top: 1px dashed green; - border-left: 1px dashed green; - border-bottom: 1px dashed green; - background-color: #ded; -} - -table.entry tr.updated td.ew2_val { - border-top: 1px dashed green; - border-left: 1px dashed green; - border-right: 1px dashed green; - border-bottom: 1px dashed green; -} - /* Login Box */ #login { background: url('../images/uid.png') no-repeat 0 1px; @@ -652,7 +617,7 @@ table.entry tr.updated td.ew2_val { div.execution_time { font-size: 75%; font-weight: normal; - text-align: center; + text-align: left; } table.result { @@ -697,6 +662,12 @@ table.result tr.list_item td.value { font-size: 12px; } +table.result_box { + border: 1px solid #AAAACC; + border-collapse: collapse; + empty-cells: show; +} + table.result_table { border: 1px solid #AAAACC; border-collapse: collapse; @@ -704,6 +675,7 @@ table.result_table { } table.result_table td { + font-size: 12px; vertical-align: top; border: 1px solid #AAAACC; padding: 4px; @@ -732,7 +704,7 @@ table.result_table tr.highlight td { table.result_table td.heading { color: #FFFFFF; background-color: #000088; - font-size: 15px; + font-size: 12px; } table.result_table td.value { @@ -743,12 +715,14 @@ table.result_table td.value { table.result_table tr.heading { color: #FFFFFF; background-color: #000088; - font-size: 15px; + font-size: 12px; + font-weight: bold; } table.result_table tr.heading a { color: #FFFFFF; - font-size: 20px; + font-size: 12px; + font-weight: bold; } table.result_table tr.heading td { diff --git a/htdocs/delete.php b/htdocs/delete.php index 277e0a2..c2134d6 100644 --- a/htdocs/delete.php +++ b/htdocs/delete.php @@ -1,55 +1,40 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +# The DNs we are working with +$request = array(); +$request['dn'] = get_request('dn','REQUEST',true); -if (! $_SESSION[APPCONFIG]->isCommandAvailable('entry_delete', 'simple_delete')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('delete entry')),'error','index.php'); +if (! $app['server']->dnExists($request['dn'])) + error(sprintf('%s (%s)',_('No such entry.'),''.pretty_print_dn($request['dn']).''),'error','index.php'); -$entry = array(); -$entry['dn'] = get_request('dn'); +if (! $_SESSION[APPCONFIG]->isCommandAvailable('entry_delete','simple_delete')) + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('delete entry')),'error','index.php'); -if (! $entry['dn']) - error(_('You must specify a DN'),'error','index.php'); - -if (! $ldapserver->dnExists($entry['dn'])) - error(sprintf('%s (%s)',_('No such entry.'),''.pretty_print_dn($entry['dn']).''),'error','index.php'); - -# Check the user-defined custom callback first. -if (run_hook('pre_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$entry['dn']))) - $result = $ldapserver->delete($entry['dn']); -else - error(sprintf(_('Could not delete the entry: %s'),''.pretty_print_dn($entry['dn']).''),'error','index.php'); - -if ($result) { - # Custom callback - run_hook('post_entry_delete', - array('server_id'=>$ldapserver->server_id,'dn'=>$entry['dn'])); +# Delete the entry. +$result = $app['server']->delete($request['dn']); +if ($result) system_message(array( 'title'=>_('Delete DN'), - 'body'=>_('Successfully deleted DN ').sprintf('%s',$entry['dn']), + 'body'=>_('Successfully deleted DN ').sprintf('%s',$request['dn']), 'type'=>'info'), - sprintf('index.php?server_id=%s',$ldapserver->server_id)); - -} else { + sprintf('index.php?server_id=%s',$app['server']->getIndex())); +else system_message(array( - 'title'=>_('Could not delete the entry.').sprintf(' (%s)',pretty_print_dn($entry['dn'])), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), + 'title'=>_('Could not delete the entry.').sprintf(' (%s)',pretty_print_dn($request['dn'])), + 'body'=>ldap_error_msg($app['server']->getErrorMessage(null),$app['server']->getErrorNum(null)), 'type'=>'error')); -} ?> diff --git a/htdocs/delete_attr.php b/htdocs/delete_attr.php index 94f364f..217de86 100644 --- a/htdocs/delete_attr.php +++ b/htdocs/delete_attr.php @@ -1,56 +1,54 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); - if (! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('delete attribute')),'error','index.php'); + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('delete attribute')),'error','index.php'); -$entry = array(); -$entry['dn']['string'] = get_request('dn'); -$entry['dn']['encode'] = rawurlencode($entry['dn']['string']); -$entry['attr'] = get_request('attr'); +$request = array(); +$request['dn'] = get_request('dn','REQUEST',true); +$request['attr'] = get_request('attr','REQUEST',true); +$request['index'] = get_request('index','REQUEST',true); -if (! $entry['dn']['string']) - error(_('No DN specified'),'error','index.php'); - -if (! $entry['attr']) - error(_('No attribute name specified.'),'error','index.php'); - -if ($ldapserver->isAttrReadOnly($entry['attr'])) - error(sprintf(_('The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'),htmlspecialchars($entry['attr'])),'error','index.php'); +if ($app['server']->isAttrReadOnly($request['attr'])) + error(sprintf(_('The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'),$request['attr']),'error','index.php'); $update_array = array(); -$update_array[$entry['attr']] = array(); +$update_array[$request['attr']] = $app['server']->getDNAttrValue($request['dn'],$request['attr']); -$result = $ldapserver->modify($entry['dn']['string'],$update_array); -if ($result) { - $redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$ldapserver->server_id,$entry['dn']['encode']); +$redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', + $app['server']->getIndex(),rawurlencode($request['dn'])); - foreach ($update_array as $attr => $junk) - $redirect_url .= "&modified_attrs[]=$attr"; - - header("Location: $redirect_url"); - die(); - -} else { +if (! isset($update_array[$request['attr']][$request['index']])) system_message(array( - 'title'=>_('Could not perform ldap_modify operation.'), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); + 'title'=>_('Could not delete attribute value.'), + 'body'=>sprintf('%s. %s/%s',_('The attribute value does not exist'),$request['attr'],$request['index']), + 'type'=>'warn'),$redirect_url); + +else { + unset($update_array[$request['attr']][$request['index']]); + foreach ($update_array as $key => $values) + $update_array[$key] = array_values($values); + + $result = $app['server']->modify($request['dn'],$update_array); + + if ($result) { + foreach ($update_array as $attr => $junk) + $redirect_url .= sprintf('&modified_attrs[]=%s',$attr); + + header("Location: $redirect_url"); + die(); + } } ?> diff --git a/htdocs/delete_form.php b/htdocs/delete_form.php index 9e27481..fbdf91d 100644 --- a/htdocs/delete_form.php +++ b/htdocs/delete_form.php @@ -1,50 +1,53 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +# The DN we are working with +$request = array(); +$request['dn'] = get_request('dn','GET'); -$entry = array(); -$entry['dn']['string'] = get_request('dn','GET'); -$entry['dn']['html'] = htmlspecialchars($entry['dn']['string']); +# Check if the entry exists. +if (! $request['dn'] || ! $app['server']->dnExists($request['dn'])) + error(sprintf(_('The entry (%s) does not exist.'),$request['dn']),'error','index.php'); # We search all children, not only the visible children in the tree -$entry['children'] = $ldapserver->getContainerContents($entry['dn']['string'],0,'(objectClass=*)',LDAP_DEREF_NEVER); +$request['children'] = $app['server']->getContainerContents($request['dn'],null,0,'(objectClass=*)',LDAP_DEREF_NEVER); -printf('

'._('Delete %s').'

',htmlspecialchars(get_rdn($entry['dn']['string']))); +printf('

%s %s

',_('Delete'),get_rdn($request['dn'])); printf('

%s: %s     %s: %s

', - _('Server'),$ldapserver->name,_('Distinguished Name'),$entry['dn']['html']); + _('Server'),$app['server']->getName(),_('Distinguished Name'),$request['dn']); echo "\n"; echo '
'; -if (count($entry['children'])) { +if (count($request['children'])) { printf('%s

',_('Permanently delete all children also?')); - # Get the total number of child objects (whole sub-tree) - $search['entries'] = $ldapserver->search(null,dn_escape($entry['dn']['string']),'objectClass=*',array('dn')); - $search['count'] = count($search['entries']); - $search['href'] = htmlspecialchars(sprintf('cmd.php?cmd=search&search=true&;server_id=%s&filter=%s&base_dn=%s&form=advanced&scope=sub', - $ldapserver->server_id,rawurlencode('objectClass=*'),rawurlencode($entry['dn']['string']))); + $search['href'] = htmlspecialchars(sprintf('cmd.php?cmd=search&search=true&server_id=%s&filter=%s&base_dn=%s&form=advanced&scope=sub', + $app['server']->getIndex(),rawurlencode('objectClass=*'),rawurlencode($request['dn']))); + + $query = array(); + $query['base'] = $request['dn']; + $query['scope'] = 'sub'; + $query['attrs'] = array('dn'); + $query['deref'] = LDAP_DEREF_NEVER; + $request['search'] = $app['server']->query($query,null); echo ''; echo ''; echo ''; @@ -52,7 +55,7 @@ if (count($entry['children'])) { echo ''; printf('', - sprintf(_('phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'),$search['count']-1)); + sprintf(_('phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?'),count($request['search']))); echo ''; @@ -64,17 +67,17 @@ if (count($entry['children'])) { echo ''; echo ''; @@ -88,12 +91,10 @@ if (count($entry['children'])) { echo _('List of entries to be deleted:'); echo '
'; - printf('',min(10,count($request['search']))); + foreach ($request['search'] as $key => $value) + printf('',++$i,dn_unescape($value['dn'])); echo ''; echo "\n"; @@ -103,9 +104,9 @@ if (count($entry['children'])) { printf('',_('Are you sure you want to permanently delete this object?')); echo ''; - printf('',_('Server'),htmlspecialchars($ldapserver->name)); + printf('',_('Server'),$app['server']->getName()); printf('', - _('Distinguished Name'),_('DN'),$entry['dn']['string']); + _('Distinguished Name'),_('DN'),$request['dn']); echo ''; echo "\n"; @@ -113,8 +114,8 @@ if (count($entry['children'])) { echo '',_('Server'),htmlspecialchars($ldapserver->name)); - printf('',_('Looking in'),htmlspecialchars($entry['container'])); +if ($request['container']) { + printf('',_('Server'),$app['server']->getName()); + printf('',_('Looking in'),$request['container']); echo ''; } -/* Has the use already begun to descend into a specific server tree? */ -if (isset($ldapserver) && ! is_null($entry['container'])) { +# Has the user already begun to descend into a specific server tree? +if (isset($app['server']) && ! is_null($request['container'])) { - if (! $ldapserver->haveAuthInfo()) - error(_('Not enough information to login to server. Please check your configuration.'),'error','index.php'); + $request['children'] = $app['server']->getContainerContents($request['container'],null,0,'(objectClass=*)',$_SESSION[APPCONFIG]->getValue('deref','tree')); + sort($request['children']); - $entry['children'] = $ldapserver->getContainerContents($entry['container'],0,'(objectClass=*)',$_SESSION[APPCONFIG]->GetValue('deref','tree')); - sort($entry['children']); - - foreach ($ldapserver->getBaseDN() as $base_dn) { + foreach ($app['server']->getBaseDN() as $base) { if (DEBUG_ENABLED) - debug_log('Comparing BaseDN [%s] with container [%s]',64,__FILE__,__LINE__,__METHOD__,$base_dn,$entry['container']); + debug_log('Comparing BaseDN [%s] with container [%s]',64,__FILE__,__LINE__,__METHOD__,$base,$request['container']); - if (! pla_compare_dns($entry['container'],$base_dn)) { + if (! pla_compare_dns($request['container'],$base)) { $parent_container = false; - $href['up'] = htmlspecialchars(sprintf('entry_chooser.php?form_element=%s&rdn=%s',$entry['element'],$entry['rdn'])); + $href['up'] = sprintf('entry_chooser.php?form_element=%s&rdn=%s',$request['element'],rawurlencode($request['rdn'])); break; } else { - $parent_container = get_container($entry['container']); - $href['up'] = htmlspecialchars(sprintf('entry_chooser.php?form_element=%s&rdn=%s&server_id=%s&container=%s', - $entry['element'],$entry['rdn'],$ldapserver->server_id,rawurlencode($parent_container))); + $parent_container = $app['server']->getContainer($request['container']); + $href['up'] = sprintf('entry_chooser.php?form_element=%s&rdn=%s&server_id=%s&container=%s', + $request['element'],$request['rdn'],$app['server']->getIndex(),rawurlencode($parent_container)); } } echo ''; echo ''; printf('',$href['up'],IMGDIR); - printf('',$href['up'],_('Back Up...')); + printf('',$href['up'],_('Back Up')); echo ''; - if (! count($entry['children'])) + if (! count($request['children'])) printf('',_('no entries')); else - foreach ($entry['children'] as $dn) { - $href['return'] = sprintf("javascript:returnDN('%s%s')",($entry['rdn'] ? sprintf('%s,',$entry['rdn']) : ''),rawurlencode($dn)); - $href['expand'] = htmlspecialchars(sprintf('entry_chooser.php?server_id=%s&form_element=%s&rdn=%s&container=%s', - $ldapserver->server_id,$entry['element'],$entry['rdn'],rawurlencode($dn))); + foreach ($request['children'] as $dn) { + $href['return'] = sprintf("javascript:returnDN('%s%s')",($request['rdn'] ? sprintf('%s,',$request['rdn']) : ''),rawurlencode($dn)); + $href['expand'] = sprintf('entry_chooser.php?server_id=%s&form_element=%s&rdn=%s&container=%s', + $app['server']->getIndex(),$request['element'],$request['rdn'],rawurlencode($dn)); echo ''; echo ''; printf('',$href['expand'],IMGDIR); - printf('',$href['return'],htmlspecialchars($dn)); + printf('',$href['return'],$dn); echo ''; echo "\n\n"; } -/* draw the root of the selection tree (ie, list all the servers) */ +# Draw the root of the selection tree (ie, list all the servers) } else { - foreach ($_SESSION[APPCONFIG]->ldapservers->GetServerList() as $id) { + foreach ($_SESSION[APPCONFIG]->getServerList() as $index => $server) { + if ($server->isLoggedIn(null)) { + printf('',_('Server'),$server->getName()); + foreach ($server->getBaseDN() as $dn) { + if (! $dn) { + printf('',_('Could not determine base DN')); - $ldapserver = $_SESSION[APPCONFIG]->ldapservers->Instance($id); + } else { + $href['return'] = sprintf("javascript:returnDN('%s%s')",($request['rdn'] ? sprintf('%s,',$request['rdn']) : ''),rawurlencode($dn)); + $href['expand'] = htmlspecialchars(sprintf('entry_chooser.php?server_id=%s&form_element=%s&rdn=%s&container=%s', + $server->getIndex(),$request['element'],$request['rdn'],rawurlencode($dn))); - if ($ldapserver->isVisible()) { - - if (! $ldapserver->haveAuthInfo()) - continue; - - else { - printf('',_('Server'),htmlspecialchars($ldapserver->name)); - foreach ($ldapserver->getBaseDN() as $dn) { - if (! $dn) { - printf('',_('Could not determine base DN')); - - } else { - $href['return'] = sprintf("javascript:returnDN('%s%s')",($entry['rdn'] ? sprintf('%s,',$entry['rdn']) : ''),rawurlencode($dn)); - $href['expand'] = htmlspecialchars(sprintf('entry_chooser.php?server_id=%s&form_element=%s&rdn=%s&container=%s', - $ldapserver->server_id,$entry['element'],$entry['rdn'],rawurlencode($dn))); - - echo ''; - echo ''; - printf('',$href['expand'],IMGDIR); - printf('',$href['return'],htmlspecialchars($dn)); - } + echo ''; + echo ''; + printf('',$href['expand'],IMGDIR); + printf('',$href['return'],$dn); } - - echo ''; } + + echo ''; } } } echo '
'; - printf(_('This entry is the root of a sub-tree containing %s entries.'),$search['count']); + printf(_('This entry is the root of a sub-tree containing %s entries.'),count($request['search'])); printf(' (%s)', $search['href'],_('view entries')); echo '
 
%s
 
'; echo '
'; echo ''; - printf('',htmlspecialchars($entry['dn']['string'])); - printf('',$ldapserver->server_id); - printf('',sprintf(_('Delete all %s objects'),$search['count'])); + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['dn'])); + printf('',sprintf(_('Delete all %s objects'),count($request['search']))); echo '
'; echo '
'; echo '
'; echo ''; - printf('',htmlspecialchars($entry['dn']['string'])); - printf('',$ldapserver->server_id); + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['dn'])); printf('',_('Cancel')); echo '
'; echo '
%s
 
%s:%s
%s:%s
%s%s
 
'; echo '
'; echo ''; - printf('',htmlspecialchars($entry['dn']['string'])); - printf('',$ldapserver->server_id); + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['dn'])); printf('',_('Delete')); echo '
'; @@ -123,8 +124,8 @@ if (count($entry['children'])) { echo '
'; echo ''; - printf('',htmlspecialchars($entry['dn']['string'])); - printf('',$ldapserver->server_id); + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['dn'])); printf('',_('Cancel')); echo '
'; diff --git a/htdocs/download_binary_attr.php b/htdocs/download_binary_attr.php index bdbf7a2..7c69cc8 100644 --- a/htdocs/download_binary_attr.php +++ b/htdocs/download_binary_attr.php @@ -1,45 +1,51 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +$request = array(); +$request['dn'] = get_request('dn','GET'); +$request['attr'] = strtolower(get_request('attr','GET',true)); +$request['index'] = get_request('index','GET',false,0); +$request['type'] = get_request('type','GET',false,'octet-stream'); +$request['filename'] = get_request('filename','GET',false,sprintf('%s:%s.bin',get_rdn($request['dn'],true),$request['attr'])); -if (! $ldapserver->haveAuthInfo()) - error(_('Not enough information to login to server. Please check your configuration.'),'error','index.php'); +if (! $app['server']->dnExists($request['dn'])) + error(sprintf(_('The entry (%s) does not exist.'),$request['dn']),'error','index.php'); -$dn = rawurldecode(get_request('dn','GET')); -$attr = get_request('attr','GET'); - -# if there are multiple values in this attribute, which one do you want to see? -$value_num = get_request('value_num','GET'); - -if (! $ldapserver->dnExists($dn)) - error(sprintf('%s (%s)',_('No such entry.'),pretty_print_dn($dn)),'error','index.php'); - -$search = $ldapserver->search(null,$dn,'(objectClass=*)',array($attr),'base',false,$_SESSION[APPCONFIG]->GetValue('deref','view')); +$search = $app['server']->getDNAttrValues($request['dn'],null,LDAP_DEREF_NEVER,array($request['attr'])); # Dump the binary data to the browser $obStatus = ob_get_status(); if (isset($obStatus['type']) && $obStatus['type'] && $obStatus['status']) ob_end_clean(); -header('Content-type: octet-stream'); -header("Content-disposition: attachment; filename=$attr"); -header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); -header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); +if (! isset($search[$request['attr']][$request['index']])) { + # We cant display an error, but we can set a system message, which will be display on the next page render. + system_message(array( + 'title'=>_('No binary data available'), + 'body'=>sprintf(_('Could not fetch binary data from LDAP server for attribute [%s].'),$request['attr']), + 'type'=>'warn')); -if ($value_num && is_array($search[$attr][$dn])) - echo $search[$dn][$attr][$value_num]; -else - echo $search[$dn][$attr]; + die(); +} + +header(sprintf('Content-type: %s',$request['type'])); +header(sprintf('Content-disposition: attachment; filename="%s"',$request['filename'])); +header(sprintf('Expires: Mon, 26 Jul 1997 05:00:00 GMT',gmdate('r'))); +header(sprintf('Last-Modified: %s',gmdate('r'))); +echo $search[$request['attr']][$request['index']]; +die(); ?> diff --git a/htdocs/draw_tree_node.php b/htdocs/draw_tree_node.php index edbe477..0be98cb 100644 --- a/htdocs/draw_tree_node.php +++ b/htdocs/draw_tree_node.php @@ -1,42 +1,63 @@ getEntry($entry['dn']); -if (! $dnentry) { - $tree->addEntry($entry['dn']); - $dnentry = $this->getEntry($entry['dn']); -} +$treesave = false; -if (! $dnentry) - die(); +if ($request['dn']) { + $dnentry = $tree->getEntry($request['dn']); -if ($entry['action'] == 0) { - $dnentry->close(); + if (! $dnentry) { + $tree->addEntry($request['dn']); + $dnentry = $tree->getEntry($request['dn']); + $treesave = true; + } -} elseif ($entry['action'] == 2) { - $dnentry->open(); + switch ($request['action']) { + case 0: + $dnentry->close(); -} else { - $dnentry->open(); - if ($entry['dn']) { - echo $tree->draw_children($dnentry,$entry['code']); - } else { - $tree->draw(true); + break; + + case 2: + default: + if ($dnentry->isSizeLimited()) { + $tree->readChildren($request['dn'],true); + + $treesave = true; + } + + $dnentry->open(); } } + +if ($treesave) + set_cached_item($app['server']->getIndex(),'tree','null',$tree); + +if ($request['dn']) + echo $tree->draw_children($dnentry,$request['code']); +else + $tree->draw($request['noheader']); + die(); ?> diff --git a/htdocs/entry_chooser.php b/htdocs/entry_chooser.php index 09dbf73..1eecdaf 100644 --- a/htdocs/entry_chooser.php +++ b/htdocs/entry_chooser.php @@ -1,125 +1,123 @@ '; echo '
%s:%s
%s:%s
%s:%s
%s:%s
 
 Up%s%s...
 (%s)
 Plus%s%s
%s:%s
 (%s)
%s:%s
 (%s)
 Plus%s
 Plus%s
 
 
'; echo ''; -echo ''; + +# Capture the output and put into the body of the page. +$www['body'] = new block(); +$www['body']->SetBody(ob_get_contents()); +$www['page']->block_add('body',$www['body']); +ob_end_clean(); + +# Render the popup. +$www['page']->display(array('CONTROL'=>false,'FOOT'=>false,'HEAD'=>false,'TREE'=>false)); ?> diff --git a/htdocs/expand.php b/htdocs/expand.php index 710f16e..5b80ae4 100644 --- a/htdocs/expand.php +++ b/htdocs/expand.php @@ -1,26 +1,29 @@ server_id,'tree'); +$tree = get_cached_item($app['server']->getIndex(),'tree'); $entry = $tree->getEntry($dn); $entry->open(); -set_cached_item($ldapserver->server_id,'tree','null',$tree); +set_cached_item($app['server']->getIndex(),'tree','null',$tree); header(sprintf('Location:index.php?server_id=%s&junk=%s#%s%s', - $ldapserver->server_id,random_junk(),htmlid($ldapserver->server_id,$dn),pla_session_param())); + $app['server']->getIndex(),random_junk(),htmlid($app['server']->getIndex(),$dn),app_session_param())); die(); ?> diff --git a/htdocs/export.php b/htdocs/export.php index 4a2bc0a..c975097 100755 --- a/htdocs/export.php +++ b/htdocs/export.php @@ -1,117 +1,45 @@ isCommandAvailable('export')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('export')),'error','index.php'); + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('export')),'error','index.php'); -$entry = array(); -$entry['base_dn'] = get_request('dn'); -$entry['format'] = get_request('format','POST',false,'unix'); -$entry['scope'] = get_request('scope','POST',false,'base'); -$entry['filter'] = get_request('filter','POST',false,'objectclass=*'); -$entry['attr'] = get_request('attributes'); -$entry['sys_attr'] = get_request('sys_attr'); -$entry['file'] = get_request('save_as_file') ? true : false; -$entry['exporter_id'] = get_request('exporter_id'); - -if ($entry['filter']) { - $entry['filter'] = preg_replace('/\s+/','',$entry['filter']); - $attributes = split(',',preg_replace('/\s+/','',$entry['attr'])); - -} else { - $attributes = array(); -} - -# Add system attributes if needed -if ($entry['sys_attr']) { - array_push($attributes,'*'); - array_push($attributes,'+'); -} - -(! is_null($entry['exporter_id'])) or error(_('You must choose an export format.'),'error','index.php'); -isset($exporters[$entry['exporter_id']]) or error(_('Invalid export format'),'error','index.php'); - -# Initialisation of other variables -$friendly_rdn = get_rdn($entry['base_dn'],1); -$extension = $exporters[$entry['exporter_id']]['extension']; - -# default case not really needed -switch ($entry['format']) { - case 'win': - $br = "\r\n"; - break; - case 'mac': - $br = "\r"; - break; - case 'unix': - default: - $br = "\n"; -} - -# get the decoree,ie the source -$plaLdapExporter = new PlaLdapExporter($ldapserver->server_id,$entry['filter'],$entry['base_dn'],$entry['scope'],$attributes); - -# the decorator do it that way for the moment -$exporter = null; - -switch ($entry['exporter_id']) { - case 0: - $exporter = new PlaLdifExporter($plaLdapExporter); - break; - - case 1: - $exporter = new PlaDsmlExporter($plaLdapExporter); - break; - - case 2: - $exporter = new PlaVcardExporter($plaLdapExporter); - break; - - case 3: - $exporter = new PlaCSVExporter($plaLdapExporter); - break; - - default: - # truly speaking,this default case will never be reached. See check at the bottom. - error(_('No available exporter found.'),'error','index.php'); -} - -# set the CLRN -$exporter->setOutputFormat($br); - -if (get_request('compress','REQUEST') == 'on') - $exporter->compress(true); - -# prevent script from bailing early for long search +# Prevent script from bailing early for long search @set_time_limit(0); +$request = array(); +$request['file'] = get_request('save_as_file') ? true : false; +$request['exporter'] = new Exporter($app['server']->getIndex(),get_request('exporter_id','REQUEST')); +$request['export'] = $request['exporter']->getTemplate(); +$types = $request['export']->getType(); + # send the header -if ($entry['file']) { +if ($request['file']) { $obStatus = ob_get_status(); if (isset($obStatus['type']) && $obStatus['type'] && $obStatus['status']) ob_end_clean(); header('Content-type: application/download'); - header(sprintf('Content-Disposition: filename="%s.%s"',$friendly_rdn,$exporters[$entry['exporter_id']]['extension'].($exporter->isCompressed()?'.gz':''))); - $exporter->export(); + header(sprintf('Content-Disposition: inline; filename="%s.%s"','export',$types['extension'].($request['export']->isCompressed() ? '.gz' : ''))); + $request['export']->export(); die(); } else { print '
';
-	$exporter->export();
+	$request['export']->export();
 	print '
'; } ?> diff --git a/htdocs/export_form.php b/htdocs/export_form.php index c0a9d1e..4db878b 100755 --- a/htdocs/export_form.php +++ b/htdocs/export_form.php @@ -1,44 +1,49 @@ 'UNIX (Linux, BSD)', +$available_formats = array( 'mac' => 'Macintosh', + 'unix' => 'UNIX (Linux, BSD)', 'win' => 'Windows' ); -$available_scopes = array ( +$available_scopes = array( 'base' => _('Base (base dn only)'), 'one' => _('One (one level beneath base)'), 'sub' => _('Sub (entire subtree)') ); -printf('

%s

',_('Export')); +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->drawTitle(sprintf('%s',_('Export'))); + echo '
'; echo '
'; echo '
'; echo ''; +printf('',$app['server']->getIndex()); + echo ''; echo ''; echo '
'; @@ -47,11 +52,12 @@ echo '
'; printf('%s',_('Export')); echo ''; -printf('',_('Server'),server_select_list($ldapserver->server_id)); +printf('',_('Server'),server_select_list($app['server']->getIndex())); echo ''; printf('',_('Base DN')); -printf(''; echo ''; @@ -63,20 +69,21 @@ echo ''; + echo ''; printf('', - _('Search Filter'),htmlspecialchars($entry['filter'])); + _('Search Filter'),htmlspecialchars($request['filter'])); printf('', - _('Show Attributtes'),htmlspecialchars($entry['attr'])); + _('Show Attributtes'),htmlspecialchars($request['attr'])); printf('', - $entry['sys_attr'] ? 'checked="true" ' : '',_('Include system attributes')); + $request['sys_attr'] ? 'checked="true" ' : '',_('Include system attributes')); printf('', _('Save as file')); @@ -92,71 +99,131 @@ echo ''; echo ''; + echo ''; -echo ''; -echo '', htmlspecialchars(_('Proceed >>'))); -echo ''; -echo ''; + echo '
%s%s
%s%s
%s ',htmlspecialchars($entry['dn'])); +echo ''; +printf(' ',htmlspecialchars($request['dn'])); draw_chooser_link('export_form.dn'); echo '
'; foreach ($available_scopes as $id => $desc) printf('
', - htmlspecialchars($id),htmlspecialchars($id),($id == $entry['scope']) ? 'checked="true"' : '', - htmlspecialchars($id),htmlspecialchars($desc)); + htmlspecialchars($id),$id,($id == $request['scope']) ? 'checked="true"' : '', + htmlspecialchars($id),$desc); echo '
%s
%s
 
 
'; echo ''; -echo ''; + +echo ''; + echo ''; echo '
'; +echo '
'; echo '
'; printf('%s',_('Export format')); -foreach ($exporters as $index => $exporter) { - printf('', - htmlspecialchars($index),htmlspecialchars($index),($index==$entry['id']) ? ' checked="true"' : ''); +foreach (Exporter::types() as $index => $exporter) { + printf('', + htmlspecialchars($exporter['type']),htmlspecialchars($exporter['type']),($exporter['type'] === $request['exporter_id']) ? ' checked="true"' : ''); + printf('
', - htmlspecialchars($index),htmlspecialchars($exporter['desc'])); + htmlspecialchars($exporter['type']),$exporter['type']); } echo '
'; echo '
'; echo '
'; printf('%s',_('Line ends')); foreach ($available_formats as $id => $desc) printf('
', - htmlspecialchars($id),htmlspecialchars($id),($entry['format']==$id) ? ' checked="true"' : '', - htmlspecialchars($id),htmlspecialchars($desc)); + htmlspecialchars($id),htmlspecialchars($id),($request['format']==$id) ? ' checked="true"' : '', + htmlspecialchars($id),$desc); echo '
'; echo '
'; echo '
'; -printf('
', +printf('
'; echo ''; echo ''; /** - * Helper functoin for fetching the line end format. + * Helper function for fetching the line end format. + * * @return String 'win', 'unix', or 'mac' based on the user's browser.. */ function get_line_end_format() { - if (is_browser_os_windows()) + if (is_browser('win')) return 'win'; - elseif (is_browser_os_unix()) + elseif (is_browser('unix')) return 'unix'; - elseif (is_browser_os_mac()) + elseif (is_browser('mac')) return 'mac'; else return 'unix'; } +/** + * Gets the USER_AGENT string from the $_SERVER array, all in lower case in + * an E_NOTICE safe manner. + * + * @return string|false The user agent string as reported by the browser. + */ +function get_user_agent_string() { + if (isset($_SERVER['HTTP_USER_AGENT'])) + $return = strtolower($_SERVER['HTTP_USER_AGENT']); + else + $return = ''; + + if (DEBUG_ENABLED) + debug_log('Entered with (), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,$return); + + return $return; +} + +/** + * Determine the OS for the browser + */ +function is_browser($type) { + $agents = array(); + + $agents['unix'] = array( + 'sunos','sunos 4','sunos 5', + 'i86', + 'irix','irix 5','irix 6','irix6', + 'hp-ux','09.','10.', + 'aix','aix 1','aix 2','aix 3','aix 4', + 'inux', + 'sco', + 'unix_sv','unix_system_v','ncr','reliant','dec','osf1', + 'dec_alpha','alphaserver','ultrix','alphastation', + 'sinix', + 'freebsd','bsd', + 'x11','vax','openvms' + ); + + $agents['win'] = array( + 'win','win95','windows 95', + 'win16','windows 3.1','windows 16-bit','windows','win31','win16','winme', + 'win2k','winxp', + 'win98','windows 98','win9x', + 'winnt','windows nt','win32', + '32bit' + ); + + $agents['mac'] = array( + 'mac','68000','ppc','powerpc' + ); + + if (isset($agents[$type])) + return in_array(get_user_agent_string(),$agents[$type]); + else + return false; +} ?> diff --git a/htdocs/header.php b/htdocs/header.php deleted file mode 100644 index 4c26c8d..0000000 --- a/htdocs/header.php +++ /dev/null @@ -1,69 +0,0 @@ -GetValue('appearance','language') : 'auto'; - -# text/xml won't work with MSIE, but is very useful for debugging xhtml code. -# header('Content-type: text/xml; charset="UTF-8"'); -@header('Content-type: text/html; charset="UTF-8"'); - -# XML version and encoding for well-behaved browsers -echo ''."\n"; - -echo ''."\n"; - -printf('',$language,$language); -echo "\n\n"; - -echo ''; - -if (isset($_SESSION[APPCONFIG]) && $pagetitle = $_SESSION[APPCONFIG]->GetValue('appearance','page_title')) - printf('phpLDAPadmin - %s',$pagetitle); -else - echo 'phpLDAPadmin'; - -if (isset($_SESSION[APPCONFIG])) - $css = $_SESSION[APPCONFIG]->GetValue('appearance','stylesheet'); -else - $css = 'style.css'; -printf('',CSSDIR,$css); - -if (isset($server_id)) { - $custom_file = get_custom_file($server_id,'style.css',CSSDIR); - - if (strcmp($custom_file,'style.css') != 0) - printf('',$custom_file); -} - -printf('',JSDIR); -printf('',JSDIR); -printf('',JSDIR); -printf('',JSDIR); -printf('',JSDIR); -printf('',JSDIR); - -echo "\n\n"; - -printf('',JSDIR); - -if (isset($meta_refresh_variable)) - printf('',$meta_refresh_variable); - -echo ''; -echo ''; -echo "\n\n"; -?> diff --git a/htdocs/images/disabled.png b/htdocs/images/disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..1c427c04cee9218d5dba5fc95c2d45d16641c82c GIT binary patch literal 692 zcmV;l0!#ggP)N+@YjJY{101#-I{SF?5i90BrrjbLi>c(*kasZjOX=$m;%=I&cck#@>f z3+dbQ3_r}$)08CBYA}(qEMN+tPB1>!86rv{k`O%%h^G#7bY`CZd++Gz=|e|i7zPT( zXr~1*-bgUm7x4&?SZ%JoL8!gW*A*;(_!;5}g>qX--griHJb}HE!(Pb|>m6WldX9s! zI6}g5NdPQ263o5cQaAzvsSyLh{0000W|1)K&UiBL{Q4GJ0x0000DNk~Le0000I0000G2nGNE02>A`T#+#ye-Qux z3lRZ-WM7d0000McNliru(+dR#7Y_c$&>;W-0;x$vK~#90jgw1Alu;DNfA{-7XPWVw zhvQ?6nL$&>L7RzulvG4%MMj$fiNbcaX_Jvf2-T)VE!qS@^jMTZ5kZ@vsEou-4=R*i z20>sjVx#G3!%Uy^&22GG=poD6?V5S=hK18;zlKY`kTzHRGkluJkJf3anv7#2V0 z@0vV&GeJX@g1^+timF2TUrejf@IPlZDvTDl308W38<=| zV`B+B*Lwh3feks371--9e|OTk$pslBifiEK zYET={Ssk(ysj{O8@l(@O1tH+};3U9=0=NR+LTY{aF9E(uF9RPOf24&@CbLiz0@@ng z6gxG5G6hh4UI(g7ECPM}Jj1CA1Dv|@mUtq)NLN)sMY$DVjRu&*A7Z?G|CQ#T1y%jk ze%P0!@7QwOg&Ewswg8eynhXxd`81XS7!qXHcgN$<9PKSd>}oAxP1uQUQ^{E(C8SM> zX-ZOa8J@kH<<{c~V;;SnW_)T6pgUK-1vm#p0BeCJsPI}TD=NV2v7jn~*z_D@liwK~ zH%J*j4I2SY16O~|k^S{`z!sn$@Bo_t=WjXpfUm$P@BnxP%mDlVcS*_jJW;!b00000 LNkvXXu0mjfa;8;7 delta 676 zcmV;V0$cr@2DAk+iBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVE_OC1ZP1_ zK>z@;j|==^1(6{ge-Z!y3lag+-G2N4000McNliru(g6et2{7BNr%(U@0x?NMK~#9! zwUf(BlwlOcf8TAI@sgusIF1g9Ik^%_cm4rV2`+-5eL@$Z=uc=DLIc9jV73l08o|kC^WNjr8RKlSO1I%+ z>Y$;KIG{7!VKUNT8jCw(q8hReWE&NvfzQv+WUL{xz^>DZ5FrWOLrN%VQ9Na0`vr2l z9#^w=02~4Ge|n8zYVvruH592(_1oy1c|+#zTS}33%2o^M+w%-R%+k}8B-3gzk+Ljc z3ZPCfKGqo`N+FUEJq(Da4sp8k99=;-M~M`9QT3dLxr1u))7FxVII2#{EAm5nQ7 zIK=`@hf=h4cHymkct&$PfxVK$Uda*b9bj;Jj)So{Lc(%M04z5W%)Q=HI06Ex z5fuUM<|-@K&hh@{Wt^=%N-4}x;t0vYjsTeZ!^Y{+gmo;U5pQb8)S&1VaZQW%Xd8Mc z37iTKYSwnR^~w8fWBrgy!1u*%e`27k1tp67aLbg1pzL{USBk8ai@e;daQ~}^uebm# z?7zfpHB{@b^7hG!uZ*Y;F#|jySt<&iLh{0000< KMNUMnLSTZYb}F*~ diff --git a/htdocs/images/invalid.png b/htdocs/images/invalid.png new file mode 100644 index 0000000000000000000000000000000000000000..1c427c04cee9218d5dba5fc95c2d45d16641c82c GIT binary patch literal 692 zcmV;l0!#ggP)N+@YjJY{101#-I{SF?5i90BrrjbLi>c(*kasZjOX=$m;%=I&cck#@>f z3+dbQ3_r}$)08CBYA}(qEMN+tPB1>!86rv{k`O%%h^G#7bY`CZd++Gz=|e|i7zPT( zXr~1*-bgUm7x4&?SZ%JoL8!gW*A*;(_!;5}g>qX--griHJb}HE!(Pb|>m6WldX9s! zI6}g5NdPQ263o5cQaAzvsSyLh{0000;W-0;x$v zK~#90jgw1Alu;DNfA{-7XPWVwhvQ?6nL$&>L7RzulvG4%MMj$fiNbcaX_Jvf2-T)V zE!qS@^jMTZ5kZ@vsEou-4=R*i20>sjVx#G3!%Uy^&22GGo0fGxyc0?Ba4=jVm*y+)6i`y zfl>=%zN&6h*}r2cx=q!9BY;qVl|aLuZ9$4{v%gI$sqv}oAxP1uQUQ^{E(C8SM>X-ZOa8J@kH<<{c~9=)7qd}-VNy+y-QM-l!0000isCommandAvailable('import')) + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('import')),'error','index.php'); + +$request = array(); +$request['importer'] = new Importer($app['server']->getIndex(),'LDIF'); +$request['import'] = $request['importer']->getTemplate(); + +$request['continuous_mode'] = get_request('continuous_mode') ? true : false; + +$type = $request['import']->getType(); + +# Set our timelimit in case we have a lot of importing to do +@set_time_limit(0); + +# String associated to the operation on the ldap server +$actionString = array( + 'add' => _('Adding'), + 'delete' => _('Deleting'), + 'modrdn' => _('Renaming'), + 'moddn' => _('Renaming'), + 'modify' => _('Modifying') + ); + +# String associated with error +$actionErrorMsg = array( + 'add' => _('Could not add object'), + 'delete' => _('Could not delete object'), + 'modrdn' => _('Could not rename object'), + 'moddn' => _('Could not rename object'), + 'modify' => _('Could not modify object') + ); + +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->drawTitle(sprintf('%s',_('Import'))); +$request['page']->drawSubTitle(sprintf('%s: %s %s: %s %s %s (%s)', + _('Server'),$app['server']->getName(), + _('File'),$request['import']->getSource('name'),number_format($request['import']->getSource('size')),_('bytes'),$type['description'])); + +echo '
'; + +# @todo When renaming DNs, the hotlink should point to the new entry on success, or the old entry on failure. +while (! $request['import']->eof()) { + while ($request['template'] = $request['import']->readEntry()) { + + $edit_href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$app['server']->getIndex(), + rawurlencode($request['template']->getDN())); + + $changetype = $request['template']->getType(); + printf('%s %s',$actionString[$changetype],$edit_href,$request['template']->getDN()); + + if ($request['import']->LDAPimport()) + printf(' %s
',_('Success')); + + else { + printf(' %s

',_('Failed')); + $errormsg = sprintf('%s %s',$actionErrorMsg[$changetype],$request['template']->getDN()); + $errormsg .= ldap_error_msg($app['server']->getErrorMessage(null),$app['server']->getErrorNum(null)); + + system_message(array( + 'title'=>_('LDIF text import'), + 'body'=>$errormsg, + 'type'=>'warn')); + } + } + + if ($request['import']->error) { + printf('%s: %s
', + _('Error'),$request['import']->error['message']); + + echo '
'; + + display_pla_parse_error($request['import']); + } + + if (! $request['continuous_mode']) + break; +} + +function display_pla_parse_error($request) { + $type = $request->getType(); + + echo '
'; + echo ''; + echo ''; + printf('',IMGDIR,'error-big.png'); + + printf('',$type['description'],_('Parse Error')); + echo ''; + + printf('',_('Description'),$request->error['message']); + printf('',_('Line'),$request->error['line']); + printf('',_('Data')); + + foreach ($request->error['data'] as $line) + printf('',$line); + + echo '

%s %s

%s:%s
%s:%s
%s:
 %s
'; + echo '
'; +} +?> diff --git a/htdocs/ldif_import_form.php b/htdocs/import_form.php similarity index 69% rename from htdocs/ldif_import_form.php rename to htdocs/import_form.php index ab883c0..d527d8c 100644 --- a/htdocs/ldif_import_form.php +++ b/htdocs/import_form.php @@ -1,12 +1,14 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->drawTitle(sprintf('%s',_('Import'))); +$request['page']->drawSubTitle(sprintf('%s: %s',_('Server'),$app['server']->getName())); -printf('

%s

',_('Import LDIF File')); -printf('

%s: %s

',_('Server'),htmlspecialchars($ldapserver->name)); echo '
'; echo '
'; -printf('',$ldapserver->server_id); -echo ''; +printf('',$app['server']->getIndex()); +echo ''; echo ''; diff --git a/htdocs/index.php b/htdocs/index.php index 9d842cb..f9a0c53 100644 --- a/htdocs/index.php +++ b/htdocs/index.php @@ -1,8 +1,14 @@ block_add('body',$www['body']); $www['page']->display(); - exit; + +} else { + app_session_start(); + $_SESSION[APPCONFIG] = $config; } if ($uri = get_request('URI','GET')) header(sprintf('Location: cmd.php?%s',base64_decode($uri))); +if (! preg_match('/^([0-9]+\.?)+/',app_version())) { + system_message(array( + 'title'=>_('This is a development version of phpLDAPadmin'), + 'body'=>'This is a development version of phpLDAPadmin! You should NOT use it in a production environment (although we dont think it should do any damage).', + 'type'=>'info','special'=>true)); + + if (count($_SESSION[APPCONFIG]->untested())) + system_message(array( + 'title'=>'Untested configuration paramaters', + 'body'=>sprintf('The following parameters have not been tested. If you have configured these parameters, and they are working as expected, please let the developers know, so that they can be removed from this message.
%s',implode(', ',$_SESSION[APPCONFIG]->untested())), + 'type'=>'info','special'=>true)); + + $server = $_SESSION[APPCONFIG]->getServer(get_request('server_id','REQUEST')); + if (count($server->untested())) + system_message(array( + 'title'=>'Untested server configuration paramaters', + 'body'=>sprintf('The following parameters have not been tested. If you have configured these parameters, and they are working as expected, please let the developers know, so that they can be removed from this message.
%s',implode(', ',$server->untested())), + 'type'=>'info','special'=>true)); +} + include './cmd.php'; ?> diff --git a/htdocs/js/ajaxtree.js b/htdocs/js/ajaxtree.js new file mode 100644 index 0000000..5946a88 --- /dev/null +++ b/htdocs/js/ajaxtree.js @@ -0,0 +1,163 @@ +var nodeLayer = null; +var sonLayer = null; +var oldstyle = ''; +var newstyle = ''; +var oldimg = ''; +var newimg = ''; + +function readCollapsedNodes() { + collapsedNodes = new Array(); + cn = document.cookie.split('collapsedNodes='); + if (cn.length < 2) return; + vl = cn[1]; + if (vl.indexOf(';') != -1) { + vl = vl.split(';'); + vl = vl[0]; + } + if (vl) { + collapsed = vl.split('|'); + for (i = 0; i < collapsed.length; i++) { + collapsedNodes[i] = collapsed[i]; + } + } +} + +function writeCollapsedNodes() { + document.cookie = 'collapsedNodes=' + collapsedNodes.join('|') + ';path=/'; +} + +function addCollapsedNode(nodeId) { + for (i = 0; i < collapsedNodes.length; i++) { + if (collapsedNodes[i] == nodeId) return; + } + collapsedNodes[collapsedNodes.length] = nodeId; + writeCollapsedNodes(); +} + +function delCollapsedNode(nodeId) { + newCollapsedNodes = new Array(); + j = 0; + for (i = 0; i < collapsedNodes.length; i++) { + if (collapsedNodes[i] != nodeId) { + newCollapsedNodes[j++] = collapsedNodes[i]; + } + } + collapsedNodes = newCollapsedNodes; + writeCollapsedNodes(); +} + +function updateNewStyle() { + nodeLayer.src = newimg; + sonLayer.style.display = newstyle; +} + +function cancelNewStyle() { + nodeLayer.src = oldimg; + sonLayer.style.display = oldstyle; +} + +function alertTreeNodeContents(html) { + if (html.replace(/(^\s*)|(\s*$)/g, '')) { + includeHTML(sonLayer, html); + } + updateNewStyle(); +} + +function opencloseTreeNode(nodeid, params) { + cancelHttpRequest(); // cancel last request + + // get the node element + if ((!DOM || Opera56 || Konqueror22) && !IE4) return; + if (!IE4) { + sonLayer = document.getElementById('jt' + nodeid + 'son'); + nodeLayer = document.getElementById('jt' + nodeid + 'node'); + } else { + sonLayer = document.all('jt' + nodeid + 'son'); + nodeLayer = document.all('jt' + nodeid + 'node'); + } + if (!sonLayer || !nodeLayer) return false; + + // update global variables + oldstyle = sonLayer.style.display; + oldimg = nodeLayer.src; + var action = 0; // (action = 1) => expand ; (action = 2) => collapse + if (oldimg.indexOf('js/phplayersmenu/menuimages/tree_expand.png') > -1) { + newimg = 'js/phplayersmenu/menuimages/tree_collapse.png'; + action = 1; + } else if (oldimg.indexOf('js/phplayersmenu/menuimages/tree_expand_first.png') > -1) { + newimg = 'js/phplayersmenu/menuimages/tree_collapse_first.png'; + action = 1; + } else if (oldimg.indexOf('js/phplayersmenu/menuimages/tree_expand_corner.png') > -1) { + newimg = 'js/phplayersmenu/menuimages/tree_collapse_corner.png'; + action = 1; + } else if (oldimg.indexOf('js/phplayersmenu/menuimages/tree_expand_corner_first.png') > -1) { + newimg = 'js/phplayersmenu/menuimages/tree_collapse_corner_first.png'; + action = 1; + } else if (oldimg.indexOf('js/phplayersmenu/menuimages/tree_collapse.png') > -1) { + newimg = 'js/phplayersmenu/menuimages/tree_expand.png'; + action = 2; + } else if (oldimg.indexOf('js/phplayersmenu/menuimages/tree_collapse_first.png') > -1) { + newimg = 'js/phplayersmenu/menuimages/tree_expand_first.png'; + action = 2; + } else if (oldimg.indexOf('js/phplayersmenu/menuimages/tree_collapse_corner.png') > -1) { + newimg = 'js/phplayersmenu/menuimages/tree_expand_corner.png'; + action = 2; + } else if (oldimg.indexOf('js/phplayersmenu/menuimages/tree_collapse_corner_first.png') > -1) { + newimg = 'js/phplayersmenu/menuimages/tree_expand_corner_first.png'; + action = 2; + } + nodeLayer.src = 'images/ajax-spinner.gif'; + + // perform action + if (action == 2) { + newstyle = 'none'; + updateNewStyle(); + addCollapsedNode(nodeid); + } else if (action == 1) { + newstyle = 'block'; + if (sonLayer.innerHTML == '') { + makeGETRequest('cmd.php', params+'&cmd=draw_tree_node&action=1', 'alertTreeNodeContents', 'cancelNewStyle'); + } else { + updateNewStyle(); + } + delCollapsedNode(nodeid); + } + return false; +} + +function getDiv(div) { + if (!IE4) { + return document.getElementById('aj'+div); + } else { + return document.all('aj'+div); + } +} + +function alertAJ(html,div) { + var pageDiv = getDiv(div); + if (pageDiv) includeHTML(pageDiv, html); +} + +function cancelAJ(div) { + var pageDiv = getDiv(div); + if (pageDiv) includeHTML(pageDiv, ''); +} + +function displayAJ(div,urlParameters,display) { + var pageDiv = getDiv(div); + if (pageDiv) + includeHTML(pageDiv, '
'+display+'...'); + else + return true; + + makeGETRequest('cmd.php', urlParameters+'&meth=ajax', 'alertAJ', 'cancelAJ',div); + return false; +} + +// close initial collapsed nodes +// Cant figure out why, but this runs twice in AJAX mode when using "refresh". +// Causing the collapsedNodes to be incorrect. +readCollapsedNodes(); +for (k = 0; k < collapsedNodes.length; k++) { + opencloseTreeNode(collapsedNodes[k], '#'); +} diff --git a/htdocs/js/entry_chooser.js b/htdocs/js/entry_chooser.js index 8a57b7b..b10f1c0 100644 --- a/htdocs/js/entry_chooser.js +++ b/htdocs/js/entry_chooser.js @@ -1,4 +1,4 @@ -// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/js/entry_chooser.js,v 1.3 2005/02/10 12:34:26 wurley Exp $ +// $Header$ function dnChooserPopup(form_element,rdn) { mywindow=open('entry_chooser.php','myname','resizable=no,width=600,height=370,scrollbars=1'); diff --git a/htdocs/js/jscalendar/calendar-blue2.css b/htdocs/js/jscalendar/calendar-blue2.css deleted file mode 100644 index 47128ec..0000000 --- a/htdocs/js/jscalendar/calendar-blue2.css +++ /dev/null @@ -1,236 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -div.calendar { position: relative; } - -.calendar, .calendar table { - border: 1px solid #206A9B; - font-size: 11px; - color: #000; - cursor: default; - background: #F1F8FC; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; /* They are the navigation buttons */ - padding: 2px; /* Make the buttons seem like they're pressing */ -} - -.calendar .nav { - background: #007ED1 url(menuarrow2.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; /* Pressing it will take you to the current date */ - text-align: center; - background: #000; - color: #fff; - padding: 2px; -} - -.calendar thead tr { /* Row containing navigation buttons */ - background: #007ED1; - color: #fff; -} - -.calendar thead .daynames { /* Row containing the day names */ - background: #C7E1F3; -} - -.calendar thead .name { /* Cells in footer (only one right now) */ - text-align: center; - background: #206A9B; - color: #fff; -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell containing navigation buttons */ - background: #edc; - color: #000; -} - -.calendar thead .name { /* Cells containing the day names */ - background: #fed; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells in footer (only one right now) */ - text-align: center; - background: #988; - color: #000; -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell containing navigation buttons */ -} - -.calendar thead .name { /* Cells containing the day names */ - background: #dfb; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells in footer (only one right now) */ - text-align: center; - background: #565; - color: #fff; -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell containing navigation buttons */ -} - -.calendar thead .daynames { /* Row containing the day names */ -} - -.calendar thead .name { /* Cells in footer (only one right now) */ -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell containing navigation buttons */ - /*background: #3B86A0;*/ - color: #363636; - font-weight: bold; -filter: -progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#3b86a0); -} - -.calendar thead .name { /* Cells containing the day names */ - background: #fed; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells in footer (only one right now) */ - text-align: center; - background: #988; - color: #000; - -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell containing navigation buttons */ -} - -.calendar thead .daynames { /* Row containing the day names */ -} - -.calendar thead .name { /* Cells in footer (only one right now) */ -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell containing navigation buttons */ -} - -.calendar thead .daynames { /* Row containing the day names */ -} - -.calendar thead .name { /* Cells in footer (only one right now) */ -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell containing navigation buttons */ -} - -.calendar thead .daynames { /* Row containing the day names */ -} - -.calendar thead .name { /* Cells in footer (only one right now) */ -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell containing navigation buttons */ -} - -.calendar thead .daynames { /* Row containing the day names */ -} - -.calendar thead .name { /* Cells in footer (only one right now) */ -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell
containing the day names */ - border-bottom: 1px solid #206A9B; - padding: 2px; - text-align: center; - color: #000; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #a66; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - background-color: #34ABFA; - color: #000; - border: 1px solid #016DC5; - padding: 1px; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - background-color: #006AA9; - border: 1px solid #008AFF; - padding: 2px 0px 0px 2px; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells containing month days dates */ - width: 2em; - color: #456; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #bbb; -} -.calendar tbody .day.othermonth.oweekend { - color: #fbb; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid #000; - background: #C7E1F3; -} - -.calendar tbody .rowhilite td { - background: #def; -} - -.calendar tbody .rowhilite td.wn { - background: #F1F8FC; -} - -.calendar tbody td.hilite { /* Hovered cells */ - background: #def; - padding: 1px 3px 1px 1px; - border: 1px solid #8FC4E8; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - background: #cde; - padding: 2px 2px 0px 2px; -} - -.calendar tbody td.selected { /* Cell showing today date */ - font-weight: bold; - border: 1px solid #000; - padding: 1px 3px 1px 1px; - background: #fff; - color: #000; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #a66; -} - -.calendar tbody td.today { /* Cell showing selected date */ - font-weight: bold; - color: #D50000; -} - -.calendar tbody .disabled { color: #999; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The
*/ - background: #000; - color: #fff; - border-top: 1px solid #206A9B; - padding: 1px; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - background: #B8DAF0; - border: 1px solid #178AEB; - color: #000; - padding: 1px; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - background: #006AA9; - padding: 2px 0px 0px 2px; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - top: 0px; - left: 0px; - width: 4em; - cursor: default; - border: 1px solid #655; - background: #def; - color: #000; - font-size: 90%; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .hilite { - background: #34ABFA; - border-top: 1px solid #46a; - border-bottom: 1px solid #46a; - font-weight: bold; -} - -.calendar .combo .active { - border-top: 1px solid #46a; - border-bottom: 1px solid #46a; - background: #F1F8FC; - font-weight: bold; -} - -.calendar td.time { - border-top: 1px solid #000; - padding: 1px 0px; - text-align: center; - background-color: #E3F0F9; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #889; - font-weight: bold; - background-color: #F1F8FC; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: #267DB7; - color: #fff; -} - -.calendar td.time span.active { - border-color: red; - background-color: #000; - color: #A5FF00; -} diff --git a/htdocs/js/jscalendar/calendar-brown.css b/htdocs/js/jscalendar/calendar-brown.css deleted file mode 100644 index c42da5e..0000000 --- a/htdocs/js/jscalendar/calendar-brown.css +++ /dev/null @@ -1,225 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -div.calendar { position: relative; } - -.calendar, .calendar table { - border: 1px solid #655; - font-size: 11px; - color: #000; - cursor: default; - background: #ffd; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; /* They are the navigation buttons */ - padding: 2px; /* Make the buttons seem like they're pressing */ -} - -.calendar .nav { - background: #edc url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; /* Pressing it will take you to the current date */ - text-align: center; - background: #654; - color: #fed; - padding: 2px; -} - -.calendar thead .headrow { /* Row
containing the day names */ - border-bottom: 1px solid #655; - padding: 2px; - text-align: center; - color: #000; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #f00; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - background-color: #faa; - color: #000; - border: 1px solid #f40; - padding: 1px; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - background-color: #c77; - padding: 2px 0px 0px 2px; -} - -.calendar thead .daynames { /* Row
containing month days dates */ - width: 2em; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #bbb; -} -.calendar tbody .day.othermonth.oweekend { - color: #fbb; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid #000; - background: #fed; -} - -.calendar tbody .rowhilite td { - background: #ddf; -} - -.calendar tbody .rowhilite td.wn { - background: #efe; -} - -.calendar tbody td.hilite { /* Hovered cells */ - background: #ffe; - padding: 1px 3px 1px 1px; - border: 1px solid #bbb; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - background: #ddc; - padding: 2px 2px 0px 2px; -} - -.calendar tbody td.selected { /* Cell showing today date */ - font-weight: bold; - border: 1px solid #000; - padding: 1px 3px 1px 1px; - background: #fea; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #f00; -} - -.calendar tbody td.today { font-weight: bold; } - -.calendar tbody .disabled { color: #999; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The
*/ - border-top: 1px solid #655; - background: #dcb; - color: #840; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - background: #faa; - border: 1px solid #f40; - padding: 1px; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - background: #c77; - padding: 2px 0px 0px 2px; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - top: 0px; - left: 0px; - width: 4em; - cursor: default; - border: 1px solid #655; - background: #ffe; - color: #000; - font-size: 90%; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .hilite { - background: #fc8; -} - -.calendar .combo .active { - border-top: 1px solid #a64; - border-bottom: 1px solid #a64; - background: #fee; - font-weight: bold; -} - -.calendar td.time { - border-top: 1px solid #a88; - padding: 1px 0px; - text-align: center; - background-color: #fed; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #988; - font-weight: bold; - background-color: #fff; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: #866; - color: #fff; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -} diff --git a/htdocs/js/jscalendar/calendar-green.css b/htdocs/js/jscalendar/calendar-green.css deleted file mode 100644 index 2e1867a..0000000 --- a/htdocs/js/jscalendar/calendar-green.css +++ /dev/null @@ -1,229 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -div.calendar { position: relative; } - -.calendar, .calendar table { - border: 1px solid #565; - font-size: 11px; - color: #000; - cursor: default; - background: #efe; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; /* They are the navigation buttons */ - padding: 2px; /* Make the buttons seem like they're pressing */ - background: #676; - color: #fff; - font-size: 90%; -} - -.calendar .nav { - background: #676 url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; /* Pressing it will take you to the current date */ - text-align: center; - padding: 2px; - background: #250; - color: #efa; -} - -.calendar thead .headrow { /* Row
containing the day names */ - border-bottom: 1px solid #565; - padding: 2px; - text-align: center; - color: #000; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #a66; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - background-color: #afa; - color: #000; - border: 1px solid #084; - padding: 1px; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - background-color: #7c7; - padding: 2px 0px 0px 2px; -} - -.calendar thead .daynames { /* Row
containing month days dates */ - width: 2em; - color: #564; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #bbb; -} -.calendar tbody .day.othermonth.oweekend { - color: #fbb; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid #8a8; - background: #dfb; -} - -.calendar tbody .rowhilite td { - background: #dfd; -} - -.calendar tbody .rowhilite td.wn { - background: #efe; -} - -.calendar tbody td.hilite { /* Hovered cells */ - background: #efd; - padding: 1px 3px 1px 1px; - border: 1px solid #bbb; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - background: #dec; - padding: 2px 2px 0px 2px; -} - -.calendar tbody td.selected { /* Cell showing today date */ - font-weight: bold; - border: 1px solid #000; - padding: 1px 3px 1px 1px; - background: #f8fff8; - color: #000; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #a66; -} - -.calendar tbody td.today { font-weight: bold; color: #0a0; } - -.calendar tbody .disabled { color: #999; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The
*/ - padding: 2px; - background: #250; - color: #efa; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - background: #afa; - border: 1px solid #084; - color: #000; - padding: 1px; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - background: #7c7; - padding: 2px 0px 0px 2px; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - top: 0px; - left: 0px; - width: 4em; - cursor: default; - border: 1px solid #565; - background: #efd; - color: #000; - font-size: 90%; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .hilite { - background: #af8; -} - -.calendar .combo .active { - border-top: 1px solid #6a4; - border-bottom: 1px solid #6a4; - background: #efe; - font-weight: bold; -} - -.calendar td.time { - border-top: 1px solid #8a8; - padding: 1px 0px; - text-align: center; - background-color: #dfb; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #898; - font-weight: bold; - background-color: #fff; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: #686; - color: #fff; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -} diff --git a/htdocs/js/jscalendar/calendar-setup.js b/htdocs/js/jscalendar/calendar-setup.js index 1409eff..c269f7d 100644 --- a/htdocs/js/jscalendar/calendar-setup.js +++ b/htdocs/js/jscalendar/calendar-setup.js @@ -19,7 +19,7 @@ * than modifying calendar.js itself). */ -// $Id: calendar-setup.js,v 1.2 2005/10/09 11:16:50 wurley Exp $ +// $Id$ /** * This function "patches" an input field (or other element) to use a calendar diff --git a/htdocs/js/jscalendar/calendar-setup_stripped.js b/htdocs/js/jscalendar/calendar-setup_stripped.js deleted file mode 100644 index 91c927f..0000000 --- a/htdocs/js/jscalendar/calendar-setup_stripped.js +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ - * --------------------------------------------------------------------------- - * - * The DHTML Calendar - * - * Details and latest version at: - * http://dynarch.com/mishoo/calendar.epl - * - * This script is distributed under the GNU Lesser General Public License. - * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html - * - * This file defines helper functions for setting up the calendar. They are - * intended to help non-programmers get a working calendar on their site - * quickly. This script should not be seen as part of the calendar. It just - * shows you what one can do with the calendar, while in the same time - * providing a quick and simple method for setting it up. If you need - * exhaustive customization of the calendar creation process feel free to - * modify this code to suit your needs (this is recommended and much better - * than modifying calendar.js itself). - */ - Calendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def;}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");return false;}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange();}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal);}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("Calendar.setup:\n Flat specified but can't find parent.");return false;}var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value);}cal.create(params.flat);cal.show();return false;}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&¶ms.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true;}else{if(params.date)cal.setDate(params.date);cal.hide();}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d;}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false;};return cal;}; \ No newline at end of file diff --git a/htdocs/js/jscalendar/calendar-system.css b/htdocs/js/jscalendar/calendar-system.css deleted file mode 100644 index b224885..0000000 --- a/htdocs/js/jscalendar/calendar-system.css +++ /dev/null @@ -1,251 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -.calendar { - position: relative; - display: none; - border: 1px solid; - border-color: #fff #000 #000 #fff; - font-size: 11px; - cursor: default; - background: Window; - color: WindowText; - font-family: tahoma,verdana,sans-serif; -} - -.calendar table { - border: 1px solid; - border-color: #fff #000 #000 #fff; - font-size: 11px; - cursor: default; - background: Window; - color: WindowText; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; - padding: 1px; - border: 1px solid; - border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; - background: ButtonFace; -} - -.calendar .nav { - background: ButtonFace url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; - padding: 1px; - border: 1px solid #000; - background: ActiveCaption; - color: CaptionText; - text-align: center; -} - -.calendar thead .headrow { /* Row
containing the day names */ - border-bottom: 1px solid ButtonShadow; - padding: 2px; - text-align: center; - background: ButtonFace; - color: ButtonText; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #f00; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - border: 2px solid; - padding: 0px; - border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - border-width: 1px; - padding: 2px 0px 0px 2px; - border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells containing month days dates */ - width: 2em; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #aaa; -} -.calendar tbody .day.othermonth.oweekend { - color: #faa; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid ButtonShadow; - background: ButtonFace; - color: ButtonText; -} - -.calendar tbody .rowhilite td { - background: Highlight; - color: HighlightText; -} - -.calendar tbody td.hilite { /* Hovered cells */ - padding: 1px 3px 1px 1px; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - padding: 2px 2px 0px 2px; - border: 1px solid; - border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; -} - -.calendar tbody td.selected { /* Cell showing selected date */ - font-weight: bold; - border: 1px solid; - border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; - padding: 2px 2px 0px 2px; - background: ButtonFace; - color: ButtonText; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #f00; -} - -.calendar tbody td.today { /* Cell showing today date */ - font-weight: bold; - color: #00f; -} - -.calendar tbody td.disabled { color: GrayText; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The
*/ - background: ButtonFace; - padding: 1px; - border: 1px solid; - border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; - color: ButtonText; - text-align: center; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - padding: 1px; - background: #e4e0d8; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - width: 4em; - top: 0px; - left: 0px; - cursor: default; - border: 1px solid; - border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; - background: Menu; - color: MenuText; - font-size: 90%; - padding: 1px; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .active { - padding: 0px; - border: 1px solid #000; -} - -.calendar .combo .hilite { - background: Highlight; - color: HighlightText; -} - -.calendar td.time { - border-top: 1px solid ButtonShadow; - padding: 1px 0px; - text-align: center; - background-color: ButtonFace; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #889; - font-weight: bold; - background-color: Menu; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: Highlight; - color: HighlightText; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -} diff --git a/htdocs/js/jscalendar/calendar-tas.css b/htdocs/js/jscalendar/calendar-tas.css deleted file mode 100644 index c2f8721..0000000 --- a/htdocs/js/jscalendar/calendar-tas.css +++ /dev/null @@ -1,239 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -div.calendar { position: relative; } - -.calendar, .calendar table { - border: 1px solid #655; - font-size: 11px; - color: #000; - cursor: default; - background: #ffd; - font-family: tahoma,verdana,sans-serif; - filter: -progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF); -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; /* They are the navigation buttons */ - padding: 2px; /* Make the buttons seem like they're pressing */ - color:#363636; -} - -.calendar .nav { - background: #edc url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; /* Pressing it will take you to the current date */ - text-align: center; - background: #654; - color: #363636; - padding: 2px; - filter: -progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#dddccc); -} - -.calendar thead .headrow { /* Row
containing the day names */ - border-bottom: 1px solid #655; - padding: 2px; - text-align: center; - color: #363636; - filter: -progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF); -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #f00; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - background-color: #ffcc86; - color: #000; - border: 1px solid #b59345; - padding: 1px; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - background-color: #c77; - padding: 2px 0px 0px 2px; -} - -.calendar thead .daynames { /* Row
containing month days dates */ - width: 2em; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #aaa; -} -.calendar tbody .day.othermonth.oweekend { - color: #faa; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid #000; - background: #fed; -} - -.calendar tbody .rowhilite td { - background: #ddf; - -} - -.calendar tbody .rowhilite td.wn { - background: #efe; -} - -.calendar tbody td.hilite { /* Hovered cells */ - background: #ffe; - padding: 1px 3px 1px 1px; - border: 1px solid #bbb; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - background: #ddc; - padding: 2px 2px 0px 2px; -} - -.calendar tbody td.selected { /* Cell showing today date */ - font-weight: bold; - border: 1px solid #000; - padding: 1px 3px 1px 1px; - background: #fea; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #f00; -} - -.calendar tbody td.today { font-weight: bold; } - -.calendar tbody .disabled { color: #999; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The
*/ - border-top: 1px solid #655; - background: #dcb; - color: #363636; - font-weight: bold; - filter: -progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#FFFFFF,EndColorStr=#DDDCCC); -} -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - background: #faa; - border: 1px solid #f40; - padding: 1px; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - background: #c77; - padding: 2px 0px 0px 2px; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.combo { - position: absolute; - display: none; - top: 0px; - left: 0px; - width: 4em; - cursor: default; - border: 1px solid #655; - background: #ffe; - color: #000; - font-size: smaller; - z-index: 100; -} - -.combo .label, -.combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.combo .label-IEfix { - width: 4em; -} - -.combo .hilite { - background: #fc8; -} - -.combo .active { - border-top: 1px solid #a64; - border-bottom: 1px solid #a64; - background: #fee; - font-weight: bold; -} - -.calendar td.time { - border-top: 1px solid #a88; - padding: 1px 0px; - text-align: center; - background-color: #fed; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #988; - font-weight: bold; - background-color: #fff; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: #866; - color: #fff; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -} diff --git a/htdocs/js/jscalendar/calendar-win2k-1.css b/htdocs/js/jscalendar/calendar-win2k-1.css deleted file mode 100644 index 8c5d026..0000000 --- a/htdocs/js/jscalendar/calendar-win2k-1.css +++ /dev/null @@ -1,271 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -.calendar { - position: relative; - display: none; - border-top: 2px solid #fff; - border-right: 2px solid #000; - border-bottom: 2px solid #000; - border-left: 2px solid #fff; - font-size: 11px; - color: #000; - cursor: default; - background: #d4d0c8; - font-family: tahoma,verdana,sans-serif; -} - -.calendar table { - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - font-size: 11px; - color: #000; - cursor: default; - background: #d4d0c8; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; - padding: 1px; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; -} - -.calendar .nav { - background: transparent url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; - padding: 1px; - border: 1px solid #000; - background: #848078; - color: #fff; - text-align: center; -} - -.calendar thead .headrow { /* Row
containing the day names */ - border-bottom: 1px solid #000; - padding: 2px; - text-align: center; - background: #f4f0e8; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #f00; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - border-top: 2px solid #fff; - border-right: 2px solid #000; - border-bottom: 2px solid #000; - border-left: 2px solid #fff; - padding: 0px; - background-color: #e4e0d8; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - background-color: #c4c0b8; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells containing month days dates */ - width: 2em; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #aaa; -} -.calendar tbody .day.othermonth.oweekend { - color: #faa; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid #000; - background: #f4f0e8; -} - -.calendar tbody .rowhilite td { - background: #e4e0d8; -} - -.calendar tbody .rowhilite td.wn { - background: #d4d0c8; -} - -.calendar tbody td.hilite { /* Hovered cells */ - padding: 1px 3px 1px 1px; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - padding: 2px 2px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -.calendar tbody td.selected { /* Cell showing selected date */ - font-weight: bold; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - padding: 2px 2px 0px 2px; - background: #e4e0d8; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #f00; -} - -.calendar tbody td.today { /* Cell showing today date */ - font-weight: bold; - color: #00f; -} - -.calendar tbody .disabled { color: #999; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The
*/ - background: #f4f0e8; - padding: 1px; - border: 1px solid #000; - background: #848078; - color: #fff; - text-align: center; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - padding: 1px; - background: #e4e0d8; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - width: 4em; - top: 0px; - left: 0px; - cursor: default; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - background: #e4e0d8; - font-size: 90%; - padding: 1px; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .active { - background: #c4c0b8; - padding: 0px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -.calendar .combo .hilite { - background: #048; - color: #fea; -} - -.calendar td.time { - border-top: 1px solid #000; - padding: 1px 0px; - text-align: center; - background-color: #f4f0e8; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #889; - font-weight: bold; - background-color: #fff; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: #766; - color: #fff; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -} diff --git a/htdocs/js/jscalendar/calendar-win2k-2.css b/htdocs/js/jscalendar/calendar-win2k-2.css deleted file mode 100644 index 6f37b7d..0000000 --- a/htdocs/js/jscalendar/calendar-win2k-2.css +++ /dev/null @@ -1,271 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -.calendar { - position: relative; - display: none; - border-top: 2px solid #fff; - border-right: 2px solid #000; - border-bottom: 2px solid #000; - border-left: 2px solid #fff; - font-size: 11px; - color: #000; - cursor: default; - background: #d4c8d0; - font-family: tahoma,verdana,sans-serif; -} - -.calendar table { - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - font-size: 11px; - color: #000; - cursor: default; - background: #d4c8d0; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; - padding: 1px; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; -} - -.calendar .nav { - background: transparent url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; - padding: 1px; - border: 1px solid #000; - background: #847880; - color: #fff; - text-align: center; -} - -.calendar thead .headrow { /* Row
containing the day names */ - border-bottom: 1px solid #000; - padding: 2px; - text-align: center; - background: #f4e8f0; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #f00; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - border-top: 2px solid #fff; - border-right: 2px solid #000; - border-bottom: 2px solid #000; - border-left: 2px solid #fff; - padding: 0px; - background-color: #e4d8e0; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - background-color: #c4b8c0; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells containing month days dates */ - width: 2em; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #aaa; -} -.calendar tbody .day.othermonth.oweekend { - color: #faa; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid #000; - background: #f4e8f0; -} - -.calendar tbody .rowhilite td { - background: #e4d8e0; -} - -.calendar tbody .rowhilite td.wn { - background: #d4c8d0; -} - -.calendar tbody td.hilite { /* Hovered cells */ - padding: 1px 3px 1px 1px; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - padding: 2px 2px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -.calendar tbody td.selected { /* Cell showing selected date */ - font-weight: bold; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - padding: 2px 2px 0px 2px; - background: #e4d8e0; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #f00; -} - -.calendar tbody td.today { /* Cell showing today date */ - font-weight: bold; - color: #00f; -} - -.calendar tbody .disabled { color: #999; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The
*/ - background: #f4e8f0; - padding: 1px; - border: 1px solid #000; - background: #847880; - color: #fff; - text-align: center; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - padding: 1px; - background: #e4d8e0; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - width: 4em; - top: 0px; - left: 0px; - cursor: default; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - background: #e4d8e0; - font-size: 90%; - padding: 1px; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .active { - background: #d4c8d0; - padding: 0px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -.calendar .combo .hilite { - background: #408; - color: #fea; -} - -.calendar td.time { - border-top: 1px solid #000; - padding: 1px 0px; - text-align: center; - background-color: #f4f0e8; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #889; - font-weight: bold; - background-color: #fff; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: #766; - color: #fff; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -} diff --git a/htdocs/js/jscalendar/calendar-win2k-cold-1.css b/htdocs/js/jscalendar/calendar-win2k-cold-1.css deleted file mode 100644 index fa5c093..0000000 --- a/htdocs/js/jscalendar/calendar-win2k-cold-1.css +++ /dev/null @@ -1,265 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -.calendar { - position: relative; - display: none; - border-top: 2px solid #fff; - border-right: 2px solid #000; - border-bottom: 2px solid #000; - border-left: 2px solid #fff; - font-size: 11px; - color: #000; - cursor: default; - background: #c8d0d4; - font-family: tahoma,verdana,sans-serif; -} - -.calendar table { - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - font-size: 11px; - color: #000; - cursor: default; - background: #c8d0d4; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; - padding: 1px; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; -} - -.calendar .nav { - background: transparent url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; - padding: 1px; - border: 1px solid #000; - background: #788084; - color: #fff; - text-align: center; -} - -.calendar thead .headrow { /* Row
containing the day names */ - border-bottom: 1px solid #000; - padding: 2px; - text-align: center; - background: #e8f0f4; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #f00; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - border-top: 2px solid #fff; - border-right: 2px solid #000; - border-bottom: 2px solid #000; - border-left: 2px solid #fff; - padding: 0px; - background-color: #d8e0e4; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - background-color: #b8c0c4; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells containing month days dates */ - width: 2em; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #aaa; -} -.calendar tbody .day.othermonth.oweekend { - color: #faa; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid #000; - background: #e8f4f0; -} - -.calendar tbody .rowhilite td { - background: #d8e4e0; -} - -.calendar tbody .rowhilite td.wn { - background: #c8d4d0; -} - -.calendar tbody td.hilite { /* Hovered cells */ - padding: 1px 3px 1px 1px; - border: 1px solid; - border-color: #fff #000 #000 #fff; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - padding: 2px 2px 0px 2px; - border: 1px solid; - border-color: #000 #fff #fff #000; -} - -.calendar tbody td.selected { /* Cell showing selected date */ - font-weight: bold; - padding: 2px 2px 0px 2px; - border: 1px solid; - border-color: #000 #fff #fff #000; - background: #d8e0e4; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #f00; -} - -.calendar tbody td.today { /* Cell showing today date */ - font-weight: bold; - color: #00f; -} - -.calendar tbody .disabled { color: #999; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The
*/ - background: #e8f0f4; - padding: 1px; - border: 1px solid #000; - background: #788084; - color: #fff; - text-align: center; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - padding: 1px; - background: #d8e0e4; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - width: 4em; - top: 0px; - left: 0px; - cursor: default; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - background: #d8e0e4; - font-size: 90%; - padding: 1px; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .active { - background: #c8d0d4; - padding: 0px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -.calendar .combo .hilite { - background: #048; - color: #aef; -} - -.calendar td.time { - border-top: 1px solid #000; - padding: 1px 0px; - text-align: center; - background-color: #e8f0f4; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #889; - font-weight: bold; - background-color: #fff; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: #667; - color: #fff; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -} diff --git a/htdocs/js/jscalendar/calendar-win2k-cold-2.css b/htdocs/js/jscalendar/calendar-win2k-cold-2.css deleted file mode 100644 index 8e930c8..0000000 --- a/htdocs/js/jscalendar/calendar-win2k-cold-2.css +++ /dev/null @@ -1,271 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -.calendar { - position: relative; - display: none; - border-top: 2px solid #fff; - border-right: 2px solid #000; - border-bottom: 2px solid #000; - border-left: 2px solid #fff; - font-size: 11px; - color: #000; - cursor: default; - background: #c8d4d0; - font-family: tahoma,verdana,sans-serif; -} - -.calendar table { - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - font-size: 11px; - color: #000; - cursor: default; - background: #c8d4d0; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; - padding: 1px; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; -} - -.calendar .nav { - background: transparent url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; - padding: 1px; - border: 1px solid #000; - background: #788480; - color: #fff; - text-align: center; -} - -.calendar thead .headrow { /* Row
containing the day names */ - border-bottom: 1px solid #000; - padding: 2px; - text-align: center; - background: #e8f4f0; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #f00; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - border-top: 2px solid #fff; - border-right: 2px solid #000; - border-bottom: 2px solid #000; - border-left: 2px solid #fff; - padding: 0px; - background-color: #d8e4e0; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - background-color: #b8c4c0; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells containing month days dates */ - width: 2em; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #aaa; -} -.calendar tbody .day.othermonth.oweekend { - color: #faa; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid #000; - background: #e8f4f0; -} - -.calendar tbody .rowhilite td { - background: #d8e4e0; -} - -.calendar tbody .rowhilite td.wn { - background: #c8d4d0; -} - -.calendar tbody td.hilite { /* Hovered cells */ - padding: 1px 3px 1px 1px; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; -} - -.calendar tbody td.active { /* Active (pressed) cells */ - padding: 2px 2px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -.calendar tbody td.selected { /* Cell showing selected date */ - font-weight: bold; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; - padding: 2px 2px 0px 2px; - background: #d8e4e0; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #f00; -} - -.calendar tbody td.today { /* Cell showing today date */ - font-weight: bold; - color: #00f; -} - -.calendar tbody .disabled { color: #999; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The
*/ - background: #e8f4f0; - padding: 1px; - border: 1px solid #000; - background: #788480; - color: #fff; - text-align: center; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - padding: 1px; - background: #d8e4e0; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - padding: 2px 0px 0px 2px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - width: 4em; - top: 0px; - left: 0px; - cursor: default; - border-top: 1px solid #fff; - border-right: 1px solid #000; - border-bottom: 1px solid #000; - border-left: 1px solid #fff; - background: #d8e4e0; - font-size: 90%; - padding: 1px; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .active { - background: #c8d4d0; - padding: 0px; - border-top: 1px solid #000; - border-right: 1px solid #fff; - border-bottom: 1px solid #fff; - border-left: 1px solid #000; -} - -.calendar .combo .hilite { - background: #048; - color: #aef; -} - -.calendar td.time { - border-top: 1px solid #000; - padding: 1px 0px; - text-align: center; - background-color: #e8f0f4; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #889; - font-weight: bold; - background-color: #fff; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: #667; - color: #fff; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -} diff --git a/htdocs/js/jscalendar/calendar.js b/htdocs/js/jscalendar/calendar.js index 1db8351..f6c1398 100644 --- a/htdocs/js/jscalendar/calendar.js +++ b/htdocs/js/jscalendar/calendar.js @@ -12,7 +12,7 @@ * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html */ -// $Id: calendar.js,v 1.2 2005/10/09 11:16:50 wurley Exp $ +// $Id$ /** The Calendar object constructor. */ Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) { diff --git a/htdocs/js/jscalendar/calendar.php b/htdocs/js/jscalendar/calendar.php deleted file mode 100644 index 5b9120d..0000000 --- a/htdocs/js/jscalendar/calendar.php +++ /dev/null @@ -1,119 +0,0 @@ -calendar_file = 'calendar_stripped.js'; - $this->calendar_setup_file = 'calendar-setup_stripped.js'; - } else { - $this->calendar_file = 'calendar.js'; - $this->calendar_setup_file = 'calendar-setup.js'; - } - $this->calendar_lang_file = 'lang/calendar-' . $lang . '.js'; - $this->calendar_theme_file = $theme.'.css'; - $this->calendar_lib_path = preg_replace('/\/+$/', '/', $calendar_lib_path); - $this->calendar_options = array('ifFormat' => '%Y/%m/%d', - 'daFormat' => '%Y/%m/%d'); - } - - function set_option($name, $value) { - $this->calendar_options[$name] = $value; - } - - function load_files() { - echo $this->get_load_files_code(); - } - - function get_load_files_code() { - $code = ( '' . NEWLINE ); - $code .= ( '' . NEWLINE ); - $code .= ( '' . NEWLINE ); - $code .= ( '' ); - return $code; - } - - function _make_calendar($other_options = array()) { - $js_options = $this->_make_js_hash(array_merge($this->calendar_options, $other_options)); - $code = ( '' ); - return $code; - } - - function make_input_field($cal_options = array(), $field_attributes = array()) { - $id = $this->_gen_id(); - $attrstr = $this->_make_html_attr(array_merge($field_attributes, - array('id' => $this->_field_id($id), - 'type' => 'text'))); - echo ''; - echo '' . - ''; - - $options = array_merge($cal_options, - array('inputField' => $this->_field_id($id), - 'button' => $this->_trigger_id($id))); - echo $this->_make_calendar($options); - } - - /// PRIVATE SECTION - - function _field_id($id) { return 'f-calendar-field-' . $id; } - function _trigger_id($id) { return 'f-calendar-trigger-' . $id; } - function _gen_id() { static $id = 0; return ++$id; } - - function _make_js_hash($array) { - $jstr = ''; - reset($array); - while (list($key, $val) = each($array)) { - if (is_bool($val)) - $val = $val ? 'true' : 'false'; - else if (!is_numeric($val)) - $val = '"'.$val.'"'; - if ($jstr) $jstr .= ','; - $jstr .= '"' . $key . '":' . $val; - } - return $jstr; - } - - function _make_html_attr($array) { - $attrstr = ''; - reset($array); - while (list($key, $val) = each($array)) { - $attrstr .= $key . '="' . $val . '" '; - } - return $attrstr; - } -}; - -?> \ No newline at end of file diff --git a/htdocs/js/jscalendar/calendar_stripped.js b/htdocs/js/jscalendar/calendar_stripped.js deleted file mode 100644 index 4fe03f1..0000000 --- a/htdocs/js/jscalendar/calendar_stripped.js +++ /dev/null @@ -1,14 +0,0 @@ -/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo - * ----------------------------------------------------------- - * - * The DHTML Calendar, version 1.0 "It is happening again" - * - * Details and latest version at: - * www.dynarch.com/projects/calendar - * - * This script is developed by Dynarch.com. Visit us at www.dynarch.com. - * - * This script is distributed under the GNU Lesser General Public License. - * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html - */ - Calendar=function(firstDayOfWeek,dateStr,onSelected,onClose){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=onSelected||null;this.onClose=onClose||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=Calendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof firstDayOfWeek=="number"?firstDayOfWeek:Calendar._FD;this.showsOtherMonths=false;this.dateStr=dateStr;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined")Calendar._SDN_len=3;var ar=new Array();for(var i=8;i>0;){ar[--i]=Calendar._DN[i].substr(0,Calendar._SDN_len);}Calendar._SDN=ar;if(typeof Calendar._SMN_len=="undefined")Calendar._SMN_len=3;ar=new Array();for(var i=12;i>0;){ar[--i]=Calendar._MN[i].substr(0,Calendar._SMN_len);}Calendar._SMN=ar;}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(el){var SL=0,ST=0;var is_div=/^div$/i.test(el.tagName);if(is_div&&el.scrollLeft)SL=el.scrollLeft;if(is_div&&el.scrollTop)ST=el.scrollTop;var r={x:el.offsetLeft-SL,y:el.offsetTop-ST};if(el.offsetParent){var tmp=this.getAbsolutePos(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;}return r;};Calendar.isRelated=function(el,evt){var related=evt.relatedTarget;if(!related){var type=evt.type;if(type=="mouseover"){related=evt.fromElement;}else if(type=="mouseout"){related=evt.toElement;}}while(related){if(related==el){return true;}related=related.parentNode;}return false;};Calendar.removeClass=function(el,className){if(!(el&&el.className)){return;}var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i];}}el.className=ar.join(" ");};Calendar.addClass=function(el,className){Calendar.removeClass(el,className);el.className+=" "+className;};Calendar.getElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.currentTarget;while(f.nodeType!=1||/^div$/i.test(f.tagName))f=f.parentNode;return f;};Calendar.getTargetElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.target;while(f.nodeType!=1)f=f.parentNode;return f;};Calendar.stopEvent=function(ev){ev||(ev=window.event);if(Calendar.is_ie){ev.cancelBubble=true;ev.returnValue=false;}else{ev.preventDefault();ev.stopPropagation();}return false;};Calendar.addEvent=function(el,evname,func){if(el.attachEvent){el.attachEvent("on"+evname,func);}else if(el.addEventListener){el.addEventListener(evname,func,true);}else{el["on"+evname]=func;}};Calendar.removeEvent=function(el,evname,func){if(el.detachEvent){el.detachEvent("on"+evname,func);}else if(el.removeEventListener){el.removeEventListener(evname,func,true);}else{el["on"+evname]=null;}};Calendar.createElement=function(type,parent){var el=null;if(document.createElementNS){el=document.createElementNS("http://www.w3.org/1999/xhtml",type);}else{el=document.createElement(type);}if(typeof parent!="undefined"){parent.appendChild(el);}return el;};Calendar._add_evs=function(el){with(Calendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true);}}};Calendar.findMonth=function(el){if(typeof el.month!="undefined"){return el;}else if(typeof el.parentNode.month!="undefined"){return el.parentNode;}return null;};Calendar.findYear=function(el){if(typeof el.year!="undefined"){return el;}else if(typeof el.parentNode.year!="undefined"){return el.parentNode;}return null;};Calendar.showMonthsCombo=function(){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var mc=cal.monthsCombo;if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}if(cal.activeMonth){Calendar.removeClass(cal.activeMonth,"active");}var mon=cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];Calendar.addClass(mon,"active");cal.activeMonth=mon;var s=mc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var mcw=mc.offsetWidth;if(typeof mcw=="undefined")mcw=50;s.left=(cd.offsetLeft+cd.offsetWidth-mcw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";};Calendar.showYearsCombo=function(fwd){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var yc=cal.yearsCombo;if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}if(cal.activeYear){Calendar.removeClass(cal.activeYear,"active");}cal.activeYear=null;var Y=cal.date.getFullYear()+(fwd?1:-1);var yr=yc.firstChild;var show=false;for(var i=12;i>0;--i){if(Y>=cal.minYear&&Y<=cal.maxYear){yr.innerHTML=Y;yr.year=Y;yr.style.display="block";show=true;}else{yr.style.display="none";}yr=yr.nextSibling;Y+=fwd?cal.yearStep:-cal.yearStep;}if(show){var s=yc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var ycw=yc.offsetWidth;if(typeof ycw=="undefined")ycw=50;s.left=(cd.offsetLeft+cd.offsetWidth-ycw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";}};Calendar.tableMouseUp=function(ev){var cal=Calendar._C;if(!cal){return false;}if(cal.timeout){clearTimeout(cal.timeout);}var el=cal.activeDiv;if(!el){return false;}var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev);}var mon=Calendar.findMonth(target);var date=null;if(mon){date=new Date(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}else{var year=Calendar.findYear(target);if(year){date=new Date(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}}with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev);}};Calendar.tableMouseOver=function(ev){var cal=Calendar._C;if(!cal){return;}var el=cal.activeDiv;var target=Calendar.getTargetElement(ev);if(target==el||target.parentNode==el){Calendar.addClass(el,"hilite active");Calendar.addClass(el.parentNode,"rowhilite");}else{if(typeof el.navtype=="undefined"||(el.navtype!=50&&(el.navtype==0||Math.abs(el.navtype)>2)))Calendar.removeClass(el,"active");Calendar.removeClass(el,"hilite");Calendar.removeClass(el.parentNode,"rowhilite");}ev||(ev=window.event);if(el.navtype==50&&target!=el){var pos=Calendar.getAbsolutePos(el);var w=el.offsetWidth;var x=ev.clientX;var dx;var decrease=true;if(x>pos.x+w){dx=x-pos.x-w;decrease=false;}else dx=pos.x-x;if(dx<0)dx=0;var range=el._range;var current=el._current;var count=Math.floor(dx/10)%range.length;for(var i=range.length;--i>=0;)if(range[i]==current)break;while(count-->0)if(decrease){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();}var mon=Calendar.findMonth(target);if(mon){if(mon.month!=cal.date.getMonth()){if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}Calendar.addClass(mon,"hilite");cal.hilitedMonth=mon;}else if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}}else{if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}var year=Calendar.findYear(target);if(year){if(year.year!=cal.date.getFullYear()){if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}Calendar.addClass(year,"hilite");cal.hilitedYear=year;}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}return Calendar.stopEvent(ev);};Calendar.tableMouseDown=function(ev){if(Calendar.getTargetElement(ev)==Calendar.getElement(ev)){return Calendar.stopEvent(ev);}};Calendar.calDragIt=function(ev){var cal=Calendar._C;if(!(cal&&cal.dragging)){return false;}var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posX=ev.pageX;posY=ev.pageY;}cal.hideShowCovered();var st=cal.element.style;st.left=(posX-cal.xOffs)+"px";st.top=(posY-cal.yOffs)+"px";return Calendar.stopEvent(ev);};Calendar.calDragEnd=function(ev){var cal=Calendar._C;if(!cal){return false;}cal.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev);}cal.hideShowCovered();};Calendar.dayMouseDown=function(ev){var el=Calendar.getElement(ev);if(el.disabled){return false;}var cal=el.calendar;cal.activeDiv=el;Calendar._C=cal;if(el.navtype!=300)with(Calendar){if(el.navtype==50){el._current=el.innerHTML;addEvent(document,"mousemove",tableMouseOver);}else addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",tableMouseOver);addClass(el,"hilite active");addEvent(document,"mouseup",tableMouseUp);}else if(cal.isPopup){cal._dragStart(ev);}if(el.navtype==-1||el.navtype==1){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout("Calendar.showMonthsCombo()",250);}else if(el.navtype==-2||el.navtype==2){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout((el.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250);}else{cal.timeout=null;}return Calendar.stopEvent(ev);};Calendar.dayMouseDblClick=function(ev){Calendar.cellClick(Calendar.getElement(ev),ev||window.event);if(Calendar.is_ie){document.selection.empty();}};Calendar.dayMouseOver=function(ev){var el=Calendar.getElement(ev);if(Calendar.isRelated(el,ev)||Calendar._C||el.disabled){return false;}if(el.ttip){if(el.ttip.substr(0,1)=="_"){el.ttip=el.caldate.print(el.calendar.ttDateFormat)+el.ttip.substr(1);}el.calendar.tooltips.innerHTML=el.ttip;}if(el.navtype!=300){Calendar.addClass(el,"hilite");if(el.caldate){Calendar.addClass(el.parentNode,"rowhilite");}}return Calendar.stopEvent(ev);};Calendar.dayMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled)return false;removeClass(el,"hilite");if(el.caldate)removeClass(el.parentNode,"rowhilite");if(el.calendar)el.calendar.tooltips.innerHTML=_TT["SEL_DATE"];return stopEvent(ev);}};Calendar.cellClick=function(el,ev){var cal=el.calendar;var closing=false;var newdate=false;var date=null;if(typeof el.navtype=="undefined"){if(cal.currentDateEl){Calendar.removeClass(cal.currentDateEl,"selected");Calendar.addClass(el,"selected");closing=(cal.currentDateEl==el);if(!closing){cal.currentDateEl=el;}}cal.date.setDateOnly(el.caldate);date=cal.date;var other_month=!(cal.dateClicked=!el.otherMonth);if(!other_month&&!cal.currentDateEl)cal._toggleMultipleDate(new Date(date));else newdate=!el.disabled;if(other_month)cal._init(cal.firstDayOfWeek,date);}else{if(el.navtype==200){Calendar.removeClass(el,"hilite");cal.callCloseHandler();return;}date=new Date(cal.date);if(el.navtype==0)date.setDateOnly(new Date());cal.dateClicked=false;var year=date.getFullYear();var mon=date.getMonth();function setMonth(m){var day=date.getDate();var max=date.getMonthDays(m);if(day>max){date.setDate(max);}date.setMonth(m);};switch(el.navtype){case 400:Calendar.removeClass(el,"hilite");var text=Calendar._TT["ABOUT"];if(typeof text!="undefined"){text+=cal.showsTime?Calendar._TT["ABOUT_TIME"]:"";}else{text="Help and about box text is not translated into this language.\n"+"If you know this language and you feel generous please update\n"+"the corresponding file in \"lang\" subdir to match calendar-en.js\n"+"and send it back to to get it into the distribution ;-)\n\n"+"Thank you!\n"+"http://dynarch.com/mishoo/calendar.epl\n";}alert(text);return;case-2:if(year>cal.minYear){date.setFullYear(year-1);}break;case-1:if(mon>0){setMonth(mon-1);}else if(year-->cal.minYear){date.setFullYear(year);setMonth(11);}break;case 1:if(mon<11){setMonth(mon+1);}else if(year=0;)if(range[i]==current)break;if(ev&&ev.shiftKey){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();return;case 0:if((typeof cal.getDateStatus=="function")&&cal.getDateStatus(date,date.getFullYear(),date.getMonth(),date.getDate())){return false;}break;}if(!date.equalsTo(cal.date)){cal.setDate(date);newdate=true;}else if(el.navtype==0)newdate=closing=true;}if(newdate){ev&&cal.callHandler();}if(closing){Calendar.removeClass(el,"hilite");ev&&cal.callCloseHandler();}};Calendar.prototype.create=function(_par){var parent=null;if(!_par){parent=document.getElementsByTagName("body")[0];this.isPopup=true;}else{parent=_par;this.isPopup=false;}this.date=this.dateStr?new Date(this.dateStr):new Date();var table=Calendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;Calendar.addEvent(table,"mousedown",Calendar.tableMouseDown);var div=Calendar.createElement("div");this.element=div;div.className="calendar";if(this.isPopup){div.style.position="absolute";div.style.display="none";}div.appendChild(table);var thead=Calendar.createElement("thead",table);var cell=null;var row=null;var cal=this;var hh=function(text,cs,navtype){cell=Calendar.createElement("td",row);cell.colSpan=cs;cell.className="button";if(navtype!=0&&Math.abs(navtype)<=2)cell.className+=" nav";Calendar._add_evs(cell);cell.calendar=cal;cell.navtype=navtype;cell.innerHTML="
"+text+"
";return cell;};row=Calendar.createElement("tr",thead);var title_length=6;(this.isPopup)&&--title_length;(this.weekNumbers)&&++title_length;hh("?",1,400).ttip=Calendar._TT["INFO"];this.title=hh("",title_length,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";hh("×",1,200).ttip=Calendar._TT["CLOSE"];}row=Calendar.createElement("tr",thead);row.className="headrow";this._nav_py=hh("«",1,-2);this._nav_py.ttip=Calendar._TT["PREV_YEAR"];this._nav_pm=hh("‹",1,-1);this._nav_pm.ttip=Calendar._TT["PREV_MONTH"];this._nav_now=hh(Calendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT["GO_TODAY"];this._nav_nm=hh("›",1,1);this._nav_nm.ttip=Calendar._TT["NEXT_MONTH"];this._nav_ny=hh("»",1,2);this._nav_ny.ttip=Calendar._TT["NEXT_YEAR"];row=Calendar.createElement("tr",thead);row.className="daynames";if(this.weekNumbers){cell=Calendar.createElement("td",row);cell.className="name wn";cell.innerHTML=Calendar._TT["WK"];}for(var i=7;i>0;--i){cell=Calendar.createElement("td",row);if(!i){cell.navtype=100;cell.calendar=this;Calendar._add_evs(cell);}}this.firstdayname=(this.weekNumbers)?row.firstChild.nextSibling:row.firstChild;this._displayWeekdays();var tbody=Calendar.createElement("tbody",table);this.tbody=tbody;for(i=6;i>0;--i){row=Calendar.createElement("tr",tbody);if(this.weekNumbers){cell=Calendar.createElement("td",row);}for(var j=7;j>0;--j){cell=Calendar.createElement("td",row);cell.calendar=this;Calendar._add_evs(cell);}}if(this.showsTime){row=Calendar.createElement("tr",tbody);row.className="time";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;cell.innerHTML=Calendar._TT["TIME"]||" ";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=this.weekNumbers?4:3;(function(){function makeTimePart(className,init,range_start,range_end){var part=Calendar.createElement("span",cell);part.className=className;part.innerHTML=init;part.calendar=cal;part.ttip=Calendar._TT["TIME_PART"];part.navtype=50;part._range=[];if(typeof range_start!="number")part._range=range_start;else{for(var i=range_start;i<=range_end;++i){var txt;if(i<10&&range_end>=10)txt='0'+i;else txt=''+i;part._range[part._range.length]=txt;}}Calendar._add_evs(part);return part;};var hrs=cal.date.getHours();var mins=cal.date.getMinutes();var t12=!cal.time24;var pm=(hrs>12);if(t12&&pm)hrs-=12;var H=makeTimePart("hour",hrs,t12?1:0,t12?12:23);var span=Calendar.createElement("span",cell);span.innerHTML=":";span.className="colon";var M=makeTimePart("minute",mins,0,59);var AP=null;cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;if(t12)AP=makeTimePart("ampm",pm?"pm":"am",["am","pm"]);else cell.innerHTML=" ";cal.onSetTime=function(){var pm,hrs=this.date.getHours(),mins=this.date.getMinutes();if(t12){pm=(hrs>=12);if(pm)hrs-=12;if(hrs==0)hrs=12;AP.innerHTML=pm?"pm":"am";}H.innerHTML=(hrs<10)?("0"+hrs):hrs;M.innerHTML=(mins<10)?("0"+mins):mins;};cal.onUpdateTime=function(){var date=this.date;var h=parseInt(H.innerHTML,10);if(t12){if(/pm/i.test(AP.innerHTML)&&h<12)h+=12;else if(/am/i.test(AP.innerHTML)&&h==12)h=0;}var d=date.getDate();var m=date.getMonth();var y=date.getFullYear();date.setHours(h);date.setMinutes(parseInt(M.innerHTML,10));date.setFullYear(y);date.setMonth(m);date.setDate(d);this.dateClicked=false;this.callHandler();};})();}else{this.onSetTime=this.onUpdateTime=function(){};}var tfoot=Calendar.createElement("tfoot",table);row=Calendar.createElement("tr",tfoot);row.className="footrow";cell=hh(Calendar._TT["SEL_DATE"],this.weekNumbers?8:7,300);cell.className="ttip";if(this.isPopup){cell.ttip=Calendar._TT["DRAG_TO_MOVE"];cell.style.cursor="move";}this.tooltips=cell;div=Calendar.createElement("div",this.element);this.monthsCombo=div;div.className="combo";for(i=0;i0;--i){var yr=Calendar.createElement("div");yr.className=Calendar.is_ie?"label-IEfix":"label";div.appendChild(yr);}this._init(this.firstDayOfWeek,this.date);parent.appendChild(this.element);};Calendar._keyEvent=function(ev){var cal=window._dynarch_popupCalendar;if(!cal||cal.multiple)return false;(Calendar.is_ie)&&(ev=window.event);var act=(Calendar.is_ie||ev.type=="keypress"),K=ev.keyCode;if(ev.ctrlKey){switch(K){case 37:act&&Calendar.cellClick(cal._nav_pm);break;case 38:act&&Calendar.cellClick(cal._nav_py);break;case 39:act&&Calendar.cellClick(cal._nav_nm);break;case 40:act&&Calendar.cellClick(cal._nav_ny);break;default:return false;}}else switch(K){case 32:Calendar.cellClick(cal._nav_now);break;case 27:act&&cal.callCloseHandler();break;case 37:case 38:case 39:case 40:if(act){var prev,x,y,ne,el,step;prev=K==37||K==38;step=(K==37||K==39)?1:7;function setVars(){el=cal.currentDateEl;var p=el.pos;x=p&15;y=p>>4;ne=cal.ar_days[y][x];};setVars();function prevMonth(){var date=new Date(cal.date);date.setDate(date.getDate()-step);cal.setDate(date);};function nextMonth(){var date=new Date(cal.date);date.setDate(date.getDate()+step);cal.setDate(date);};while(1){switch(K){case 37:if(--x>=0)ne=cal.ar_days[y][x];else{x=6;K=38;continue;}break;case 38:if(--y>=0)ne=cal.ar_days[y][x];else{prevMonth();setVars();}break;case 39:if(++x<7)ne=cal.ar_days[y][x];else{x=0;K=40;continue;}break;case 40:if(++ythis.maxYear){year=this.maxYear;date.setFullYear(year);}this.firstDayOfWeek=firstDayOfWeek;this.date=new Date(date);var month=date.getMonth();var mday=date.getDate();var no_days=date.getMonthDays();date.setDate(1);var day1=(date.getDay()-this.firstDayOfWeek)%7;if(day1<0)day1+=7;date.setDate(-day1);date.setDate(date.getDate()+1);var row=this.tbody.firstChild;var MN=Calendar._SMN[month];var ar_days=this.ar_days=new Array();var weekend=Calendar._TT["WEEKEND"];var dates=this.multiple?(this.datesCells={}):null;for(var i=0;i<6;++i,row=row.nextSibling){var cell=row.firstChild;if(this.weekNumbers){cell.className="day wn";cell.innerHTML=date.getWeekNumber();cell=cell.nextSibling;}row.className="daysrow";var hasdays=false,iday,dpos=ar_days[i]=[];for(var j=0;j<7;++j,cell=cell.nextSibling,date.setDate(iday+1)){iday=date.getDate();var wday=date.getDay();cell.className="day";cell.pos=i<<4|j;dpos[j]=cell;var current_month=(date.getMonth()==month);if(!current_month){if(this.showsOtherMonths){cell.className+=" othermonth";cell.otherMonth=true;}else{cell.className="emptycell";cell.innerHTML=" ";cell.disabled=true;continue;}}else{cell.otherMonth=false;hasdays=true;}cell.disabled=false;cell.innerHTML=this.getDateText?this.getDateText(date,iday):iday;if(dates)dates[date.print("%Y%m%d")]=cell;if(this.getDateStatus){var status=this.getDateStatus(date,year,month,iday);if(this.getDateToolTip){var toolTip=this.getDateToolTip(date,year,month,iday);if(toolTip)cell.title=toolTip;}if(status===true){cell.className+=" disabled";cell.disabled=true;}else{if(/disabled/i.test(status))cell.disabled=true;cell.className+=" "+status;}}if(!cell.disabled){cell.caldate=new Date(date);cell.ttip="_";if(!this.multiple&¤t_month&&iday==mday&&this.hiliteToday){cell.className+=" selected";this.currentDateEl=cell;}if(date.getFullYear()==TY&&date.getMonth()==TM&&iday==TD){cell.className+=" today";cell.ttip+=Calendar._TT["PART_TODAY"];}if(weekend.indexOf(wday.toString())!=-1)cell.className+=cell.otherMonth?" oweekend":" weekend";}}if(!(hasdays||this.showsOtherMonths))row.className="emptyrow";}this.title.innerHTML=Calendar._MN[month]+", "+year;this.onSetTime();this.table.style.visibility="visible";this._initMultipleDates();};Calendar.prototype._initMultipleDates=function(){if(this.multiple){for(var i in this.multiple){var cell=this.datesCells[i];var d=this.multiple[i];if(!d)continue;if(cell)cell.className+=" selected";}}};Calendar.prototype._toggleMultipleDate=function(date){if(this.multiple){var ds=date.print("%Y%m%d");var cell=this.datesCells[ds];if(cell){var d=this.multiple[ds];if(!d){Calendar.addClass(cell,"selected");this.multiple[ds]=date;}else{Calendar.removeClass(cell,"selected");delete this.multiple[ds];}}}};Calendar.prototype.setDateToolTipHandler=function(unaryFunction){this.getDateToolTip=unaryFunction;};Calendar.prototype.setDate=function(date){if(!date.equalsTo(this.date)){this._init(this.firstDayOfWeek,date);}};Calendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date);};Calendar.prototype.setFirstDayOfWeek=function(firstDayOfWeek){this._init(firstDayOfWeek,this.date);this._displayWeekdays();};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(unaryFunction){this.getDateStatus=unaryFunction;};Calendar.prototype.setRange=function(a,z){this.minYear=a;this.maxYear=z;};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat));}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this);}this.hideShowCovered();};Calendar.prototype.destroy=function(){var el=this.element.parentNode;el.removeChild(this.element);Calendar._C=null;window._dynarch_popupCalendar=null;};Calendar.prototype.reparent=function(new_parent){var el=this.element;el.parentNode.removeChild(el);new_parent.appendChild(el);};Calendar._checkCalendar=function(ev){var calendar=window._dynarch_popupCalendar;if(!calendar){return false;}var el=Calendar.is_ie?Calendar.getElement(ev):Calendar.getTargetElement(ev);for(;el!=null&&el!=calendar.element;el=el.parentNode);if(el==null){window._dynarch_popupCalendar.callCloseHandler();return Calendar.stopEvent(ev);}};Calendar.prototype.show=function(){var rows=this.table.getElementsByTagName("tr");for(var i=rows.length;i>0;){var row=rows[--i];Calendar.removeClass(row,"rowhilite");var cells=row.getElementsByTagName("td");for(var j=cells.length;j>0;){var cell=cells[--j];Calendar.removeClass(cell,"hilite");Calendar.removeClass(cell,"active");}}this.element.style.display="block";this.hidden=false;if(this.isPopup){window._dynarch_popupCalendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar);}this.hideShowCovered();};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar);}this.element.style.display="none";this.hidden=true;this.hideShowCovered();};Calendar.prototype.showAt=function(x,y){var s=this.element.style;s.left=x+"px";s.top=y+"px";this.show();};Calendar.prototype.showAtElement=function(el,opts){var self=this;var p=Calendar.getAbsolutePos(el);if(!opts||typeof opts!="string"){this.showAt(p.x,p.y+el.offsetHeight);return true;}function fixPosition(box){if(box.x<0)box.x=0;if(box.y<0)box.y=0;var cp=document.createElement("div");var s=cp.style;s.position="absolute";s.right=s.bottom=s.width=s.height="0px";document.body.appendChild(cp);var br=Calendar.getAbsolutePos(cp);document.body.removeChild(cp);if(Calendar.is_ie){br.y+=document.body.scrollTop;br.x+=document.body.scrollLeft;}else{br.y+=window.scrollY;br.x+=window.scrollX;}var tmp=box.x+box.width-br.x;if(tmp>0)box.x-=tmp;tmp=box.y+box.height-br.y;if(tmp>0)box.y-=tmp;};this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var w=self.element.offsetWidth;var h=self.element.offsetHeight;self.element.style.display="none";var valign=opts.substr(0,1);var halign="l";if(opts.length>1){halign=opts.substr(1,1);}switch(valign){case "T":p.y-=h;break;case "B":p.y+=el.offsetHeight;break;case "C":p.y+=(el.offsetHeight-h)/2;break;case "t":p.y+=el.offsetHeight-h;break;case "b":break;}switch(halign){case "L":p.x-=w;break;case "R":p.x+=el.offsetWidth;break;case "C":p.x+=(el.offsetWidth-w)/2;break;case "l":p.x+=el.offsetWidth-w;break;case "r":break;}p.width=w;p.height=h+40;self.monthsCombo.style.display="none";fixPosition(p);self.showAt(p.x,p.y);};if(Calendar.is_khtml)setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else Calendar.continuation_for_the_fucking_khtml_browser();};Calendar.prototype.setDateFormat=function(str){this.dateFormat=str;};Calendar.prototype.setTtDateFormat=function(str){this.ttDateFormat=str;};Calendar.prototype.parseDate=function(str,fmt){if(!fmt)fmt=this.dateFormat;this.setDate(Date.parseDate(str,fmt));};Calendar.prototype.hideShowCovered=function(){if(!Calendar.is_ie&&!Calendar.is_opera)return;function getVisib(obj){var value=obj.style.visibility;if(!value){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml)value=document.defaultView. getComputedStyle(obj,"").getPropertyValue("visibility");else value='';}else if(obj.currentStyle){value=obj.currentStyle.visibility;}else value='';}return value;};var tags=new Array("applet","iframe","select");var el=this.element;var p=Calendar.getAbsolutePos(el);var EX1=p.x;var EX2=el.offsetWidth+EX1;var EY1=p.y;var EY2=el.offsetHeight+EY1;for(var k=tags.length;k>0;){var ar=document.getElementsByTagName(tags[--k]);var cc=null;for(var i=ar.length;i>0;){cc=ar[--i];p=Calendar.getAbsolutePos(cc);var CX1=p.x;var CX2=cc.offsetWidth+CX1;var CY1=p.y;var CY2=cc.offsetHeight+CY1;if(this.hidden||(CX1>EX2)||(CX2EY2)||(CY229)?1900:2000);break;case "%b":case "%B":for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break;}}break;case "%H":case "%I":case "%k":case "%l":hr=parseInt(a[i],10);break;case "%P":case "%p":if(/pm/i.test(a[i])&&hr<12)hr+=12;else if(/am/i.test(a[i])&&hr>=12)hr-=12;break;case "%M":min=parseInt(a[i],10);break;}}if(isNaN(y))y=today.getFullYear();if(isNaN(m))m=today.getMonth();if(isNaN(d))d=today.getDate();if(isNaN(hr))hr=today.getHours();if(isNaN(min))min=today.getMinutes();if(y!=0&&m!=-1&&d!=0)return new Date(y,m,d,hr,min,0);y=0;m=-1;d=0;for(i=0;i31&&y==0){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);}else if(d==0){d=a[i];}}if(y==0)y=today.getFullYear();if(m!=-1&&d!=0)return new Date(y,m,d,hr,min,0);return today;};Date.prototype.getMonthDays=function(month){var year=this.getFullYear();if(typeof month=="undefined"){month=this.getMonth();}if(((0==(year%4))&&((0!=(year%100))||(0==(year%400))))&&month==1){return 29;}else{return Date._MD[month];}};Date.prototype.getDayOfYear=function(){var now=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var then=new Date(this.getFullYear(),0,0,0,0,0);var time=now-then;return Math.floor(time/Date.DAY);};Date.prototype.getWeekNumber=function(){var d=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var DoW=d.getDay();d.setDate(d.getDate()-(DoW+6)%7+3);var ms=d.valueOf();d.setMonth(0);d.setDate(4);return Math.round((ms-d.valueOf())/(7*864e5))+1;};Date.prototype.equalsTo=function(date){return((this.getFullYear()==date.getFullYear())&&(this.getMonth()==date.getMonth())&&(this.getDate()==date.getDate())&&(this.getHours()==date.getHours())&&(this.getMinutes()==date.getMinutes()));};Date.prototype.setDateOnly=function(date){var tmp=new Date(date);this.setDate(1);this.setFullYear(tmp.getFullYear());this.setMonth(tmp.getMonth());this.setDate(tmp.getDate());};Date.prototype.print=function(str){var m=this.getMonth();var d=this.getDate();var y=this.getFullYear();var wn=this.getWeekNumber();var w=this.getDay();var s={};var hr=this.getHours();var pm=(hr>=12);var ir=(pm)?(hr-12):hr;var dy=this.getDayOfYear();if(ir==0)ir=12;var min=this.getMinutes();var sec=this.getSeconds();s["%a"]=Calendar._SDN[w];s["%A"]=Calendar._DN[w];s["%b"]=Calendar._SMN[m];s["%B"]=Calendar._MN[m];s["%C"]=1+Math.floor(y/100);s["%d"]=(d<10)?("0"+d):d;s["%e"]=d;s["%H"]=(hr<10)?("0"+hr):hr;s["%I"]=(ir<10)?("0"+ir):ir;s["%j"]=(dy<100)?((dy<10)?("00"+dy):("0"+dy)):dy;s["%k"]=hr;s["%l"]=ir;s["%m"]=(m<9)?("0"+(1+m)):(1+m);s["%M"]=(min<10)?("0"+min):min;s["%n"]="\n";s["%p"]=pm?"PM":"AM";s["%P"]=pm?"pm":"am";s["%s"]=Math.floor(this.getTime()/1000);s["%S"]=(sec<10)?("0"+sec):sec;s["%t"]="\t";s["%U"]=s["%W"]=s["%V"]=(wn<10)?("0"+wn):wn;s["%u"]=w+1;s["%w"]=w;s["%y"]=(''+y).substr(2,2);s["%Y"]=y;s["%%"]="%";var re=/%./g;if(!Calendar.is_ie5&&!Calendar.is_khtml)return str.replace(re,function(par){return s[par]||par;});var a=str.match(re);for(var i=0;i (PEARification) // Martin Jansen (PEAR conformance) // -// $Id: PHPLIB.php,v 1.3 2006/09/17 06:22:04 wurley Exp $ +// $Id$ // //require_once "PEAR.php"; diff --git a/htdocs/js/pla_ajax.js b/htdocs/js/pla_ajax.js index 9e20296..2eeaea0 100644 --- a/htdocs/js/pla_ajax.js +++ b/htdocs/js/pla_ajax.js @@ -1,4 +1,4 @@ -// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/js/pla_ajax.js,v 1.2 2007/12/15 07:50:31 wurley Exp $ +// $Header$ /** * @package phpLDAPadmin @@ -7,6 +7,7 @@ */ // current request +var http_div = ''; var http_request = null; var http_request_success_callback = ''; var http_request_error_callback = ''; @@ -46,7 +47,7 @@ function alertHttpRequest() { http_request = null; //alert(response); if (http_request_success_callback) { - eval(http_request_success_callback + '(response)'); + eval(http_request_success_callback + '(response,http_div)'); } } else { alert('There was a problem with the request.'); @@ -59,31 +60,33 @@ function cancelHttpRequest() { if (http_request) { http_request = null; if (http_request_error_callback) { - eval(http_request_error_callback + '()'); + eval(http_request_error_callback + '(http_div)'); } } } -// resquest -function makeGETRequest(url, parameters, successCallbackFunctionName, errorCallbackFunctionName) { - makeHttpRequest(url, parameters, 'GET', successCallbackFunctionName, errorCallbackFunctionName); +// request +function makeGETRequest(url,parameters,successCallbackFunctionName,errorCallbackFunctionName,div) { + makeHttpRequest(url,parameters,'GET',successCallbackFunctionName,errorCallbackFunctionName,div); } -function makePOSTRequest(url, parameters, successCallbackFunctionName, errorCallbackFunctionName) { - makeHttpRequest(url, parameters, 'POST', successCallbackFunctionName, errorCallbackFunctionName); +function makePOSTRequest(url,parameters,successCallbackFunctionName,errorCallbackFunctionName,div) { + makeHttpRequest(url,parameters,'POST',successCallbackFunctionName,errorCallbackFunctionName,div); } -function makeHttpRequest(url, parameters, meth, successCallbackFunctionName, errorCallbackFunctionName) { - cancelHttpRequest(); +function makeHttpRequest(url,parameters,meth,successCallbackFunctionName,errorCallbackFunctionName,div) { + cancelHttpRequest(div); http_request_success_callback = successCallbackFunctionName; http_request_error_callback = errorCallbackFunctionName; + http_div = div; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/html'); } + } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); diff --git a/htdocs/js/search_util.js b/htdocs/js/search_util.js index f099b42..205ee94 100644 --- a/htdocs/js/search_util.js +++ b/htdocs/js/search_util.js @@ -3,7 +3,7 @@ // This JavaScript file defines some functions used by the two search forms for // auto-populating the base DN dynamically when a server is selected from the // drop-down. -// $Header: /cvsroot/phpldapadmin/phpldapadmin/htdocs/js/search_util.js,v 1.2 2004/03/19 20:17:51 i18phpldapadmin Exp $ +// $Header$ //the array to store the server var servers = new Array(); diff --git a/htdocs/js/templaterender.js b/htdocs/js/templaterender.js new file mode 100644 index 0000000..9b904eb --- /dev/null +++ b/htdocs/js/templaterender.js @@ -0,0 +1,84 @@ +function pla_getComponentById(id) { + return document.getElementById(id); +} + +function pla_getComponentsByName(name) { + return document.getElementsByName(name); +} + +function pla_getComponentValue(component) { + if (component.type == "checkbox") { + if (component.checked) return component.value; + } else if (component.type == "select-one") { + if (component.selectedIndex >= 0) return component.options[component.selectedIndex].value; + } else if (component.type == "select-multiple") { + if (component.selectedIndex >= 0) return component.options[component.selectedIndex].value; + } else if (component.type == undefined) { // option + if (component.selected) return component.value; + } else { + return component.value; + } + return ""; +} + +function pla_setComponentValue(component,value) { + if (component.type == "checkbox") { + if (component.value == value) component.checked = true; + else component.checked = false; + } else if (component.type == "select-one") { + for (var i = 0; i < component.options.length; i++) { + if (component.options[i].value == value) component.options[i].selected = true; + } + } else if (component.type == "select-multiple") { + for (var i = 0; i < component.options.length; i++) { + if (component.options[i].value == value) component.options[i].selected = true; + } + } else if (component.type == undefined) { // option + if (component.value == value) component.selected = true; + else component.selected = false; + } else { + component.value = value; + } +} + +function getAttributeComponents(prefix,name) { + var components = new Array(); + var i = 0; + var j = 0; + var c = pla_getComponentsByName(prefix + "_values[" + name + "][" + j + "]"); + while (c && (c.length > 0)) { + for (var k = 0; k < c.length; k++) { + components[i++] = c[k]; + } + ++j; + c = pla_getComponentsByName(prefix + "_values[" + name + "][" + j + "]"); + } + c = pla_getComponentsByName(prefix + "_values[" + name + "][]"); + if (c && (c.length > 0)) { + for (var k = 0; k < c.length; k++) { + components[i++] = c[k]; + } + } + return components; +} + +function getAttributeValues(prefix,name) { + var components = getAttributeComponents(prefix,name); + var values = new Array(); + for (var k = 0; k < components.length; k++) { + var val = pla_getComponentValue(components[k]); + if (val) values[values.length] = val; + } + return values; +} + +function submitForm(form) { + for (var i = 0; i < form.elements.length; i++) { + form.elements[i].blur(); + } + return validateForm(true); +} + +function alertError(err,silence) { + if (!silence) alert(err); +} diff --git a/htdocs/js/tree_hide.js b/htdocs/js/tree_hide.js index cbf94c0..3d73a9d 100644 --- a/htdocs/js/tree_hide.js +++ b/htdocs/js/tree_hide.js @@ -2,13 +2,13 @@ var current; function tree_unhide(whichLayer,old) { if (current == null) current = old; - var oldtree = document.getElementById('SID_'+current).style; + var oldtree = document.getElementById('ajSID_'+current).style; oldtree.display = 'none'; if (document.getElementById) { // this is the way the standards work var newtree = document.getElementById(whichLayer).value; - var newtree_div = document.getElementById('SID_'+newtree).style; + var newtree_div = document.getElementById('ajSID_'+newtree).style; newtree_div.display = 'block'; /* diff --git a/htdocs/ldif_import.php b/htdocs/ldif_import.php deleted file mode 100644 index 50d6b40..0000000 --- a/htdocs/ldif_import.php +++ /dev/null @@ -1,202 +0,0 @@ -isCommandAvailable('import')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('import')),'error','index.php'); - -$entry = array(); -$entry['continuous_mode'] = get_request('continuous_mode') ? true : false; -$entry['ldif'] = get_request('ldif'); - -if ($entry['ldif']) { - $entry['remote_file'] = 'STDIN'; - $entry['size'] = strlen($entry['ldif']); - -} elseif (isset($_FILES['ldif_file'])) { - $file = $_FILES['ldif_file']['tmp_name']; - $entry['remote_file'] = $_FILES['ldif_file']['name']; - $entry['size'] = $_FILES['ldif_file']['size']; - - if (! is_array($_FILES['ldif_file'])) { - error(_('Missing uploaded file.'),'error'); - return; - } - if (! file_exists($file)) { - error(_('No LDIF file specified. Please try again.'),'error'); - return; - } - if ($entry['size'] <= 0) { - error(_('Uploaded LDIF file is empty.'),'error'); - return; - } - -} else { - error(_('You must either upload a file or provide an LDIF in the text box.'),'error'); - return; -} - -printf('

%s

',_('Import LDIF File')); -printf('

%s: %s %s: %s (%s %s)

', - _('Server'),htmlspecialchars($ldapserver->name), - _('File'),htmlspecialchars($entry['remote_file']),number_format($entry['size']),_('bytes')); -echo '

'; - -require LIBDIR.'ldif_functions.php'; -@set_time_limit(0); - -# String associated to the operation on the ldap server -$actionString = array(); -$actionString['add'] = _('Adding...'); -$actionString['delete'] = _('Deleting...'); -$actionString['modrdn'] = _('Renaming...'); -$actionString['moddn'] = _('Renaming...'); -$actionString['modify'] = _('Modifying...'); - -# String associated with error -$actionErrorMsg =array(); -$actionErrorMsg['add'] = _('Could not add object:'); -$actionErrorMsg['delete']= _('Could not delete object:'); -$actionErrorMsg['modrdn']= _('Could not rename object:'); -$actionErrorMsg['moddn']= _('Could not rename object:'); -$actionErrorMsg['modify']= _('Could not modify object:'); - -# instantiate the reader -if (isset($entry['ldif'])) - $ldifReader = new LdifReaderStdIn($entry['ldif'],$entry['continuous_mode']); -else - $ldifReader = new LdifReader($file,$entry['continuous_mode']); - -# instantiate the writer -$ldapWriter = new LdapWriter($ldapserver); - -# if ldif file has no version number, just display a warning -if (!$ldifReader->hasVersionNumber()) - display_warning($ldifReader->getWarningMessage()); - -$i=0; -# if .. else not mandatory but should be easier to maintain -if ($entry['continuous_mode']) { - while ($ldifReader->readEntry()) { - $i++; - - # get the entry. - $currentEntry = $ldifReader->fetchEntryObject(); - $edit_href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$ldapserver->server_id, - rawurlencode($currentEntry->dn)); - $changeType = $currentEntry->getChangeType(); - printf('%s %s',$actionString[$changeType],$edit_href,$currentEntry->dn); - - if ($ldifReader->hasRaisedException()) { - printf(' %s
',_('Failed')); - $exception = $ldifReader->getLdapLdifReaderException(); - printf(' %s: %s
', - _('Line Number'),$exception->lineNumber); - printf(' %s: %s
', - _('Line'),$exception->currentLine); - printf(' %s: %s
', - _('Description'),$exception->message); - - } else { - if ($ldapWriter->ldapModify($currentEntry)) - printf(' %s
',_('Success')); - else { - printf(' %s
',_('Failed')); - printf(' %s: %s
', - _('Error code'),$ldapserver->errno()); - printf(' %s: %s
', - _('Description'),$ldapserver->error()); - } - } - } # end while - -} else { - # while we have a valid entry, - while ($entry = $ldifReader->readEntry()) { - $i++; - - $edit_href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$ldapserver->server_id, - rawurlencode($entry->dn)); - $changeType = $entry->getChangeType(); - printf('%s %s',$actionString[$changeType],$edit_href,$entry->dn); - - if ($ldapWriter->ldapModify($entry)) { - printf(' %s
',_('Success')); - - } else { - printf(' %s

',_('Failed')); - $ldap_err_no = ('0x'.str_pad(dechex($ldapserver->errno()),2,0,STR_PAD_LEFT)); - $verbose_error = pla_verbose_error($ldap_err_no); - - $errormsg = sprintf('%s %s',$actionErrorMsg[$changeType],htmlspecialchars($entry->dn)); - $errormsg .= sprintf('
%s: %s',_('LDAP said'),$verbose_error['title']); - $errormsg .= sprintf('
%s',$verbose_error['desc']); - system_message(array( - 'title'=>_('LDIF text import'), - 'body'=>$errormsg, - 'type'=>'warn')); - - break; - } - } - - # if any errors occurs during reading file ,"catch" the exception and display it here. - if ($ldifReader->hasRaisedException()) { - # get the entry which raise the exception,quick hack here - $currentEntry = $ldifReader->fetchEntryObject(); - - if ($currentEntry->dn != '') { - printf('%s %s %s
', - $actionString[$currentEntry->getChangeType()],$currentEntry->dn,_('Failed')); - } - - # get the exception wich was raised - $exception = $ldifReader->getLdapLdifReaderException(); - echo '

'; - display_pla_parse_error($exception,$currentEntry); - } -} - -# close the file -$ldifReader->done(); - -function display_warning($warning){ - printf('
%s
',$warning); -} - -function display_pla_parse_error($exception,$faultyEntry) { - global $actionErrorMsg; - - $errorMessage = $actionErrorMsg[$faultyEntry->getChangeType()]; - - echo '
'; - printf('',IMGDIR); - echo ''; - echo ''; - echo '
'; -} -?> diff --git a/htdocs/login.php b/htdocs/login.php index a1ea2ba..8fae806 100644 --- a/htdocs/login.php +++ b/htdocs/login.php @@ -1,167 +1,39 @@ getLoginAttr()); -$login['pass'] = get_request('login_pass'); +$user = array(); +$user['login'] = get_request('login'); +$user['password'] = get_request('login_pass'); -if ($ldapserver->isAnonBindAllowed()) - $anon_bind = get_request('anonymous_bind') == 'on' ? true : false; -else - $anon_bind = false; - -if (! $anon_bind && ! strlen($login['pass'])) +if ($user['login'] && ! strlen($user['password'])) system_message(array( 'title'=>_('Authenticate to server'), 'body'=>_('You left the password blank.'), 'type'=>'warn'), - sprintf('cmd.php?cmd=login_form&server_id=%s',$ldapserver->server_id)); + sprintf('cmd.php?cmd=login_form&server_id=%s',get_request('server_id','REQUEST'))); -$save_auth_type = $ldapserver->auth_type; - -if ($anon_bind) { - if (DEBUG_ENABLED) - debug_log('Anonymous Login was posted [%s].',64,__FILE__,__LINE__,__METHOD__,$anon_bind); - - $login['dn'] = null; - $login['pass'] = null; - -/* Checks if the login_attr option is enabled for this host, - which allows users to login with a simple username like 'jdoe' rather - than the fully qualified DN, 'uid=jdoe,ou=people,,dc=example,dc=com'. */ -} elseif ($ldapserver->isLoginAttrEnabled()) { - - # Is this a login string (printf-style) - if ($ldapserver->isLoginStringEnabled()) { - $login['dn'] = str_replace('',$login['val'],$ldapserver->getLoginString()); - - if (DEBUG_ENABLED) - debug_log('LoginStringDN: [%s]',64,__FILE__,__LINE__,__METHOD__,$login['dn']); - - } else { - # This is a standard login_attr - - /* Fake the auth_type of config to do searching. This way, the admin can specify - the DN to use when searching for the login_attr user. */ - $ldapserver->auth_type = 'config'; - - if ($ldapserver->login_dn) - $ldapserver->connect(); - else - $ldapserver->connect(true,'anonymous'); - - if (! empty($ldapserver->login_class)) - $filter = sprintf('(&(objectClass=%s)(%s=%s))',$ldapserver->login_class,$ldapserver->getLoginAttr(),$login['val']); - else - $filter = sprintf('%s=%s',$ldapserver->getLoginAttr(),$login['val']); - - # Got through each of the BASE DNs and test the login. - foreach ($ldapserver->getBaseDN() as $base_dn) { - if (DEBUG_ENABLED) - debug_log('Searching LDAP with base [%s]',64,__FILE__,__LINE__,__METHOD__,$base_dn); - - $result = $ldapserver->search(null,$base_dn,$filter,array('dn')); - $result = array_pop($result); - $login['dn'] = $result['dn']; - - if ($login['dn']) { - if (DEBUG_ENABLED) - debug_log('Got DN [%s] for user ID [%s]',64,__FILE__,__LINE__,__METHOD__,$login['dn'],$login['val']); - break; - } - } - - # If we got here then we werent able to find a DN for the login filter. - if (! $login['dn']) - if ($ldapserver->login_fallback_dn) - $login['dn'] = $login['val']; - else - system_message(array( - 'title'=>_('Authenticate to server'), - 'body'=>_('Bad username or password. Please try again.'), - 'type'=>'error'), - sprintf('cmd.php?cmd=login_form&server_id=%s',$ldapserver->server_id)); - - # Restore the original auth_type - $ldapserver->auth_type = $save_auth_type; - } - -} else { - $login['dn'] = $login['val']; -} - -# We fake a 'config' server auth_type to omit duplicated code -if (DEBUG_ENABLED) - debug_log('Setting login type to CONFIG with DN [%s]',64,__FILE__,__LINE__,__METHOD__,$login['dn']); - -$save_auth_type = $ldapserver->auth_type; -$ldapserver->auth_type = 'config'; -$ldapserver->login_dn = $login['dn']; -$ldapserver->login_pass = $login['pass']; - -# Verify that dn is allowed to login -if (! $ldapserver->userIsAllowedLogin($login['dn'])) +if ($app['server']->login($user['login'],$user['password'],'user')) system_message(array( 'title'=>_('Authenticate to server'), - 'body'=>_('Sorry, you are not allowed to use phpLDAPadmin with this LDAP server.'), - 'type'=>'error'), - sprintf('cmd.php?cmd=login_form&server_id=%s',$ldapserver->server_id)); - -if (DEBUG_ENABLED) - debug_log('User is not prohibited from logging in - now bind with DN [%s]',64,__FILE__,__LINE__,__METHOD__,$login['dn']); - -# Verify that the login is good -if (is_null($login['dn']) && is_null($login['pass'])) - $ds = $ldapserver->connect(false,'anonymous',true); + 'body'=>_('Successfully logged into server.'), + 'type'=>'info'), + sprintf('cmd.php?server_id=%s',get_request('server_id','REQUEST'))); else - $ds = $ldapserver->connect(false,'user',true); - -if (DEBUG_ENABLED) - debug_log('Connection returned [%s]',64,__FILE__,__LINE__,__METHOD__,$ds); - -if (! is_resource($ds)) { - if ($anon_bind) - system_message(array( - 'title'=>_('Authenticate to server'), - 'body'=>_('Could not bind anonymously to server.'), - 'type'=>'error'), - sprintf('cmd.php?cmd=login_form&server_id=%s',$ldapserver->server_id)); - - else - system_message(array( - 'title'=>_('Authenticate to server'), - 'body'=>_('Bad username or password. Please try again.'), - 'type'=>'error'), - sprintf('cmd.php?cmd=login_form&server_id=%s',$ldapserver->server_id)); - - syslog_notice(sprintf('Authentification FAILED for %s',$login['dn'])); -} - -$ldapserver->auth_type = $save_auth_type; -$ldapserver->setLoginDN($login['dn'],$login['pass'],$anon_bind) or error(_('Could not set cookie.'),'error','index.php'); -set_lastactivity($ldapserver); - -if (! $anon_bind) { - syslog_notice(sprintf('Authentification successful for %s',$login['dn'])); -} - -# Since we were successful, clear the cache so that it will be refreshed with the new creditentials. -del_cached_item($ldapserver->server_id,'tree','null'); - -system_message(array( - 'title'=>_('Authenticate to server'), - 'body'=>_('Successfully logged into server.').($anon_bind ? sprintf(' (%s)',_('Anonymous Bind')) : ''), - 'type'=>'info'), - sprintf('index.php?server_id=%s',$ldapserver->server_id)); + system_message(array( + 'title'=>_('Failed to Authenticate to server'), + 'body'=>_('Invalid Username or Password.'), + 'type'=>'error'), + sprintf('cmd.php?cmd=login_form&server_id=%s',get_request('server_id','REQUEST'))); ?> diff --git a/htdocs/login_form.php b/htdocs/login_form.php index fcb6f87..e8e02ca 100644 --- a/htdocs/login_form.php +++ b/htdocs/login_form.php @@ -1,26 +1,24 @@ auth_type, array('cookie','session'))) - error(sprintf(_('Unknown auth_type: %s'),htmlspecialchars($ldapserver->auth_type)),'error','index.php'); - -printf('

%s %s

',_('Authenticate to server'),$ldapserver->name); +printf('

%s %s

',_('Authenticate to server'),$app['server']->getName()); +echo '
'; # Check for a secure connection if (! isset($_SERVER['HTTPS']) || strtolower($_SERVER['HTTPS']) != 'on') { - echo '
'; echo '
'; echo ''; printf('%s: %s.', @@ -28,13 +26,13 @@ if (! isset($_SERVER['HTTPS']) || strtolower($_SERVER['HTTPS']) != 'on') { _('Warning'),_('This web connection is unencrypted')); echo ''; echo '
'; - echo '
'; } +echo '
'; # Login form. echo ''; echo ''; -printf('',$ldapserver->server_id); +printf('',$app['server']->getIndex()); if (get_request('redirect','GET',false,false)) printf('',rawurlencode(get_request('redirect','GET'))); @@ -43,11 +41,11 @@ echo '
'; echo '
'; - printf('

%s

',_('LDIF Parse Error')); - echo '
'; - printf('%s %s',$errorMessage,$faultyEntry->dn); - printf('

%s: %s

',_('Description'),$exception->message); - printf('

%s: %s

',_('Line'),$exception->currentLine); - printf('

%s: %s

',_('Line Number'),$exception->lineNumber); - echo '
'; - printf('

%s %s

', - _('Is this a phpLDAPadmin bug?'),sprintf(_('If so, please report it.'),get_href('add_bug'))); - - echo '
'; printf('', - $ldapserver->login_attr == 'dn' ? _('Login DN') : $_SESSION[APPCONFIG]->getFriendlyName($ldapserver->login_attr)); + $app['server']->getValue('login','auth_text') ? $app['server']->getValue('login','auth_text') : + ($app['server']->getValue('login','attr') == 'dn' ? _('Login DN') : $_SESSION[APPCONFIG]->getFriendlyName($app['server']->getValue('login','attr')))); -printf('', - $ldapserver->login_attr, - $ldapserver->login_attr == 'dn' ? $ldapserver->login_dn : ''); +printf('', + $app['server']->getValue('login','attr') == 'dn' ? $app['server']->getValue('login','bind_id') : ''); echo ''; printf('',_('Password')); @@ -55,7 +53,7 @@ echo '', _('Anonymous')); @@ -68,19 +66,20 @@ echo ''; echo ''; -if( $ldapserver->isAnonBindAllowed() ) { ?> +if ($app['server']->isAnonBindAllowed() ) { +?> - diff --git a/htdocs/logout.php b/htdocs/logout.php index 39e6101..284b336 100644 --- a/htdocs/logout.php +++ b/htdocs/logout.php @@ -1,37 +1,28 @@ haveAuthInfo()) - error(_('No one is logged in to that server.'),'error','index.php'); - -if (in_array($ldapserver->auth_type, array('cookie','session','http'))) { - syslog_notice (sprintf('Logout for %s',$ldapserver->getLoggedInDN())); - if($ldapserver->auth_type!='http') - $ldapserver->unsetLoginDN() or error(_('Could not logout.'),'error','index.php'); - unset_lastactivity($ldapserver); - - @session_destroy(); - -} else - error(sprintf(_('Unknown auth_type: %s'),htmlspecialchars($ldapserver->auth_type)),'error','index.php'); - -system_message(array( - 'title'=>_('Logout'), - 'body'=>('Logged out successfully from server.'), - 'type'=>'info'), - sprintf('index.php?server_id=%s',$ldapserver->server_id)); +if ($app['server']->logout()) + system_message(array( + 'title'=>_('Authenticate to server'), + 'body'=>_('Successfully logged out of server.'), + 'type'=>'info'), + sprintf('index.php?server_id=%s',$app['server']->getIndex())); +else + system_message(array( + 'title'=>_('Failed to Logout of server'), + 'body'=>_('Please report this error to the admins.'), + 'type'=>'error'), + sprintf('index.php?server_id=%s',$app['server']->getIndex())); ?> diff --git a/htdocs/mass_delete.php b/htdocs/mass_delete.php index 81dfa48..36a4bcf 100644 --- a/htdocs/mass_delete.php +++ b/htdocs/mass_delete.php @@ -1,5 +1,5 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); -if (! $ldapserver->haveAuthInfo()) - error(_('Not enough information to login to server. Please check your configuration.'),'error','index.php'); +# The DN we are working with +$request = array(); +$request['dn'] = get_request('dn','GET'); +$request['attr'] = get_request('attr','GET'); -$attr = get_request('attr','GET'); -$dn = get_request('dn','GET'); -$encoded_dn = rawurlencode($dn); -$encoded_attr = rawurlencode($attr); +$request['page'] = new TemplateRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setDN($request['dn']); +$request['page']->accept(true); +$request['template'] = $request['page']->getTemplate(); -if (! is_null($dn)) - $rdn = get_rdn($dn); +if (! is_null($request['dn'])) + $rdn = get_rdn($request['dn']); else $rdn = null; # Get all current group members -$current_members = $ldapserver->getDNAttr($dn,$attr); -if ($current_members) - $num_current_members = (is_array($current_members) ? count($current_members) : 1); -else - $num_current_members = 0; - +$current_members = $app['server']->getDNAttrValue($request['dn'],$request['attr']); usort($current_members,'pla_compare_dns'); # Loop through all base dn's and search possible member entries -foreach ($ldapserver->getBaseDN() as $base_dn) { +$query = array(); - # Get all entries that can be added to the group +# Get all entries that can be added to the group +if (preg_match("/^".$request['attr']."$/i",$_SESSION[APPCONFIG]->getValue('modify_member','posixgroupattr'))) { + $query['filter'] = $_SESSION[APPCONFIG]->getValue('modify_member','posixfilter'); + $attr = $_SESSION[APPCONFIG]->getValue('modify_member','posixattr'); - if (preg_match("/^$attr$/i",$_SESSION[APPCONFIG]->GetValue('modify_member','posixgroupattr'))) - $possible_values = array_merge($ldapserver->search(null,$base_dn, - $_SESSION[APPCONFIG]->GetValue('modify_member','posixfilter'), - array($_SESSION[APPCONFIG]->GetValue('modify_member','posixattr')))); - else - $possible_values = array_merge($ldapserver->search(null,$base_dn, - $_SESSION[APPCONFIG]->GetValue('modify_member','filter'), - array($_SESSION[APPCONFIG]->GetValue('modify_member','attr')))); +} else { + $query['filter'] = $_SESSION[APPCONFIG]->getValue('modify_member','filter'); + $attr = $_SESSION[APPCONFIG]->getValue('modify_member','attr'); } -if ($possible_values) - $num_possible_values = (is_array($possible_values) ? count($possible_values) : 1); -else - $num_possible_values = 0; +$query['attrs'] = array($attr); -sort($possible_values); +$possible_values = array(); +foreach ($app['server']->getBaseDN() as $base) { + $query['base'] = $base; -include './header.php'; + $possible_values = array_merge($possible_values,$app['server']->query($query,null)); +} -echo ''; -printf('

%s %s

',_('Modify group'),htmlspecialchars($rdn)); +usort($possible_values,'pla_compare_dns'); -printf('

%s %s     %s: %s

', - _('Server'),$ldapserver->name,_('Distinguished Name'),htmlspecialchars($dn)); +$request['page']->drawTitle(sprintf('%s %s',_('Modify group'),get_rdn($request['dn']))); +$request['page']->drawSubTitle(); printf('%s %s %s %s:', - _('There are'),$num_current_members,_('members in group'),htmlspecialchars($rdn)); + _('There are'),count($current_members),_('members in group'),htmlspecialchars(get_rdn($request['dn']))); $possible_members = array(); -for ($i=0; $iGetValue('modify_member','posixgroupattr'))) - $possible_members[$i] = $possible_values[$i][$_SESSION[APPCONFIG]->GetValue('modify_member','posixattr')]; +for ($i=0;$igetValue('modify_member','posixgroupattr'))) + $possible_members[$i] = $possible_values[$i][$_SESSION[APPCONFIG]->getValue('modify_member','posixattr')]; else - $possible_members[$i] = $possible_values[$i][$_SESSION[APPCONFIG]->GetValue('modify_member','attr')]; + $possible_members[$i] = $possible_values[$i][$_SESSION[APPCONFIG]->getValue('modify_member','attr')]; } +# Show only user that are not already in group. +$possible_members = array_diff($possible_members,$current_members); usort($possible_members,'pla_compare_dns'); -/* - * Show only user that are not already in group. - * This loop removes existing users from possible members - */ -foreach ($possible_members as $pkey => $possible) { - foreach ($current_members as $current) { - if (preg_match("/^$current$/i","$possible_members[$pkey]")) { - unset($possible_members[$pkey]); - break; - } - } -} - -/* - * Draw form with select boxes, left for all possible members and - * right one for those that belong to group - */ +/* Draw form with select boxes, left for all possible members and + * right one for those that belong to group */ # Modifications will be sent to update_confirm which takes care of rest of the processing echo '
'; echo '
'; echo '
'; -echo ''; +if ($_SESSION[APPCONFIG]->getValue('confirm','update')) + echo ''; +else + echo ''; echo '
%s:
 
%s:
%s
'; @@ -153,28 +131,25 @@ echo ''; echo ''; echo '
'; # Hidden attributes for update_confirm.php -printf('',$ldapserver->server_id); -printf('',$dn); -printf('',$encoded_attr); +printf('',$app['server']->getIndex()); +printf('',rawurlencode($request['dn'])); +printf('',$request['attr']); -/* - * Generate array of input text boxes from current members. - * update_confirm.php will see this as old_values[member-attribute][item] - */ -for ($i=0; $i<$num_current_members; $i++) +/* Generate array of input text boxes from current members. + * update_confirm.php will see this as old_values[member-attribute][item] */ +for ($i=0; $i', - htmlspecialchars($attr),$i,htmlspecialchars($current_members[$i])); -/* - * Javascript generates array of input text boxes from new members. + htmlspecialchars($request['attr']),$i,htmlspecialchars($current_members[$i])); + +/* Javascript generates array of input text boxes from new members. * update_confirm.php will see this as new_values[member-attribute][item] - * Input text boxes will be generated to div=dnu - */ + * Input text boxes will be generated to div=dnu */ echo '
'; -printf('',htmlspecialchars($attr)); +printf('',htmlspecialchars($request['attr'])); echo '
'; # Submit values to update_confirm.php and when clicked, run addSelected -printf('',_('Save changes'),$attr); +printf('',_('Save changes'),$request['attr']); echo '
'; @@ -185,6 +160,7 @@ echo ''; +printf('',JSDIR); echo ''; ?> diff --git a/htdocs/monitor.php b/htdocs/monitor.php new file mode 100644 index 0000000..dcfd133 --- /dev/null +++ b/htdocs/monitor.php @@ -0,0 +1,266 @@ +getValue('server','root_dse_attributes'); +$query['baseok'] = true; +$results = $app['server']->query($query,null); + +$attrs = array_change_key_case(array_pop($results)); + +$query['base'] = $attrs['monitorcontext']; +$query['scope'] = 'sub'; +$results = $app['server']->query($query,null); + +if (! isset($attrs['monitorcontext']) || ! count($results)) + system_message(array( + 'title'=>_('Monitoring context does not exist'), + 'body'=>sprintf('%s: %s',_('Could not optain the monitor context for this server'),$app['server']->getName()), + 'type'=>'warn'),'index.php'); + +printf('

%s%s

',_('Monitor info for: '),$app['server']->getName()); +printf('

%s

',_('Server reports the following information about itself')); + +echo ''; + +# cn=Monitor +printf('',_('LDAP Server')); +printf(''; + +foreach (array( + 'cn=Backends,cn=Monitor' => 'cn=Backend %s,%s', + 'cn=Overlays,cn=Monitor' => 'cn=Overlay %s,%s' + ) as $dn => $child) { + + if (is_array($results[$dn]['description'])) + $description = implode(' ',$results[$dn]['description']); + else + $description = $results[$dn]['description']; + + $description = preg_replace('/"/','\'',$description); + printf('',$description,$dn); + echo ''; +} + +# cn=Connections,cn=Monitor +printf('',$results['cn=Connections,cn=Monitor']['description'],_('LDAP Connections')); +printf(''; + +foreach (array( + 'cn=Listeners,cn=Monitor', + 'cn=Log,cn=Monitor', + 'cn=Operations,cn=Monitor', + 'cn=SASL,cn=Monitor', + 'cn=TLS,cn=Monitor', + 'cn=Statistics,cn=Monitor', + 'cn=Threads,cn=Monitor', + 'cn=Time,cn=Monitor', + 'cn=Waiters,cn=Monitor' + ) as $dn ) { + + if (is_array($results[$dn]['description'])) + $description = implode(' ',$results[$dn]['description']); + else + $description = $results[$dn]['description']; + + $description = preg_replace('/"/','\'',$description); + printf('',$description,$dn); + echo ''; +} + +echo '
%s
'); + +echo ''; +printf('',$results['cn=Monitor']['monitoredInfo']); +echo '
%s
'; + +echo '
%s
'; + echo ''; + echo '
'; + echo ''; + + $attrs = array( + 'monitorRuntimeConfig', + 'supportedControl' + ); + + echo ''; + printf('',_('Type'),'namingContext'); + + foreach ($attrs as $attr) + printf('',$attr); + + echo ''; + + $counter = 0; + foreach ($results[$dn]['monitoredInfo'] as $index => $backend) { + printf('',$counter++%2==0?'even':'odd'); + printf('',$backend); + + $key = sprintf($child,$index,$dn); + + echo ''; + + foreach ($attrs as $attr) { + echo ''; + } + echo ''; + } + + echo '
%s%s%s
%s'; + if (isset($results[$key]['seeAlso'])) { + $seealso = is_array($results[$key]['seeAlso']) ? $results[$key]['seeAlso'] : array($results[$key]['seeAlso']); + + foreach ($seealso as $db) + if (isset($results[$db]['namingContexts'])) + printf('%s
',isset($results[$db]['labeledURI']) ? $results[$db]['labeledURI'] : _('Internal'),$results[$db]['namingContexts']); + else + printf('%s ',$results[$db]['monitoredInfo']); + + } else { + echo ' '; + } + echo '
'; + if (isset($results[$key][$attr])) { + if (! is_array($results[$key][$attr])) + $sc = array($results[$key][$attr]); + else + $sc = $results[$key][$attr]; + + if (strcasecmp('supportedControl',$attr) == 0) + foreach ($sc as $control) { + $oidtotext = support_oid_to_text($control); + + printf('%s
', + $control,$oidtotext['title']); + } + + else + printf('%s ',implode('
',$sc)); + + } else { + echo ' '; + } + + echo '
'; + echo '
%s
'); +echo ''; +echo '
'; +echo ''; + +printf('', + _('Total Connections'),$results['cn=Total,cn=Connections,cn=Monitor']['monitorCounter']); +printf('', + _('Current Connections'),$results['cn=Current,cn=Connections,cn=Monitor']['monitorCounter']); + +# Look for some connections +foreach ($results as $key => $value) { + if (preg_match('/^cn=Connection.*,cn=Connections,cn=Monitor$/',$key)) { + echo ''; + printf('',$results[$key]['cn']); + + echo ''; + echo ''; + } +} + +echo '
%s%s
%s%s
%s'; + echo ''; + + $counter = 0; + foreach (array( + 'monitorConnectionActivityTime', + 'monitorConnectionAuthzDN', + 'monitorConnectionGet', + 'monitorConnectionListener', + 'monitorConnectionLocalAddress', + 'monitorConnectionMask', + 'monitorConnectionNumber', + 'monitorConnectionOpsCompleted', + 'monitorConnectionOpsExecuting', + 'monitorConnectionOpsPending', + 'monitorConnectionOpsReceived', + 'monitorConnectionPeerAddress', + 'monitorConnectionPeerDomain', + 'monitorConnectionProtocol', + 'monitorConnectionRead', + 'monitorConnectionStartTime', + 'monitorConnectionWrite' + ) as $metric) { + + printf('',$counter++%2==0?'even':'odd'); + + printf('', + $metric,isset($results[$key][$metric]) ? $results[$key][$metric] : ' '); + echo ''; + } + + echo '
%s%s
'; + echo '
'; +echo '
%s
'; + echo ''; + echo '
'; + echo ''; + + if (isset($results[$dn]['monitorOpInitiated'])) + printf('', + 'monitorOpInitiated',$results[$dn]['monitorOpInitiated']); + if (isset($results[$dn]['monitorOpCompleted'])) + printf('', + 'monitorOpCompleted',$results[$dn]['monitorOpCompleted']); + if (isset($results[$dn]['monitoredInfo'])) + printf('', + 'monitoredInfo',$results[$dn]['monitoredInfo']); + + # Look for some connecitons + foreach ($results as $key => $value) { + if (preg_match('/^.*,'.$dn.'$/',$key)) { + echo ''; + printf('',$results[$key]['cn']); + + echo ''; + echo ''; + } + } + echo '
%s%s
%s%s
%s%s
%s'; + echo ''; + + foreach (array( + 'labeledURI', + 'monitorConnectionLocalAddress', + 'monitoredInfo', + 'monitorCounter', + 'monitorOpInitiated', + 'monitorOpCompleted', + 'monitorTimestamp' + ) as $metric) { + + if (isset($results[$key][$metric])) { + printf('',$counter++%2==0?'even':'odd'); + + printf('', + $metric,$results[$key][$metric]); + + echo ''; + } + } + + echo '
%s%s
'; + echo '
'; + echo '
'; +?> diff --git a/htdocs/password_checker.php b/htdocs/password_checker.php index 4190c7f..cfc6206 100644 --- a/htdocs/password_checker.php +++ b/htdocs/password_checker.php @@ -1,30 +1,33 @@ '; -$entry = array(); -$entry['hash'] = get_request('hash','REQUEST'); -$entry['password'] = get_request('check_password','REQUEST'); -$entry['action'] = get_request('action','REQUEST'); -$entry['componentid'] = get_request('componentid','REQUEST'); +$www['page'] = new page(); + +$request = array(); +$request['componentid'] = get_request('componentid','REQUEST'); +$request['hash'] = get_request('hash','REQUEST'); +$request['password'] = get_request('check_password','REQUEST'); +$request['action'] = get_request('action','REQUEST'); if (get_request('base64','REQUEST')) { - $entry['hash'] = base64_decode($entry['hash']); - $entry['password'] = base64_decode($entry['password']); + $request['hash'] = base64_decode($request['hash']); + $request['password'] = base64_decode($request['password']); } -$entry['enc_type'] = get_enc_type($entry['hash']); +$request['enc_type'] = get_enc_type($request['hash']); -echo ''; -echo ''; -if ($entry['componentid']) { - echo ''; } + +# Capture the output and put into the body of the page. +$www['body'] = new block(); +$www['body']->SetBody(ob_get_contents()); +$www['page']->block_add('body',$www['body']); +ob_end_clean(); + +# Render the popup. +$www['page']->display(array('CONTROL'=>false,'FOOT'=>false,'HEAD'=>false,'TREE'=>false)); ?> diff --git a/htdocs/purge_cache.php b/htdocs/purge_cache.php index 911d88e..d0ed931 100644 --- a/htdocs/purge_cache.php +++ b/htdocs/purge_cache.php @@ -1,29 +1,29 @@ isCommandAvailable('purge')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('purge')),'error','index.php'); - -$purge_session_keys = array('cache'); +$purge_session_keys = array('app_initialized','backtrace','cache',APPCONFIG); $size = 0; -foreach ($purge_session_keys as $key) { +foreach ($purge_session_keys as $key) if (isset($_SESSION[$key])) { $size += strlen(serialize($_SESSION[$key])); unset($_SESSION[$key]); } -} if (! $size) - $body = _('No cache to purge.'); + $body = _('No cache to purge.'); else $body = sprintf(_('Purged %s bytes of cache.'),number_format($size)); @@ -31,5 +31,5 @@ system_message(array( 'title'=>_('Purge cache'), 'body'=>$body, 'type'=>'info'), - 'index.php'); + get_request('meth','REQUEST') == 'ajax' ? null : 'index.php'); ?> diff --git a/htdocs/query_engine.php b/htdocs/query_engine.php new file mode 100644 index 0000000..5347391 --- /dev/null +++ b/htdocs/query_engine.php @@ -0,0 +1,21 @@ +getIndex(),get_request('query','REQUEST',false,null)); +$request['page']->accept(); +?> diff --git a/htdocs/rdelete.php b/htdocs/rdelete.php index fde4e9a..cfa335a 100644 --- a/htdocs/rdelete.php +++ b/htdocs/rdelete.php @@ -1,92 +1,82 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); - if (! $_SESSION[APPCONFIG]->isCommandAvailable('entry_delete','simple_delete')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('delete entry')),'error','index.php'); + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('delete entry')),'error','index.php'); -$entry = array(); -$entry['dn'] = get_request('dn'); -if (! $entry['dn']) - error(_('You must specify a DN'),'error','index.php'); +$request = array(); +$request['dn'] = get_request('dn','REQUEST',true); -if (! $ldapserver->dnExists($entry['dn'])) - error(sprintf('%s (%s)',_('No such entry.'),htmlspecialchars($entry['dn'])),'error','index.php'); +if (! $app['server']->dnExists($request['dn'])) + error(sprintf('%s (%s)',_('No such entry.'),$request['dn']),'error','index.php'); -printf('

'._('Deleting %s').'

',htmlspecialchars(get_rdn($entry['dn']))); +printf('

%s %s

',_('Deleting'),get_rdn($request['dn'])); printf('

%s

',_('Recursive delete progress')); -echo '

'; -echo ''; # Prevent script from bailing early on a long delete @set_time_limit(0); -$result = pla_rdelete($ldapserver,$entry['dn']); +echo '

'; +echo ''; +$result = pla_rdelete($app['server'],$request['dn']); echo '
'; if ($result) { - printf(_('Entry %s and sub-tree deleted successfully.'),''.htmlspecialchars($entry['dn']).''); + printf(_('Entry %s and sub-tree deleted successfully.'),''.$request['dn'].''); } else { system_message(array( - 'title'=>_('Could not delete the entry.').sprintf(' (%s)',pretty_print_dn($entry['dn'])), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), + 'title'=>_('Could not delete the entry.').sprintf(' (%s)',pretty_print_dn($request['dn'])), + 'body'=>ldap_error_msg($app['server']->getErrorMessage(null),$app['server']->getErrorNum(null)), 'type'=>'error')); } -function pla_rdelete($ldapserver,$dn) { - # we delete all children, not only the visible children in the tree - $children = $ldapserver->getContainerContents($dn); +function pla_rdelete($server,$dn) { + # We delete all children, not only the visible children in the tree + $children = $server->getContainerContents($dn,null,0,'(objectClass=*)',LDAP_DEREF_NEVER); if (! is_array($children) || count($children) == 0) { - printf('%s %s...',_('Deleting'),htmlspecialchars($dn)); + printf('%s %s...',_('Deleting'),$dn); - if (run_hook('pre_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn))) - if ($ldapserver->delete($dn)) { - run_hook('post_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn)); - printf(' %s
',_('Success')); - return true; + if ($server->delete($dn)) { + printf(' %s

',_('Success')); + return true; - } else { - system_message(array( - 'title'=>_('Could not delete the entry.').sprintf(' (%s)',pretty_print_dn($entry['dn'])), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); - } + } else { + system_message(array( + 'title'=>_('Could not delete the entry.').sprintf(' (%s)',pretty_print_dn($request['dn'])), + 'body'=>ldap_error_msg($server->getErrorMessage(null),$server->getErrorNum(null)), + 'type'=>'error')); + } } else { foreach ($children as $child_dn) - pla_rdelete($ldapserver,$child_dn); + pla_rdelete($server,$child_dn); - printf('%s %s...',_('Deleting'),htmlspecialchars($dn)); + printf('%s %s...',_('Deleting'),$dn); - if (run_hook('pre_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn))) - if ($ldapserver->delete($dn)) { - run_hook('post_entry_delete',array('server_id'=>$ldapserver->server_id,'dn'=>$dn)); - printf(' %s
',_('Success')); - return true; + if ($server->delete($dn)) { + printf(' %s

',_('Success')); + return true; - } else { - system_message(array( - 'title'=>_('Could not delete the entry.').sprintf(' (%s)',pretty_print_dn($entry['dn'])), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); - } + } else { + system_message(array( + 'title'=>_('Could not delete the entry.').sprintf(' (%s)',pretty_print_dn($request['dn'])), + 'body'=>ldap_error_msg($server->getErrorMessage(null),$server->getErrorNum(null)), + 'type'=>'error')); + } } } ?> diff --git a/htdocs/refresh.php b/htdocs/refresh.php index 5658a83..ee0ac5d 100644 --- a/htdocs/refresh.php +++ b/htdocs/refresh.php @@ -1,23 +1,48 @@ isCommandAvailable('server_refresh')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('refresh server')),'error','index.php'); +if (get_request('purge','REQUEST')) { + $tree = get_cached_item($app['server']->getIndex(),'tree'); + del_cached_item($app['server']->getIndex(),'tree'); -unset($_SESSION['cache'][$ldapserver->server_id]['tree']); + if ($tree) + $openDNs = $tree->listOpenItems(); + else + $openDNs = array(); + + $tree = Tree::getInstance($app['server']->getIndex()); + + foreach ($openDNs as $value) { + $entry = $tree->getEntry($value); + if (! $entry) { + $tree->addEntry($value); + $entry = $tree->getEntry($value); + } + + $tree->readChildren($value); + $entry->open(); + } + + set_cached_item($app['server']->getIndex(),'tree','null',$tree); +} + +if (get_request('meth','REQUEST') == 'ajax') + header(sprintf('Location: cmd.php?cmd=draw_tree_node&noheader=%s&server_id=%s&meth=ajax&frame=TREE',get_request('noheader','REQUEST',false,0),$app['server']->getIndex())); +else + header(sprintf('Location: cmd.php?server_id=%s',$app['server']->getIndex())); -header(sprintf('Location: cmd.php?server_id=%s',$ldapserver->server_id)); die(); ?> diff --git a/htdocs/rename.php b/htdocs/rename.php index 6459192..68ec31a 100644 --- a/htdocs/rename.php +++ b/htdocs/rename.php @@ -1,76 +1,69 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +# The DN we are working with +$request = array(); +$request['dnSRC'] = get_request('dn','REQUEST'); +$request['rdnDST'] = get_request('new_rdn','REQUEST'); +$request['container'] = $app['server']->getContainer($request['dnSRC']); +# Error checking if (! $_SESSION[APPCONFIG]->isCommandAvailable('entry_rename')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('rename entry')),'error','index.php'); + error(sprintf('%s: %s',_('This operation is not permitted by the configuration'),_('rename entry')),'error','index.php'); + +if (! $app['server']->isBranchRenameEnabled()) { + # We search all children, not only the visible children in the tree + $children = $app['server']->getContainerContents($request['dnSRC'],null,0,'(objectClass=*)',LDAP_DEREF_NEVER); -$dn = get_request('dn'); -if (! $ldapserver->isBranchRenameEnabled()) { - # we search all children, not only the visible children in the tree - $children = $ldapserver->getContainerContents($dn); if (count($children) > 0) error(_('You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)'),'error','index.php'); } -$new_rdn = get_request('new_rdn'); -$container = get_container($dn); -$new_dn = sprintf('%s,%s',$new_rdn,$container); +$request['dnDST'] = sprintf('%s,%s',$request['rdnDST'],$request['container']); -if ($new_dn == $dn) +if ($request['dnDST'] == $request['dnSRC']) error(_('You did not change the RDN'),'error','index.php'); -$old_dn_attr = explode('=',$dn); -$old_dn_attr = $old_dn_attr[0]; +$rdnattr = array(); +$rdnattr['SRC'] = explode('=',$request['dnSRC']); +$rdnattr['SRC'] = $rdnattr['SRC'][0]; -$new_dn_value = explode('=',$new_rdn,2); +$new_dn_value = explode('=',$request['rdnDST'],2); +$rdnattr['DST'] = $new_dn_value[0]; if (count($new_dn_value) != 2 || ! isset($new_dn_value[1])) error(_('Invalid RDN value'),'error','index.php'); -$new_dn_attr = $new_dn_value[0]; -$new_dn_value = $new_dn_value[1]; - -$success = run_hook('pre_rename_entry',array('server_id'=>$ldapserver->server_id,'old_dn'=>$dn,'new_dn'=>$new_dn_value)); +$deleteoldrdn = $rdnattr['SRC'] == $rdnattr['DST']; +$success = $app['server']->rename($request['dnSRC'],$request['rdnDST'],$request['container'],$deleteoldrdn); if ($success) { - $success = false; - - $deleteoldrdn = $old_dn_attr == $new_dn_attr; - $success = $ldapserver->rename($dn,$new_rdn,$container,$deleteoldrdn); - -} else { - error(_('Could not rename the entry'),'error','index.php'); -} - -if ($success) { - run_hook('post_rename_entry',array('server_id'=>$ldapserver->server_id,'old_dn'=>$dn,'new_dn'=>$new_dn_value)); - $rename_message = sprintf('%s',_('Rename successful!')); - $redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$ldapserver->server_id,rawurlencode($new_dn)); + $redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s&template=%s', + $app['server']->getIndex(),rawurlencode($request['dnDST']),get_request('template','REQUEST')); system_message(array( 'title'=>_('Rename Entry'), 'body'=>$rename_message, 'type'=>'info'), $redirect_url); + +} else { + system_message(array( + 'title'=>_('Could not rename the entry.'), + 'body'=>ldap_error_msg($app['server']->getErrorMessage(null),$app['server']->getErrorNum(null)), + 'type'=>'error')); } ?> diff --git a/htdocs/rename_form.php b/htdocs/rename_form.php index d251a48..7286145 100644 --- a/htdocs/rename_form.php +++ b/htdocs/rename_form.php @@ -1,37 +1,42 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); -if (! $ldapserver->haveAuthInfo()) - error(_('Not enough information to login to server. Please check your configuration.'),'error','index.php'); +# The DN we are working with +$request = array(); +$request['dn'] = get_request('dn','GET'); +$request['template'] = get_request('template','GET'); -$dn = $_GET['dn']; -$rdn = get_rdn($dn); +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setDN($request['dn']); +$request['page']->accept(); -printf('

%s %s

',_('Rename Entry'),htmlspecialchars($rdn)); -printf('

%s: %s     %s: %s

', - _('Server'),$ldapserver->name,_('Distinguished Name'),htmlspecialchars($dn)); +# Render the form +$request['page']->drawTitle(sprintf('%s %s',_('Rename'),get_rdn($request['dn']))); +$request['page']->drawSubTitle(); -echo '
'; -printf('',$ldapserver->server_id); -printf('',htmlspecialchars($dn)); -printf('',htmlspecialchars($rdn)); +echo '
'; +printf('%s %s %s:

',_('Rename'),get_rdn($request['dn']),_('to a new object')); + +echo ''; +printf('',$app['server']->getIndex()); +printf('',rawurlencode($request['dn'])); +printf('',$request['template']); +printf('',get_rdn($request['dn'])); printf('',_('Rename')); -echo '
'; +echo ''; + +echo '
'; +echo "\n"; ?> diff --git a/htdocs/schema.php b/htdocs/schema.php index 7eece09..15bad77 100644 --- a/htdocs/schema.php +++ b/htdocs/schema.php @@ -1,26 +1,28 @@ isCommandAvailable('schema')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('view schema')),'error','index.php'); - $entry = array(); -$entry['view'] = get_request('view','GET','false','objectClasses'); +$entry['view'] = get_request('view','GET','false','objectclasses'); $entry['value'] = get_request('viewvalue','GET'); if (! is_null($entry['value'])) { @@ -29,17 +31,15 @@ if (! is_null($entry['value'])) { } $schema_error_str = sprintf('%s %s.

%s
  • %s
  • %s
  • %s
  • %s
', - _('Could not retrieve schema from'),htmlspecialchars($ldapserver->name), + _('Could not retrieve schema from'),$app['server']->getName(), _('This could happen for several reasons, the most probable of which are:'),_('The server does not fully support the LDAP protocol.'), _('Your version of PHP does not correctly perform the query.'),_('phpLDAPadmin doesn\'t know how to fetch the schema for your server.'), _('Or lastly, your LDAP server doesnt provide this information.')); -printf('

%s %s

', - _('Schema for server'), - htmlspecialchars($ldapserver->name)); +printf('

%s %s

',_('Schema for server'),$app['server']->getName()); $entry['schema_types'] = array( - 'objectClasses'=>_('ObjectClasses'), + 'objectclasses'=>_('ObjectClasses'), 'attributes'=>_('Attribute Types'), 'syntaxes'=>_('Syntaxes'), 'matching_rules'=>_('Matching Rules')); @@ -52,34 +52,99 @@ foreach ($entry['schema_types'] as $item => $value) { if ($counter++) echo ' | '; - $entry['href'][$item] = sprintf('?cmd=schema&server_id=%s&view=%s&viewvalue=%%s',$ldapserver->server_id,$item); + $entry['href'][$item] = sprintf('cmd=schema&server_id=%s&view=%s',$app['server']->getIndex(),$item); - $href = htmlspecialchars(sprintf($entry['href'][$item],'')); - echo ($entry['view'] == $item ? _($value) : sprintf('%s',$href,_($value))); + if ($entry['view'] == $item) { + echo _($value); + + } else { + if (isAjaxEnabled()) + printf('%s', + htmlspecialchars($entry['href'][$item]),htmlspecialchars($entry['href'][$item]),$value,$value,$value); + else + printf('%s',htmlspecialchars($entry['href'][$item]),_($value)); + } } echo ''; echo '
'; -switch($entry['view']) { +if (isAjaxEnabled()) { + echo ''; +} + +switch($entry['view']) { case 'syntaxes': $highlight_oid = get_request('highlight_oid','GET',false,false); echo '
'; - print ''; + echo '
'; printf('',_('Syntax OID'),_('Description')); $counter = 1; - $schema_syntaxes = $ldapserver->SchemaSyntaxes(null,true); + $schema_syntaxes = $app['server']->SchemaSyntaxes(); if (! $schema_syntaxes) error($schema_error_str,'error','index.php'); foreach ($schema_syntaxes as $syntax) { $counter++; - $oid = htmlspecialchars($syntax->getOID()); - $desc = htmlspecialchars($syntax->getDescription()); + $oid = $syntax->getOID(); + $desc = $syntax->getDescription(); if ($highlight_oid && $highlight_oid == $oid) echo ''; @@ -90,7 +155,7 @@ switch($entry['view']) { printf('',$oid,$desc); } - print '
%s%s
%s%s
'; + echo '
'; echo '
'; break; @@ -113,44 +178,67 @@ switch($entry['view']) { 'force_as_may' => _('Force as MAY by config') ); - $schema_attrs = $ldapserver->SchemaAttributes(); - $schema_object_classes = $ldapserver->SchemaObjectClasses(); + $sattrs = $app['server']->SchemaAttributes(); - if (! $schema_attrs || ! $schema_object_classes) + if (! $sattrs || ! $app['server']->SchemaObjectClasses()) error($schema_error_str,'error','index.php'); printf('%s:',_('Jump to an attribute type')); echo '
'; echo ''; printf('',$entry['view']); - printf('',$ldapserver->server_id); + printf('',$app['server']->getIndex()); + + if (isAjaxEnabled()) { + echo ''; + echo ''; - echo ''; - printf('
',_('Go')); - + if (isAjaxEnabled()) + printf('',_('Go')); + else + printf('',_('Go')); + echo ''; echo '
'; - foreach ($schema_attrs as $attr) { - if (is_null($entry['value']) || ! strcasecmp($entry['value'],$attr->getName())) { - if (! is_null($entry['value'])) + foreach ($sattrs as $attr) { + if (isAjaxEnabled() || (is_null($entry['value']) || ! strcasecmp($entry['value'],$attr->getName()))) { + if (! is_null($entry['value']) && strcasecmp($entry['value'],$attr->getName())) $entry['viewed'] = true; + if (isAjaxEnabled() && $entry['value']) + printf('
',$attr->getName(),strcasecmp($entry['value'],$attr->getName()) ? 'none' : ''); + else + printf('
',$attr->getName()); + echo ''; printf('', - strtolower($attr->getName()),$attr->getName()); + $attr->getName(),$attr->getName(false)); $counter = 0; foreach ($entry['attr_types'] as $item => $value) { printf('',++$counter%2 ? 'odd' : 'even'); - printf('',$value); + printf('',$value); switch ($item) { case 'desc': @@ -158,7 +246,7 @@ switch($entry['view']) { is_null($attr->getDescription()) ? '('._('no description').')' : $attr->getDescription()); - print ''; + echo ''; printf('',++$counter%2 ? 'odd' : 'even'); echo ''; printf('',$attr->getOID()); @@ -170,31 +258,39 @@ switch($entry['view']) { break; case 'inherits': - print ''; + echo ''; break; case 'equality': - print ''; + echo ''; break; case 'ordering': @@ -208,18 +304,21 @@ switch($entry['view']) { break; case 'syntax': - print ''; + echo ''; break; case 'single_valued': @@ -239,7 +338,7 @@ switch($entry['view']) { break; case 'maximum_length': - print ''; + echo ''; break; case 'aliases': - print ''; + echo ''; break; case 'used_by_objectclasses': - print ''; + echo ''; break; case 'force_as_may': - printf('',$attr->forced_as_may ? _('Yes') : _('No')); + printf('',$attr->isForceMay() ? _('Yes') : _('No')); break; } - print ''; + echo ''; } - print '
%s
%s%s
OID%s'; + echo ''; if (is_null($attr->getSupAttribute())) printf('(%s)',_('none')); else { - $href = htmlspecialchars(sprintf($entry['href']['attributes'],strtolower($attr->getSupAttribute()))); - printf('%s',$href,$attr->getSupAttribute()); + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['attributes'],strtolower($attr->getSupAttribute()))); + if (isAjaxEnabled()) + printf('%s', + $href,strtolower($attr->getSupAttribute()),$attr->getSupAttribute()); + else + printf('%s',$href,$attr->getSupAttribute()); } - print ''; + echo ''; if (is_null($attr->getEquality())) printf('(%s)',_('not specified')); else { - $href = htmlspecialchars(sprintf($entry['href']['matching_rules'],$attr->getEquality())); - printf('%s',$href,$attr->getEquality()); + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['matching_rules'],$attr->getEquality())); + if (isAjaxEnabled()) + printf('%s', + $href,$href,_('Matching Rules'),$attr->getEquality(),$attr->getEquality()); + else + printf('%s',$href,$attr->getEquality()); } - print ''; + echo ''; if (is_null($attr->getType())) { echo $attr->getSyntaxOID(); } else { - $href = htmlspecialchars(sprintf($entry['href']['syntaxes'].'&highlight_oid=%s#%s','', - $attr->getSyntaxOID(),$attr->getSyntaxOID())); - printf('%s (%s)',$href,$attr->getType(),$attr->getSyntaxOID()); + $href = htmlspecialchars(sprintf('%s&highlight_oid=%s',$entry['href']['syntaxes'],$attr->getSyntaxOID())); + if (isAjaxEnabled()) + printf('%s (%s)', + $href,$href,_('Syntaxes'),'',$attr->getType(),$attr->getSyntaxOID()); + else + printf('%s (%s)',$href,$attr->getType(),$attr->getSyntaxOID()); } - print ''; + echo ''; if ( is_null($attr->getMaxLength())) echo '('._('not applicable').')'; @@ -248,78 +347,109 @@ switch($entry['view']) { printf('%s %s',number_format($attr->getMaxLength()), $attr->getMaxLength()>1 ? _('characters') : _('character')); - print ''; + echo ''; if (count($attr->getAliases()) == 0) printf('(%s)',_('none')); else - foreach ($attr->getAliases() as $alias_attr_name) { - $href = htmlspecialchars(sprintf($entry['href']['attributes'],strtolower($alias_attr_name))); - printf('%s',$href,$alias_attr_name); + foreach ($attr->getAliases() as $alias) { + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['attributes'],strtolower($alias))); + if (isAjaxEnabled()) + printf('%s', + $href,strtolower($alias),$alias); + else + printf('%s',$href,$alias); } - print ''; + echo ''; if (count($attr->getUsedInObjectClasses()) == 0) printf('(%s)',_('none')); else - foreach ($attr->getUsedInObjectClasses() as $used_in_oclass) { - $href = htmlspecialchars(sprintf($entry['href']['objectClasses'],strtolower($used_in_oclass))); - printf('%s ',$href,$used_in_oclass); + foreach ($attr->getUsedInObjectClasses() as $objectclass) { + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['objectclasses'],strtolower($objectclass))); + if (isAjaxEnabled()) + printf('%s ', + $href,$href,_('ObjectClasses'),strtolower($objectclass),$objectclass); + else + printf('%s ',$href,$objectclass); } - print '%s%s
'; + echo '
'; echo '
'; + echo ''; } } break; case 'matching_rules': - $schema_matching_rules = $ldapserver->MatchingRules(null,true); + $schema_matching_rules = $app['server']->MatchingRules(); if (! $schema_matching_rules) error($schema_error_str,'error','index.php'); printf('%s
',_('Jump to a matching rule')); - print '
'; - print ''; - printf('',$ldapserver->server_id); - print ''; + echo ''; + echo ''; + printf('',$app['server']->getIndex()); + echo ''; - print ''; + } else + echo ''; + $rule->getName(false)); - printf('',_('Go')); - print '
'; + echo ''; - print ''; + if (isAjaxEnabled()) + printf('',_('Go')); + else + printf('',_('Go')); + echo ''; + echo '
'; + + echo '
'; printf('', _('Matching Rule OID'),_('Name'),_('Used by Attributes')); @@ -327,12 +457,11 @@ switch($entry['view']) { foreach ($schema_matching_rules as $rule) { $counter++; - $oid = htmlspecialchars($rule->getOID()); - $desc = htmlspecialchars($rule->getName()); + $oid = $rule->getOID(); + $desc = $rule->getName(false); - if ( is_null($entry['value']) || $entry['value'] == strtolower($rule->getName())) { - - if (! is_null($entry['value'])) + if (isAjaxEnabled() || (is_null($entry['value']) || ! strcasecmp($entry['value'],$rule->getName()))) { + if (! is_null($entry['value']) && strcasecmp($entry['value'],$rule->getName())) $entry['viewed'] = true; if (null != $rule->getDescription()) @@ -341,42 +470,50 @@ switch($entry['view']) { if ( $rule->getIsObsolete()) $desc .= sprintf(' %s',_('Obsolete')); - printf('',$counter%2 ? 'odd' : 'even'); + if (isAjaxEnabled() && $entry['value']) + printf('',$counter%2 ? 'odd' : 'even',$rule->getName(), + strcasecmp($entry['value'],$rule->getName()) ? 'none' : ''); + else + printf('',$counter%2 ? 'odd' : 'even',$rule->getName()); printf('',$oid); printf('',$desc); - print ''; - print ''; + echo ''; + echo ''; } } - print '
%s%s%s
%s%s'; + echo ''; if (count($rule->getUsedByAttrs()) == 0) { printf('
(%s)


',_('none')); } else { - print '
'; - print '
'; - print ''; - printf('',$ldapserver->server_id); - print ''; + echo '
'; + echo ''; + echo ''; + printf('',$app['server']->getIndex()); + echo ''; - print '',$rule->getName()); foreach ($rule->getUsedByAttrs() as $attr) printf('',$attr); - print '
'; + echo '
'; - printf('',_('Go')); - print ''; - print '
'; + if (isAjaxEnabled()) + printf('', + _('Go'),$app['server']->getIndex(),_('Attributes'),$rule->getName()); + else + printf('',_('Go')); + echo ''; + echo '
'; } - print '
'; + echo ''; break; - case 'objectClasses': - $schema_oclasses = $ldapserver->SchemaObjectClasses(); - if (! $schema_oclasses) + case 'objectclasses': + $socs = $app['server']->SchemaObjectClasses(); + if (! $socs) error($schema_error_str,'error','index.php'); printf('%s:',_('Jump to an objectClass')); @@ -384,27 +521,51 @@ switch($entry['view']) { echo '
'; echo ''; printf('',$entry['view']); - printf('',$ldapserver->server_id); + printf('',$app['server']->getIndex()); + + if (isAjaxEnabled()) { + echo ''; + echo ''; - echo ''; - printf('',_('Go')); + if (isAjaxEnabled()) + printf('',_('Go')); + else + printf('',_('Go')); echo '
'; - echo '
'; - foreach ($schema_oclasses as $name => $oclass) { - if (is_null($entry['value']) || ($entry['value'] == $name)) { - if (! is_null($entry['value'])) + foreach ($socs as $name => $oclass) { + if (isAjaxEnabled() || (is_null($entry['value']) || ! strcasecmp($entry['value'],$oclass->getName()))) { + if (! is_null($entry['value']) && strcasecmp($entry['value'],$oclass->getName())) $entry['viewed'] = true; + if (isAjaxEnabled() && $entry['value']) + printf('
',$oclass->getName(),strcasecmp($entry['value'],$oclass->getName()) ? 'none' : ''); + else + printf('
',$oclass->getName()); + echo ''; - printf('',$name,$oclass->getName()); + printf('',$name,$oclass->getName(false)); printf('',_('OID'),$oclass->getOID()); if ($oclass->getDescription()) @@ -421,10 +582,13 @@ switch($entry['view']) { else foreach ($oclass->getSupClasses() as $i => $object_class) { - $href = htmlspecialchars(sprintf($entry['href']['objectClasses'],strtolower($object_class))); - - printf('%s', - _('Jump to this objectClass definition'),$href,$object_class); + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['objectclasses'],strtolower($object_class))); + if (isAjaxEnabled()) + printf('%s', + $href,strtolower($object_class),$object_class); + else + printf('%s', + $href,$object_class,_('Jump to this objectClass definition'),$object_class); if ($i < count($oclass->getSupClasses()) - 1) echo ', '; @@ -433,40 +597,58 @@ switch($entry['view']) { printf(''; - printf('', + printf('', _('Required Attributes'),_('Optional Attributes')); echo ''; echo ''; echo ''; echo '
%s
%s
%s: %s
%s: ',_('Parent to')); if (strcasecmp($oclass->getName(),'top') == 0) { - $href = htmlspecialchars(sprintf($entry['href']['objectClasses'],'')); - printf('(all)',$href); + $href = htmlspecialchars($entry['href']['objectclasses']); + if (isAjaxEnabled()) + printf('all', + $href); + else + printf('(all)',$href); } elseif (count($oclass->getChildObjectClasses()) == 0) printf('(%s)',_('none')); else foreach ($oclass->getChildObjectClasses() as $i => $object_class) { - $href = htmlspecialchars(sprintf($entry['href']['objectClasses'],strtolower($object_class))); - printf('%s',_('Jump to this objectClass definition'),$href,$object_class); + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['objectclasses'],strtolower($object_class))); + if (isAjaxEnabled()) + printf('%s', + $href,_('Jump to this objectClass definition'),strtolower($object_class),$object_class); + else + printf('%s',$href,_('Jump to this objectClass definition'),$object_class); if ( $i < count($oclass->getChildObjectClasses()) - 1) echo ', '; } echo '
 %s%s 
 %s%s 
'; - if (count($oclass->getMustAttrs($schema_oclasses)) > 0) { - + if ($attrs = $oclass->getMustAttrs(true)) { echo '
    '; - foreach ($oclass->getMustAttrs($schema_oclasses) as $attr) { - echo '
  • '; - $href = htmlspecialchars(sprintf($entry['href']['attributes'],strtolower($attr->getName()))); - printf('%s',$href,$attr->getName()); - if ($attr->getSource() != $oclass->getName()) { + foreach ($attrs as $attr) { + echo '
  • '; + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['attributes'],$attr->getName())); + if (isAjaxEnabled()) + printf('%s', + $href,$href,_('Attributes'),$attr->getName(),$attr->getName(false)); + else + printf('%s',$href,$attr->getName(false)); + + if ($attr->getSource() != $oclass->getName(false)) { echo '
    '; - $href = htmlspecialchars(sprintf($entry['href']['objectClasses'],strtolower($attr->getSource()))); - printf('(%s %s)',_('Inherited from'),$href,$attr->getSource()); + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['objectclasses'],strtolower($attr->getSource()))); + printf('(%s ',_('Inherited from')); + if (isAjaxEnabled()) + printf('%s', + $href,_('Jump to this objectClass definition'),strtolower($attr->getSource()),$attr->getSource()); + else + printf('%s',$href,$attr->getSource()); + echo ')'; } echo '
  • '; } @@ -478,18 +660,28 @@ switch($entry['view']) { echo '
'; - if (count($oclass->getMayAttrs($schema_oclasses)) > 0) { - + if ($attrs = $oclass->getMayAttrs(true)) { echo '
    '; - foreach ($oclass->getMayAttrs($schema_oclasses) as $attr) { - echo '
  • '; - $href = htmlspecialchars(sprintf($entry['href']['attributes'],strtolower($attr->getName()))); - printf('%s',$href,$attr->getName()); - if ($attr->getSource() != $oclass->getName()) { + foreach ($attrs as $attr) { + echo '
  • '; + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['attributes'],$attr->getName())); + if (isAjaxEnabled()) + printf('%s', + $href,$href,_('Attributes'),$attr->getName(),$attr->getName(false)); + else + printf('%s',$href,$attr->getName(false)); + + if ($attr->getSource() != $oclass->getName(false)) { echo '
    '; - $href = htmlspecialchars(sprintf($entry['href']['objectClasses'],strtolower($attr->getSource()))); - printf('(%s %s)',_('Inherited from'),$href,$attr->getSource()); + $href = htmlspecialchars(sprintf('%s&viewvalue=%s',$entry['href']['objectclasses'],strtolower($attr->getSource()))); + printf('(%s ',_('Inherited from')); + if (isAjaxEnabled()) + printf('%s', + $href,_('Jump to this objectClass definition'),strtolower($attr->getSource()),$attr->getSource()); + else + printf('%s',$href,$attr->getSource()); + echo ')'; } if ($oclass->isForceMay($attr->getName())) { @@ -507,11 +699,12 @@ switch($entry['view']) { echo '
'; echo '
'; + echo '
'; } - } /* End foreach objectClass */ + } break; } if (! is_null($entry['value']) && ! $entry['viewed']) - error(sprintf(_('No such schema item: "%s"'),htmlspecialchars($entry['value'])),'error','index.php'); + error(sprintf(_('No such schema item: "%s"'),$entry['value']),'error','index.php'); ?> diff --git a/htdocs/search.php b/htdocs/search.php deleted file mode 100644 index 7f2764d..0000000 --- a/htdocs/search.php +++ /dev/null @@ -1,396 +0,0 @@ -GetValue('search','display')); -$entry['form'] = get_request('form','GET',false,get_request('form','SESSION')); - -$entry['orderby']['raw'] = get_request('orderby','GET'); -$entry['orderby']['string'] = rawurldecode($entry['orderby']['raw']); -$entry['orderby']['array'] = $entry['orderby']['raw'] ? explode(',',preg_replace('/\s+/','',$entry['orderby']['string'])) : true; - -$entry['display']['raw'] = get_request('display_attrs','GET'); -$entry['display']['string'] = rawurldecode($entry['display']['raw']); -$entry['display']['array'] = $entry['display']['raw'] ? explode(',',preg_replace('/\s+/','',$entry['display']['string'])) : array(); - -$entry['filter']['string'] = get_request('filter','GET'); -$entry['filter']['clean'] = $entry['filter']['string'] ? clean_search_vals($entry['filter']['string']) : null; - -$entry['attr'] = get_request('attribute','GET'); -$entry['base_dn']['string'] = get_request('base_dn','GET'); -$entry['criterion'] = get_request('criterion','GET'); -$entry['scope'] = get_request('scope','GET','false','sub'); -$entry['search'] = get_request('search','GET'); -$entry['predefined'] = get_request('predefined','GET'); -$entry['page'] = get_request('page','GET',false,0); - -if (! in_array($entry['format'],$result_formats)) - $entry['format'] = 'list'; - -$_SESSION['form'] = $entry['form']; - -# build the server drop-down html and JavaScript array (for base_dns) -$js_on_change_string = ''; -if ($entry['form'] == 'advanced') - $js_on_change_string = 'onChange="document.forms[0].base_dn.value=servers[document.forms[0].server_id.value].base_dn"'; - -if (isset($ldapserver)) { - $server_menu_html = server_select_list($ldapserver->server_id,true,'server_id',$js_on_change_string); - $server_info_list = server_info_list(); -} - -# grab the base dn for the search -if ($entry['base_dn']['string']) { - $entry['base_dn']['invalid'] = false; - $entry['base_dn']['exist'] = false; - - if (! is_dn_string($entry['base_dn']['string'])) - $entry['base_dn']['invalid'] = true; - - elseif (! $ldapserver->dnExists($entry['base_dn']['string'])) - $entry['base_dn']['exist'] = true; - - $base_dns = array($entry['base_dn']['string']); - -} else - if (isset($ldapserver)) - $base_dns = $ldapserver->getBaseDN(); - -printf('',JSDIR); -echo '
'; - -$entry['command']['as'] = $_SESSION[APPCONFIG]->isCommandAvailable('search','advanced_search'); -$entry['command']['ps'] = $_SESSION[APPCONFIG]->isCommandAvailable('search','predefined_search'); -$entry['command']['ss'] = $_SESSION[APPCONFIG]->isCommandAvailable('search','simple_search'); - -if ($entry['form'] == 'advanced') { - if ($entry['command']['as']) - require LIBDIR.'search_form_advanced.php'; - -} elseif ($entry['form'] == 'predefined') { - if ($entry['command']['ps']) - require LIBDIR.'search_form_predefined.php'; - -} elseif ($entry['form'] == 'simple') { - # Draw simple search form - if ($entry['command']['ss']) - require LIBDIR.'search_form_simple.php'; - -} elseif ($entry['command']['as']) { - require LIBDIR.'search_form_advanced.php'; - -} elseif ($entry['command']['ss']) { - require LIBDIR.'search_form_simple.php'; - -} elseif ($entry['command']['ps']) { - require LIBDIR.'search_form_predefined.php'; - -} else { - echo _('Searching is not permitted'); -} - -echo '
'; -echo '
'; - -if ($entry['search']) { - if ($entry['form'] == 'advanced') { - if (! $_SESSION[APPCONFIG]->isCommandAvailable('search','advanced_search')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('advanced search')),'error','index.php'); - - } elseif ($entry['form'] == 'predefined') { - if (! $_SESSION[APPCONFIG]->isCommandAvailable('search','predefined_search')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('predefined search')),'error','index.php'); - - } elseif ($entry['form'] == 'simple') { - if (! $_SESSION[APPCONFIG]->isCommandAvailable('search','simple_search')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('simple search')),'error','index.php'); - } - - if ($entry['form'] == 'advanced') { - if ($entry['display']) - $search_result_attributes = $entry['display']['array']; - else - $search_result_attributes = $_SESSION[APPCONFIG]->GetValue('search','result_attributes'); - - } else { - $search_result_attributes = $_SESSION[APPCONFIG]->GetValue('search','result_attributes'); - } - - # do we have enough authentication information for the specified server_id - # @todo: redirect isnt working - if (! $ldapserver->haveAuthInfo()) { - $login_url = sprintf('cmd.php?cmd=login_form&server_id=%s&redirect=%s', - $ldapserver->server_id,rawurlencode($_SERVER['REQUEST_URI'])); - - system_message(array( - 'title'=>_('Search'), - 'body'=>_('You have not logged into the selected server yet, so you cannot perform searches on it.'), - 'type'=>'warn'), - $login_url); - } - - if (is_numeric($entry['predefined'])) { - $query = get_cleaned_up_predefined_search($entry['predefined']); - - $search_result_attributes = explode(', ',$query['attributes']); - $search_attributes_display = $search_result_attributes; - $search_attributes = $search_result_attributes; - - $entry['filter']['clean'] = $query['filter']; - $entry['scope'] = $query['scope']; - - if (! trim($query['base'])) - $query['base'] = $ldapserver->getBaseDN(); - - elseif (is_array($query['base'])) - $base_dns = $query['base']; - - else - $base_dns = array($query['base']); - - } else { - $entry['predefined'] = ''; - } - - if ($entry['filter']['clean']) { - # if they are using the simple search form, build an LDAP search filter from their input - if ($entry['form'] == 'simple' & ! is_numeric($entry['predefined'])) { - - switch ($entry['criterion']) { - case 'starts with': - if ($entry['filter']['clean'] == '*') - $entry['filter']['clean'] = ''; - - $entry['filter']['clean'] = sprintf('(%s=%s*)',$entry['attr'],$entry['filter']['clean']); - break; - - case 'contains': - if ($entry['filter']['clean'] == '*') - $entry['filter']['clean'] = sprintf('(%s=*)',$entry['attr']); - else - $entry['filter']['clean'] = sprintf('(%s=*%s*)',$entry['attr'],$entry['filter']['clean']); - - break; - - case 'ends with': - if ($entry['filter']['clean'] == '*') - $entry['filter']['clean'] = ''; - - $entry['filter']['clean'] = sprintf('(%s=*%s)',$entry['attr'],$entry['filter']['clean']); - break; - - case 'equals': - $entry['filter']['clean'] = sprintf('(%s=%s)',$entry['attr'],$entry['filter']['clean']); - break; - - case 'sounds like': - $entry['filter']['clean'] = sprintf('(%s~=%s)',$entry['attr'],$entry['filter']['clean']); - break; - - default: - system_message(array( - 'title'=>_('Unrecognized criteria option: ').htmlspecialchars($entry['criterion']), - 'body'=>_('If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting.'), - 'type'=>'warn'), - sprintf('cmd.php?cmd=search&server_id=%s',$ldapserver->server_id)); - } - } - - # prevent script from bailing early on a long delete - @set_time_limit(0); - - $size_limit = $_SESSION[APPCONFIG]->GetValue('search','size_limit'); - - # Sanity check - if ($size_limit < 1) - $size_limit = 1; - - $time_start = utime(); - $time_elapsed = 0; - - foreach ($base_dns as $base_dn) { - if (! $ldapserver->dnExists($base_dn)) { - if (DEBUG_ENABLED) - debug_log('BaseDN [%s] skipped as it doesnt exist in [%s].',64,__FILE__,__LINE__,__METHOD__, - $base_dn,$ldapserver->server_id); - - continue; - - } else { - if (DEBUG_ENABLED) - debug_log('Search with base DN [%s]',64,__FILE__,__LINE__,__METHOD__,$base_dn); - } - - $results = $ldapserver->search(null,dn_escape($base_dn),$entry['filter']['clean'],$search_result_attributes, - $entry['scope'],$entry['orderby']['array'],$_SESSION[APPCONFIG]->GetValue('deref','search')); - - if ((! $results) && $ldapserver->errno()) - system_message(array( - 'title'=>_('Encountered an error while performing search.'), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); - - $errno = $ldapserver->errno(); - - $time_end = utime(); - $time_elapsed += round($time_end-$time_start,2); - $count = count($results); - - $start_entry = $entry['page'] * $size_limit; - $end_entry = min($start_entry+$size_limit+1,$count+1); - - # Search Results Table - echo ''; - - echo ''; - printf('',_('Entries found'),_(':'), - number_format($count),$time_elapsed,_('seconds')); - - if ($_SESSION[APPCONFIG]->isCommandAvailable('export')) { - $href = htmlspecialchars(sprintf('cmd.php?cmd=export_form&server_id=%s&scope=%s&dn=%s&filter=%s&attributes=%s', - $ldapserver->server_id,$entry['scope'],$base_dn,rawurlencode($entry['filter']['clean']),rawurlencode(join(', ',$search_result_attributes)))); - - printf(''; - echo ''; - echo '
%s%s %s
(%s %s)
[ Save %s ]', - $href,IMGDIR,_('export results')); - } - - printf('[ rename %s%s',IMGDIR,_('Format'),_(':')); - - foreach ($result_formats as $f) { - echo ' '; - - if ($entry['format'] == $f) { - printf('%s',_($f)); - - } else { - $query_string = array_to_query_string($_GET,array('format','cmd')); - $query_string .= sprintf('&format=%s',$f); - printf('%s',$query_string,_($f)); - } - } - - echo ' ]'; - - if ($_SESSION[APPCONFIG]->isCommandAvailable('schema')) { - echo '
'; - printf('%s%s %s',_('Base DN'),_(':'),htmlspecialchars($base_dn)); - - if ($entry['form'] == 'simple' || $entry['form'] == 'predefined') { - echo '
'; - printf('%s%s %s',_('Filter performed'),_(':'),htmlspecialchars($entry['filter']['clean'])); - } - } - - echo '
'; - - # The LDAP error code for the size limit exceeded error. - # @todo: test this with system_message - if ($errno && $errno == SIZE_LIMIT_EXCEEDED) - printf('
%s

',_('Notice, search size limit exceeded.')); - - # Draw the paging links - $pager_html = ''; - $total_pages = $count / $size_limit; - $results_per_page = $size_limit; - - if ($count > $size_limit) { - printf(_('Showing results %s through %s.').'
', - ''.number_format($start_entry+1).'',''.number_format($end_entry-1).''); - - if ($entry['page'] != 0) { - $query_string = array_to_query_string($_GET,array('page','cmd')); - $query_string .= '&page=' . ($entry['page']-1); - $pager_html .= sprintf('‹‹',$entry['page'],$query_string); - - } else { - $pager_html .= '‹‹'; - } - - $pager_html .= '  '; - - /* For large search results where we page beyond the first 20 pages, - * print elipsis instead of making the pager be super wide. */ - $elipsis_printed = false; - for ($i=0;$i<$count;$i+=$size_limit) { - $page_num = $i/$size_limit; - - if ($count > $size_limit * 20 && abs($page_num-$entry['page']) > 10) { - - if (! $elipsis_printed) { - $pager_html .= '...  '; - $elipsis_printed = true; - } - - } elseif ($entry['page'] == $page_num) { - $pager_html .= '' . ($page_num + 1) . ''; - $pager_html .= '  '; - $elipsis_printed = false; - - } else { - $query_string = array_to_query_string($_GET,array('page','cmd')); - $query_string .= '&page=' . $page_num; - $pager_html .= "" . ($page_num+1) . ""; - $pager_html .= '  '; - $elipsis_printed = false; - } - } - - if ($entry['page']+1 < $total_pages) { - $query_string = array_to_query_string($_GET,array('page','cmd')); - $query_string .= '&page=' . ($entry['page']+1); - $pager_html .= "››"; - - } else { - $pager_html .= "››"; - } - - } - - if (0 == $count) - printf('

%s

',_('The search found no results.')); - - else { - if (trim($pager_html)) - printf('
%s
',$pager_html); - echo '
'; - - if ($entry['format'] == 'list') - require LIBDIR.'search_results_list.php'; - elseif ($entry['format'] == 'table') - require LIBDIR.'search_results_table.php'; - else - error(sprintf(_('Unrecognized search result format: %s'),htmlspecialchars($entry['format'])),'error','index.php'); - - echo '
'; - if (trim($pager_html)) - printf('
%s
',$pager_html); - } - } - } -} -?> diff --git a/htdocs/server_info.php b/htdocs/server_info.php index 1d3d586..ee13784 100644 --- a/htdocs/server_info.php +++ b/htdocs/server_info.php @@ -1,87 +1,46 @@ isCommandAvailable('server_info')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('view server information')),'error','index.php'); - -# The attributes we'll examine when searching the LDAP server's RootDSE -$root_dse_attributes = array( - 'namingContexts', - 'subschemaSubentry', - 'altServer', - 'supportedExtension', - 'supportedControl', - 'supportedSASLMechanisms', - 'supportedLDAPVersion', - 'currentTime', - 'dsServiceName', - 'defaultNamingContext', - 'schemaNamingContext', - 'configurationNamingContext', - 'rootDomainNamingContext', - 'supportedLDAPPolicies', - 'highestCommittedUSN', - 'dnsHostName', - 'ldapServiceName', - 'serverName', - 'supportedCapabilities', - 'changeLog', - 'tlsAvailableCipherSuites', - 'tlsImplementationVersion', - 'supportedSASLMechanisms', - 'dsaVersion', - 'myAccessPoint', - 'dseType', - '+', - '*' - ); +require './common.php'; # Fetch basic RootDSE attributes using the + and *. -$attrs = $ldapserver->search(null,'','objectClass=*',array('+','*'),'base'); -$attrs = array_pop($attrs); +$query = array(); +$query['base'] = ''; +$query['scope'] = 'base'; +$query['attrs'] = $app['server']->getValue('server','root_dse_attributes'); +$query['baseok'] = true; +$results = $app['server']->query($query,null); +$attrs = array_pop($results); -/* After fetching the "basic" attributes from the RootDSE, try fetching the - more advanced ones (from ths list). Add them to the list of attrs to display - if they weren't already fetched. (this was added as a work-around for OpenLDAP - on RHEL 3. */ -$attrs2 = $ldapserver->search(null,'','objectClass=*',$root_dse_attributes,'base'); -$attrs2 = array_pop($attrs2); - -if (is_array($attrs2)) - foreach ($attrs2 as $attr => $values) - if (! isset($attrs[$attr])) - $attrs[$attr] = $attrs2[$attr]; - -printf('

%s%s

',_('Server info for: '),htmlspecialchars($ldapserver->name)); +printf('

%s%s

',_('Server info for: '),$app['server']->getName()); printf('

%s

',_('Server reports the following information about itself')); -if (count($attrs) == 0) { +if (! count($attrs)) { echo '

'; printf('
%s
',_('This server has nothing to report.')); return; } echo ''; -foreach ($attrs as $attr => $values) { - if ($attr == 'dn') +foreach ($attrs as $key => $values) { + if ($key == 'dn') continue; - $schema_href = sprintf('cmd.php?cmd=schema&server_id=%s&view=attributes&viewvalue=%s',$ldapserver->server_id,$attr); + $href = sprintf('cmd.php?cmd=schema&server_id=%s&view=attributes&viewvalue=%s',$app['server']->getIndex(),$key); echo ''; echo ''; - $oidtext = ''; - print ''; + if (preg_match('/^[0-9]+\.[0-9]+/',$value)) { + printf('', + IMGDIR,$value,htmlspecialchars($value)); - if (preg_match('/^[0-9]+\.[0-9]+/',$value)) { - printf('', - IMGDIR,htmlspecialchars($value), htmlspecialchars($value)); + if ($oidtext = support_oid_to_text($value)) + if (isset($oidtext['ref'])) + printf('',$oidtext['ref'],$oidtext['title']); + else + printf('',$oidtext['title']); - if ($oidtext = support_oid_to_text($value)) - if (isset($oidtext['ref'])) - printf('',$oidtext['ref'],$oidtext['title']); else - printf('',$oidtext['title']); + if (strlen($value) > 0) + printf('',$value); + } else { + printf('',$value); + } + + print ''; + + if (isset($oidtext['desc']) && trim($oidtext['desc'])) + printf('',$oidtext['desc']); else - if (strlen($value) > 0) - printf('',$value); + echo ''; - } else { - printf('',htmlspecialchars($value)); - } - - print ''; - - if (isset($oidtext['desc']) && trim($oidtext['desc'])) - printf('',$oidtext['desc']); + if ($oidtext) + echo ''; } else - printf('',htmlspecialchars($values)); + printf('',$values); + echo '
'; - printf('%s', - $attr,$schema_href,htmlspecialchars($attr)); + printf('%s', + $href,_('Click to view the schema definition for attribute type'),$key,$key); echo '
 '; @@ -89,36 +48,41 @@ foreach ($attrs as $attr => $values) { if (is_array($values)) foreach ($values as $value) { + $oidtext = ''; + print '
%s%s%s%s%s%s%s%s
%s
%s
 
%s
%s
 
%s 
%s 
'; echo ''; diff --git a/htdocs/show_cache.php b/htdocs/show_cache.php index 0ea9e1d..206af4c 100644 --- a/htdocs/show_cache.php +++ b/htdocs/show_cache.php @@ -1,33 +1,42 @@ GetValue('appearance','hide_debug_info')) { +if ($request['key']) + debug_dump($request['dumpvar'][$request['key']],1); + +if (! $_SESSION[APPCONFIG]->getValue('appearance','hide_debug_info')) { echo '
    '; - foreach (array_keys($_SESSION) as $key) { - if (($key == 'cache') && is_array($_SESSION[$key])) - foreach (array_keys($_SESSION['cache']) as $server) { - foreach (array_keys($_SESSION['cache'][$server]) as $x) { + + foreach (array_keys($request['dumpvar']) as $key) { + if ((in_array($key,array('cache'))) && is_array($request['dumpvar'][$key])) + foreach (array_keys($request['dumpvar'][$key]) as $server) { + foreach (array_keys($request['dumpvar'][$key][$server]) as $x) { $index = sprintf('%s:%s',$server,$x); printf('
  • %s
  • ', @@ -35,7 +44,7 @@ if (! $_SESSION[APPCONFIG]->GetValue('appearance','hide_debug_info')) { } } else - printf('
  • %s
  • ', + printf('
  • %s
  • ', $key,$key,$key,$key); } echo '
'; @@ -81,7 +90,10 @@ if (! $_SESSION[APPCONFIG]->GetValue('appearance','hide_debug_info')) { poststr += "&index=" + encodeURI(xx); } - obj.innerHTML = ' Loading...'; + + poststr += "&global=on" + encodeURI(xx); + + obj.innerHTML = ' ...'; makePOSTRequest('cmd.php',poststr,'alertCacheContents','cancelCacheContents'); } diff --git a/htdocs/template_engine.php b/htdocs/template_engine.php index 1502816..dbbfa2c 100644 --- a/htdocs/template_engine.php +++ b/htdocs/template_engine.php @@ -1,70 +1,59 @@ getIndex(),get_request('template','REQUEST',false,null)); # If we have a DN, then this is to edit the entry. -if ($entry['dn']['string']) { - $ldapserver->dnExists($entry['dn']['string']) - or error(sprintf('%s (%s)',_('No such entry'),pretty_print_dn($entry['dn']['string'])),'error','index.php'); +if ($request['dn']) { + $app['server']->dnExists($request['dn']) + or error(sprintf('%s (%s)',_('No such entry'),pretty_print_dn($request['dn'])),'error','index.php'); - $tree = get_cached_item($ldapserver->server_id,'tree'); - - if ($tree) { - $entry['dn']['tree'] = $tree->getEntry($entry['dn']['string']); - - if (! $entry['dn']['tree']) { - /* - * The entry doesn't exists in the tree because it - * may be filtered ; as we ask for its display, we - * add all the same the entry in the tree - */ - $tree->addEntry($entry['dn']['string']); - $entry['dn']['tree'] = $tree->getEntry($entry['dn']['string']); - - } - - if ($entry['dn']['tree']) { - eval('$reader = new '.$_SESSION[APPCONFIG]->GetValue('appearance', 'entry_reader').'($ldapserver);'); - $entry['dn']['tree']->accept($reader); - - eval('$writer = new '.$_SESSION[APPCONFIG]->GetValue('appearance', 'entry_writer').'($ldapserver);'); - $entry['dn']['tree']->accept($writer); - } - } + $request['page']->setDN($request['dn']); + $request['page']->accept(); } else { - if ($ldapserver->isReadOnly()) + if ($app['server']->isReadOnly()) error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); - # Create a new empty entry - $entryfactoryclass = $_SESSION[APPCONFIG]->GetValue('appearance','entry_factory'); - eval('$entry_factory = new '.$entryfactoryclass.'();'); - $entry['dn']['tree'] = $entry_factory->newCreatingEntry(''); - - # Init the entry with incoming data - eval('$reader = new '.$_SESSION[APPCONFIG]->GetValue('appearance', 'entry_reader').'($ldapserver);'); - $entry['dn']['tree']->accept($reader); - - # Display the creating entry - eval('$writer = new '.$_SESSION[APPCONFIG]->GetValue('appearance', 'entry_writer').'($ldapserver);'); - $entry['dn']['tree']->accept($writer); + $request['page']->setContainer(get_request('container','REQUEST')); + $request['page']->accept(); } ?> diff --git a/htdocs/update.php b/htdocs/update.php index 58e34cd..77ad439 100644 --- a/htdocs/update.php +++ b/htdocs/update.php @@ -1,155 +1,60 @@ ''. For example, to - * delete the 'sn' attribute from an entry, the update array would look like this: - * Array ( - * sn => '' - * ) - * - * On success, redirect to template_engine.php. On failure, echo an error. - * * @package phpLDAPadmin + * @subpackage Page + * @see update_confirm.php */ + /** */ require './common.php'; -$entry = array(); -$entry['dn']['string'] = get_request('dn'); -$entry['dn']['encode'] = rawurlencode($entry['dn']['string']); +$request = array(); +$request['dn'] = get_request('dn','REQUEST',true); # If cancel was submited, got back to the edit display. if (get_request('cancel','REQUEST')) { - header(sprintf('Location: cmd.php?cmd=template_engine&server_id=%s&dn=%s',$ldapserver->server_id,$entry['dn']['encode'])); + header(sprintf('Location: cmd.php?cmd=template_engine&server_id=%s&dn=%s', + $app['server']->getIndex(),rawurlencode($request['dn']))); + die(); } -if ($ldapserver->isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +if (! $request['dn'] || ! $app['server']->dnExists($request['dn'])) + error(sprintf(_('The entry (%s) does not exist.'),$request['dn']),'error','index.php'); -$entry['update'] = get_request('update_array','POST',false,array()); -$entry['skip'] = get_request('skip_array','POST',false,array()); -$failed_attrs = array(); - -if (! is_array($entry['update'])) - error(_('update_array is malformed. This might be a phpLDAPadmin bug. Please report it.'),'error','index.php'); - -run_hook ('pre_update', - array('server_id'=>$ldapserver->server_id,'dn'=>$entry['dn']['string'],'update_array'=>$entry['update'])); - -# Check for delete attributes (indicated by the attribute entry appearing like this: attr => '' -foreach ($entry['update'] as $attr => $val) { - if (! is_array($val)) { - if (array_key_exists($attr,$entry['skip'])) { - unset($entry['update'][$attr]); - - } elseif ($val == '') { - $entry['update'][$attr] = array(); - - if (! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('delete attribute')),'error','index.php'); - - } else { # Skip change - $entry['update'][$attr] = $val; - - if (! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value') - && ! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete_value')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('modify attribute values')),'error','index.php'); - } - - } else { - if (array_key_exists($attr,$entry['skip'])) { - unset($entry['update'][$attr]); - - } else { - foreach ($val as $i => $v) - $entry['update'][$attr][$i] = $v; - - if (! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value') - && ! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete_value')) - error(sprintf('%s%s %s',_('This operation is not permitted by the configuration'),_(':'),_('modify attribute values')),'error','index.php'); - } - } -} - -# Call the custom callback for each attribute modification and verify that it should be modified. -foreach ($entry['update'] as $attr_name => $val) { - # Check to see if this is a unique Attribute - if ($badattr = $ldapserver->checkUniqueAttr($entry['dn']['string'],$attr_name,$val)) { - $href['search'] = sprintf('cmd.php?cmd=search&search=true&form=advanced&server_id=%s&filter=%s=%s', - $ldapserver->server_id,$attr_name,$badattr); - - error(sprintf(_('Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry.'), - $attr_name,$badattr,$entry['dn']['string'],$href['search']),'error','index.php'); - } - - if (run_hook('pre_attr_modify', - array('server_id'=>$ldapserver->server_id,'dn'=>$entry['dn']['string'],'attr_name'=>$attr_name,'new_value'=>$val)) !== true) { - - unset($entry['update'][$attr_name]); - $failed_attrs[$attr_name] = $val; - - } elseif ($ldapserver->isAttrReadOnly($attr)) { - error(sprintf(_('The attribute "%s" is flagged as read-only in the phpLDAPadmin configuration.'), - htmlspecialchars($attr_name)),'error','index.php'); - - } else { - // binary values - if (isset($_SESSION['submitform'][$attr_name])) { - foreach ($val as $i => $v) { - if (isset($_SESSION['submitform'][$attr_name][$v])) { - foreach ($_SESSION['submitform'][$attr_name][$v] as $file) { - foreach ($file as $data) { - $entry['update'][$attr_name][$i] = $data; - } - } - } - } - } - } -} +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setDN($request['dn']); +$request['page']->accept(); +$request['template'] = $request['page']->getTemplate(); # Perform the modification -$result = $ldapserver->modify($entry['dn']['string'],$entry['update']); +$result = $app['server']->modify($request['dn'],$request['template']->getLDAPmodify()); + if ($result) { # Fire the post modification event to the user's custom callback function. $mustRelogin = false; - foreach ($entry['update'] as $attr_name => $val) { - run_hook('post_attr_modify', - array('server_id'=>$ldapserver->server_id,'dn'=>$entry['dn']['string'],'attr_name'=>$attr_name,'new_value'=>$val)); + foreach ($request['template']->getLDAPmodify() as $attr_name => $val) { /* Was this a user's password modification who is currently * logged in? If so, they need to logout and log back in - * with the new password. - */ - if (0 === strcasecmp($attr_name,'userPassword') && - in_array($ldapserver->auth_type,array('cookie','session')) && - pla_compare_dns($ldapserver->getLoggedInDN(),$entry['dn']['string']) === 0) + * with the new password. */ + if (($attr_name == 'userpassword') && + in_array($app['server']->getValue('login','auth_type'),array('cookie','session')) && + pla_compare_dns($app['server']->getLogin(),$request['dn']) === 0) $mustRelogin = true; } - run_hook('post_update', - array('server_id'=>$ldapserver->server_id,'dn'=>$entry['dn']['string'],'update_array'=>$entry['update'])); - # If the user password was changed, not tell the to relogin. if ($mustRelogin) { - $ldapserver->unsetLoginDN(); - unset_lastactivity($ldapserver); - include './header.php'; - + $app['server']->logout('user'); + unset_lastactivity($app['server']); echo ''; echo '
'; @@ -158,7 +63,7 @@ if ($result) { echo '

'; echo _('Since you changed your password, you must now login again with your new password.'); echo '
'; - printf('%s...',$ldapserver->server_id, _('Login')); + printf('%s...',$app['server']->getIndex(), _('Login')); echo '

'; echo ''; echo ''; @@ -166,21 +71,13 @@ if ($result) { exit; } - $redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$ldapserver->server_id,$entry['dn']['encode']); + $redirect_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', + $app['server']->getIndex(),rawurlencode($request['dn'])); - foreach ($entry['update'] as $attr => $junk) - $redirect_url .= "&modified_attrs[]=$attr"; - - foreach ($failed_attrs as $attr => $junk) - $redirect_url .= "&failed_attrs[]=$attr"; + foreach ($request['template']->getLDAPmodify() as $attr => $junk) + $redirect_url .= sprintf('&modified_attrs[]=%s',$attr); header("Location: $redirect_url"); die(); - -} else { - system_message(array( - 'title'=>_('Could not perform ldap_modify operation.'), - 'body'=>ldap_error_msg($ldapserver->error(),$ldapserver->errno()), - 'type'=>'error')); } ?> diff --git a/htdocs/update_confirm.php b/htdocs/update_confirm.php index dcfc4d0..e9f7bf6 100644 --- a/htdocs/update_confirm.php +++ b/htdocs/update_confirm.php @@ -1,321 +1,161 @@ isReadOnly()) - error(_('You cannot perform updates while server is in read-only mode'),'error','index.php'); +$request = array(); +$request['dn'] = get_request('dn','REQUEST',true); -/***************/ -/* get entry */ -/***************/ +if (! $request['dn'] || ! $app['server']->dnExists($request['dn'])) + error(sprintf(_('The entry (%s) does not exist.'),$request['dn']),'error','index.php'); -$entry = array(); -$entry['dn']['string'] = get_request('dn'); -$entry['dn']['encode'] = rawurlencode($entry['dn']['string']); +$request['page'] = new PageRender($app['server']->getIndex(),get_request('template','REQUEST',false,'none')); +$request['page']->setDN($request['dn']); +$request['page']->accept(); +$request['template'] = $request['page']->getTemplate(); -if (! $entry['dn']['string'] || ! $ldapserver->dnExists($entry['dn']['string'])) - error(sprintf(_('The entry (%s) does not exist.'),htmlspecialchars($entry['dn']['string'])),'error','index.php'); +$request['page']->drawTitle(get_rdn($request['template']->getDN())); +$request['page']->drawSubTitle(); -$tree = get_cached_item($ldapserver->server_id,'tree'); -$entry['ldap'] = null; -if ($tree) { - $entry['ldap'] = $tree->getEntry($entry['dn']['string']); - - if (! $entry['ldap']) - $tree->addEntry($entry['dn']['string']); - - $entry['ldap'] = $tree->getEntry($entry['dn']['string']); -} - -if (! $entry['ldap'] || $entry['ldap']->isReadOnly()) - error(sprintf(_('The entry (%s) is in readonly mode.'),htmlspecialchars($entry['dn']['string'])),'error','index.php'); - -/***************/ -/* old values */ -/***************/ - -$entry['values']['old'] = array(); -foreach ($entry['ldap']->getAttributes() as $old_attr) { - $name = $old_attr->getName(); - $entry['values']['old'][$name] = array(); - - foreach ($old_attr->getValues() as $old_val) { - if (strlen($old_val) > 0) - $entry['values']['old'][$name][] = $old_val; - } -} - -/***************/ -/* new values */ -/***************/ - -eval('$reader = new '.$_SESSION[APPCONFIG]->GetValue('appearance','entry_reader').'($ldapserver);'); -$entry['ldap']->accept($reader); - -$entry['values']['new'] = array(); -foreach ($entry['ldap']->getAttributes() as $new_attr) { - if ($new_attr->hasBeenModified()) { - $name = $new_attr->getName(); - - if (!isset($entry['values']['old'][$name])) - $entry['values']['old'][$name] = array(); - - $entry['values']['new'][$name] = array(); - - foreach ($new_attr->getValues() as $i => $new_val) { - if ($new_attr instanceof BinaryAttribute) { - $n = $new_attr->getFileName($i); - $p = $new_attr->getFilePath($i); - $new_val = md5("$n|$p"); - } - - if (strlen($new_val) > 0) - $entry['values']['new'][$name][] = $new_val; - } - } -} - -/************************/ -/* objectClass deletion */ -/************************/ - -$oc_to_delete = array(); -$attr_to_delete = array(); - -// if objectClass attribute is modified -if (isset($entry['values']['new']['objectClass'])) { - if (!isset($entry['values']['old']['objectClass'])) - error(_('An entry should have one structural objectClass.'),'error','index.php'); - - // deleted objectClasses - foreach ($entry['values']['old']['objectClass'] as $oldOC) { - if (!in_array($oldOC, $entry['values']['new']['objectClass'])) { - $oc_to_delete[] = $oldOC; - } - } - // search the attributes used by each deleted objecClass - // we must maybe delete these attributes - foreach ($oc_to_delete as $oc) { - $soc = $ldapserver->getSchemaObjectClass($oc); - if ($soc) { - $ocs = $ldapserver->SchemaObjectClasses(); - $ma = $soc->getMustAttrs($ocs); - foreach ($ma as $a) { - if (!isset($attr_to_delete[$a->getName()])) { - $attr_to_delete[$a->getName()] = $a; - } - } - $ma = $soc->getMayAttrs($ocs); - foreach ($ma as $a) { - if (!isset($attr_to_delete[$a->getName()])) { - $attr_to_delete[$a->getName()] = $a; - } - } - } - } - // if an attribute is still used by an objectClass we don't delete, - // we don't delete this attribute - foreach ($attr_to_delete as $name => $ad) { - $found = false; - $at = $ldapserver->getSchemaAttribute($name); - foreach ($at->getUsedInObjectClasses() as $oc) { - if (in_array($oc, $entry['values']['new']['objectClass'])) { - $found = true; - break; - } - } - if (!$found) { - foreach ($at->getRequiredByObjectClasses() as $oc) { - if (in_array($oc, $entry['values']['new']['objectClass'])) { - $found = true; - break; - } - } - } - if ($found) { - unset($attr_to_delete[$name]); - } else { - if (isset($entry['values']['old'][$name]) && (count($entry['values']['old'][$name]) > 0)) { - $found = true; - } else { - foreach ($entry['values']['new'] as $attr_name => $attr_values) { - if ($name == $attr_name) { - $found = true; - break; - } - } - } - if (!$found) { - unset($attr_to_delete[$name]); - } else { - $entry['values']['new'][$name] = array(); - $attr_to_delete[$name] = $name; - } - } - } -} - -/****************/ -/* update array */ -/****************/ - -eval('$writer = new '.$_SESSION[APPCONFIG]->GetValue('appearance','entry_writer').'($ldapserver);'); -$writer->draw('Title',$entry['ldap']); -$writer->draw('Subtitle',$entry['ldap']); - -echo "\n\n"; - -run_hook('pre_update_array_processing', - array('server_id'=>$ldapserver->server_id,'dn'=>$entry['dn']['string'],'old_values'=>$entry['values']['old'],'new_values'=>$entry['values']['new'])); - -/***************/ -/* confirm */ -/***************/ - -if (count($entry['values']['new']) > 0) { - echo '
'; +# Confirm the updates +if (count($request['template']->getLDAPmodify(true))) { echo '
'; echo _('Do you want to make these changes?'); echo '

'; - # echo "\n\n"; echo '
'; echo ''; + printf('',$app['server']->getIndex()); + printf('',htmlspecialchars($request['dn'])); echo "\n"; + + $request['page']->drawHiddenAttributes(); + echo ''; echo "\n"; printf('', _('Attribute'),_('Old Value'),_('New Value'),_('Skip')); - echo "\n\n"; - $counter = 0; - foreach ($entry['values']['new'] as $attr => $new_val) { + $counter = 0; + foreach ($request['template']->getLDAPmodify(true) as $attribute) { $counter++; printf('',$counter%2 ? 'even' : 'odd'); - echo ''; + printf('',$attribute->getFriendlyName()); + + # Show OLD Values echo ''; - echo ''; + # Show NEW Values + echo ''; + + # Show SKIP Option $input_disabled = ''; - if (in_array($attr, $attr_to_delete)) $input_disabled = 'disabled="disabled"'; $input_onclick = ''; - if ($attr == 'objectClass' && (count($attr_to_delete) > 0)) { + + if ($attribute->isForceDelete()) + $input_disabled = 'disabled="disabled"'; + + if ($attribute->getName() == 'objectclass' && (count($request['template']->getForceDeleteAttrs()) > 0)) { $input_onclick = 'onclick="if (this.checked) {'; - foreach ($attr_to_delete as $ad_name) { - $input_onclick .= "document.forms[0].elements['skip_array[$ad_name]'].disabled = false;"; - $input_onclick .= "document.forms[0].elements['skip_array[$ad_name]'].checked = true;"; + + foreach ($request['template']->getForceDeleteAttrs() as $ad_name) { + $input_onclick .= sprintf("document.getElementById('skip_array_%s').disabled = false;",$ad_name->getName()); + $input_onclick .= sprintf("document.getElementById('skip_array_%s').checked = true;",$ad_name->getName()); } + $input_onclick .= '} else {'; - foreach ($attr_to_delete as $ad_name) { - $input_onclick .= "document.forms[0].elements['skip_array[$ad_name]'].checked = false;"; - $input_onclick .= "document.forms[0].elements['skip_array[$ad_name]'].disabled = true;"; + foreach ($request['template']->getForceDeleteAttrs() as $ad_name) { + $input_onclick .= sprintf("document.getElementById('skip_array_%s').checked = false;",$ad_name->getName()); + $input_onclick .= sprintf("document.getElementById('skip_array_%s').disabled = true;",$ad_name->getName()); } $input_onclick .= '}"'; } - printf('',htmlspecialchars($attr),$input_disabled,$input_onclick); - echo ''."\n\n"; + + printf('', + htmlspecialchars($attribute->getName()),htmlspecialchars($attribute->getName()),$input_disabled,$input_onclick); + echo ''; + echo "\n\n"; } + echo '
%s%s%s%s
'; - echo $_SESSION[APPCONFIG]->getFriendlyHTML($attr); - echo '%s'; - if (strcasecmp($attr,'userPassword') == 0) { - foreach ($entry['values']['old'][$attr] as $key => $value) { - if (obfuscate_password_display(get_enc_type($entry['values']['old'][$attr][$key]))) - echo preg_replace('/./','*',$entry['values']['old'][$attr][$key]).'
'; - else - echo nl2br(htmlspecialchars($entry['values']['old'][$attr][$key])).'
'; - } + if (! $attribute->getOldValues()) + printf('[%s]',_('attribute doesnt exist')); - } elseif (is_array($entry['values']['old'][$attr])) - foreach ($entry['values']['old'][$attr] as $v) - echo nl2br(htmlspecialchars($v)).'
'; + foreach ($attribute->getOldValues() as $key => $value) { + # For multiple values, we'll highlight the changed ones + if ((count($attribute->getOldValues()) > 5) && in_array($value,$attribute->getRemovedValues()) && count($attribute->getValues())) + echo ''; - else - echo nl2br(htmlspecialchars($entry['values']['old'][$attr])).'
'; + $request['page']->draw('OldValue',$attribute,$key); - echo '
'; + # For multiple values, close the highlighting + if ((count($attribute->getOldValues()) > 5) && in_array($value,$attribute->getRemovedValues()) && count($attribute->getValues())) + echo ''; - # Is this a multi-valued attribute? - if (is_array($new_val)) { - if (strcasecmp($attr,'userPassword') == 0) { - foreach ($entry['values']['new'][$attr] as $key => $value) { - if (isset($new_val[$key])) { - if (obfuscate_password_display(get_enc_type($new_val[$key]))) - echo preg_replace('/./','*',$new_val[$key]).'
'; - else - echo htmlspecialchars($new_val[$key]).'
'; - } - } - - } else { - - foreach ($new_val as $i => $v) { - echo nl2br(htmlspecialchars($v)).'
'; - } - } - - if (! $new_val) { - printf('%s',_('[attribute deleted]')); - } - - } elseif ($new_val == '') - printf('%s',_('[attribute deleted]')); + echo '
'; + } echo '
'; + + if (! $attribute->getValueCount() || $attribute->isForceDelete()) + printf('[%s]',_('attribute deleted')); + + foreach ($attribute->getValues() as $key => $value) { + # For multiple values, we'll highlight the changed ones + if ((count($attribute->getValues()) > 5) && in_array($value,$attribute->getAddedValues())) + echo ''; + + $request['page']->draw('CurrentValue',$attribute,$key); + + # For multiple values, close the highlighting + if ((count($attribute->getValues()) > 5) && in_array($value,$attribute->getAddedValues())) + echo ''; + + echo '
'; + } + + echo '
'; - printf('',$ldapserver->server_id); - printf('',$entry['dn']['string']); - - foreach ($entry['values']['new'] as $attr => $val) { - if (count($val) > 0) { - if (is_array($val)) { - foreach($val as $i => $v) - printf('', - htmlspecialchars($attr),$i,htmlspecialchars($v)); - } else { - printf('', - htmlspecialchars($attr),htmlspecialchars($val)); - } - } else { - printf('', - htmlspecialchars($attr)); - } - } - echo '
'; printf('',_('Commit')); printf('',_('Cancel')); echo '
'; + echo '
'; - if (count($attr_to_delete) > 0) { + if (count($request['template']->getForceDeleteAttrs()) > 0) { echo ''; - printf('',_('The deletion of objectClass(es)'),_(':')); - printf('',implode(', ', $oc_to_delete)); + printf('',_('The deletion of objectClass(es)')); + printf('',implode(', ',$request['template']->getAttribute('objectclass')->getRemovedValues())); echo ''; - printf('',_('will delete the attribute(s)'),_(':')); + printf('',_('will delete the attribute(s)')); echo '
%s%s%s%s:%s
%s%s%s:'; + $i = 0; - foreach ($attr_to_delete as $attr) { - if ($i++ != 0) echo ', '; - echo $_SESSION[APPCONFIG]->getFriendlyHTML($attr); + foreach ($request['template']->getForceDeleteAttrs() as $attribute) { + if ($i++ != 0) + echo ', '; + + echo $_SESSION[APPCONFIG]->getFriendlyHTML($attribute); } echo '
'; } @@ -326,7 +166,7 @@ if (count($entry['values']['new']) > 0) { echo '
'; echo _('You made no changes'); $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', - $ldapserver->server_id,$entry['dn']['encode']); + $app['server']->getIndex(),rawurlencode($request['dn'])); printf(' %s.',htmlspecialchars($href),_('Go back')); echo '
'; diff --git a/htdocs/view_jpeg_photo.php b/htdocs/view_jpeg_photo.php index 8dcdfd2..7be7133 100644 --- a/htdocs/view_jpeg_photo.php +++ b/htdocs/view_jpeg_photo.php @@ -1,39 +1,79 @@ GetValue('jpeg','tmpdir'),$file['name']); -if (! file_exists($file['name'])) - error(sprintf('%s%s %s',_('No such file'),_(':'),htmlspecialchars($file['name'])),'error','index.php'); + break; -$file['handle'] = fopen($file['name'],'r'); -$file['data'] = fread($file['handle'],filesize($file['name'])); -fclose($file['handle']); + case 'ldap': + default: + $jpeg_data = $app['server']->getDNAttrValues($request['dn'],null,LDAP_DEREF_NEVER,array($request['attr'])); + + break; +} + +if (! isset($jpeg_data[$request['attr']][$request['index']])) { + if (function_exists('imagecreate')) { + $im = imagecreate(160,30); + if (is_resource($im)) { + header('Content-type: image/png'); + + # Set the background + imagecolorallocatealpha($im,0xFC,0xFC,0xFE,127); + $text_color = imagecolorallocate($im,0,0,0); + imagestring($im,4,3,5,_('Image not available'),$text_color); + imagepng($im); + imagedestroy($im); + + die(); + } + } + + # We cant display an error, but we can set a system message, which will be display on the next page render. + system_message(array( + 'title'=>_('No image available'), + 'body'=>sprintf(_('Could not fetch jpeg data from LDAP server for attribute [%s].'),$request['attr']), + 'type'=>'warn')); + + die(); +} + +if (! is_array($jpeg_data[$request['attr']])) + $jpeg_data[$request['attr']] = array($jpeg_data[$request['attr']]); $obStatus = ob_get_status(); if (isset($obStatus['type']) && $obStatus['type'] && $obStatus['status']) ob_end_clean(); -Header('Content-type: image/jpeg'); -Header('Content-disposition: inline; filename=jpeg_photo.jpg'); -echo $file['data']; +header(sprintf('Content-type: %s',$request['type'])); +header(sprintf('Content-disposition: inline; filename="%s"',$request['filename'])); +echo $jpeg_data[$request['attr']][$request['index']]; +die(); ?> diff --git a/htdocs/welcome.php b/htdocs/welcome.php index 078a88c..051d205 100644 --- a/htdocs/welcome.php +++ b/htdocs/welcome.php @@ -1,12 +1,14 @@
'; $links = ''; -if ($_SESSION[APPCONFIG]->isCommandAvailable('external_links')) { - if ($_SESSION[APPCONFIG]->isCommandAvailable('external_links', 'credits')) { - $links .= sprintf('%s',get_href('credits'),_('Credits')); - } +if ($_SESSION[APPCONFIG]->isCommandAvailable('external_links','credits')) + $links .= sprintf('%s',get_href('credits'),_('Credits')); - if ($_SESSION[APPCONFIG]->isCommandAvailable('external_links', 'help')) { - if ($links) $links .= ' | '; - $links .= sprintf('%s',get_href('documentation'),_('Documentation')); - } +if ($_SESSION[APPCONFIG]->isCommandAvailable('external_links','help')) { + if ($links) $links .= ' | '; + $links .= sprintf('%s',get_href('documentation'),_('Documentation')); +} - if ($_SESSION[APPCONFIG]->isCommandAvailable('external_links', 'donation')) { - if ($links) $links .= ' | '; - $links .= sprintf('%s',get_href('donate'),_('Donate')); - } +if ($_SESSION[APPCONFIG]->isCommandAvailable('external_links','donation')) { + if ($links) $links .= ' | '; + $links .= sprintf('%s',get_href('donate'),_('Donate')); } if ($links) { diff --git a/index.php b/index.php index a903b2e..716e607 100644 --- a/index.php +++ b/index.php @@ -1,5 +1,5 @@ " - * @param $first_child is this the first child ? - * @param $last_child is this the last child ? + * Draw a node of the tree + * + * @param dn The Base DN to draw + * @param string $level a string of 0 and 1 ; $level == "000101" will draw " | |" + * @param boolean $first_child is the first child entry, which is normally the "Create New Entry" option + * @param boolean $last_child is the last child entry, which is normally the "Create New Entry" option */ - protected function draw_dn($dn,$level=0,$first_child=true,$last_child=true) { + protected function draw_dn($dn,$level,$first_child=true,$last_child=true) { if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',33,__FILE__,__LINE__,__METHOD__,$dn,$level); + debug_log('Entered with (%s,%s,%s,%s)',33,__FILE__,__LINE__,__METHOD__,$dn,$level,$first_child,$last_child); - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); - # level pre-treatment + # Level pre-treatment $code = ''; if (is_string($level)) { for ($i=0; $i 0) { + } elseif ($level > 0) $code = '0' * $level; - } + $level = strlen($code); - # get entry to display as node + # Get entry to display as node $entry = $this->getEntry($dn); + + # If the entry doesnt exist, we'll add it. if (! $entry) { $this->addEntry($dn); $entry = $this->getEntry($dn); } + # If the entry doesnt exist in the server, then return here with an empty string. if (! $entry) return ''; - # some informations - $rdn = $entry->getRdn(); - $encoded_dn = rawurlencode($dn); - $formatted_dn = $this->get_formatted_dn($entry,$level-1); - $child_count = $this->get_children_number($entry); + # Get our children. + $child_count = $this->readChildrenNumber($dn); $nb = 0; - if ($first_child) $nb += 1; - if ($last_child) $nb += 2; + if ($first_child) + $nb += 1; + if ($last_child) + $nb += 2; - # informations array[$nb] - # nb == 1 => the node is the first child - # nb == 2 => the node is the last child - # nb == 3 => the node is the unique child - # nb == 0 => the node is a child - $expand_imgs = array('js/phplayersmenu/menuimages/tree_expand.png', 'js/phplayersmenu/menuimages/tree_expand.png', 'js/phplayersmenu/menuimages/tree_expand_corner.png', ($level > 0) ? 'js/phplayersmenu/menuimages/tree_expand_corner.png' : 'js/phplayersmenu/menuimages/tree_expand_corner_first.png'); - $collapse_imgs = array('js/phplayersmenu/menuimages/tree_collapse.png', 'js/phplayersmenu/menuimages/tree_collapse.png', 'js/phplayersmenu/menuimages/tree_collapse_corner.png', ($level > 0) ? 'js/phplayersmenu/menuimages/tree_collapse_corner.png' : 'js/phplayersmenu/menuimages/tree_collapse_corner_first.png'); - $tree_imgs = array('js/phplayersmenu/menuimages/tree_split.png', 'js/phplayersmenu/menuimages/tree_split.png', 'js/phplayersmenu/menuimages/tree_corner.png', 'js/phplayersmenu/menuimages/tree_corner.png'); - $new_code = array('1', '1', '0', '0'); + $imgs['expand'] = array(JSDIR.'phplayersmenu/menuimages/tree_expand.png', + JSDIR.'phplayersmenu/menuimages/tree_expand.png', + JSDIR.'phplayersmenu/menuimages/tree_expand_corner.png', + ($level > 0) ? JSDIR.'phplayersmenu/menuimages/tree_expand_corner.png' : JSDIR.'phplayersmenu/menuimages/tree_expand_corner_first.png'); - # links - $edit_href_params = htmlspecialchars(sprintf('cmd=template_engine&server_id=%s&dn=%s',$this->server_id,$encoded_dn)); - $edit_href = "cmd.php?$edit_href_params"; - $openclose_params = htmlspecialchars(sprintf('server_id=%s&dn=%s&code=%s',$this->server_id,$encoded_dn,$code.$new_code[$nb])); + $imgs['collapse'] = array(JSDIR.'phplayersmenu/menuimages/tree_collapse.png', + JSDIR.'phplayersmenu/menuimages/tree_collapse.png', + JSDIR.'phplayersmenu/menuimages/tree_collapse_corner.png', + ($level > 0) ? JSDIR.'phplayersmenu/menuimages/tree_collapse_corner.png' : JSDIR.'phplayersmenu/menuimages/tree_collapse_corner_first.png'); - # each node has a unique id based on dn - $node_id = 'node'.base64_encode($ldapserver->server_id.'-'.$dn); + $imgs['tree'] = array(JSDIR.'phplayersmenu/menuimages/tree_split.png', + JSDIR.'phplayersmenu/menuimages/tree_split.png', + JSDIR.'phplayersmenu/menuimages/tree_corner.png', + JSDIR.'phplayersmenu/menuimages/tree_corner.png'); + + /** Information on array[$nb] + * nb == 1 => the node is the first child + * nb == 2 => the node is the last child + * nb == 3 => the node is the unique child + * nb == 0 => the node is a child */ + $new_code = array('1','1','0','0'); + + # Links + $parms['openclose'] = htmlspecialchars(sprintf('server_id=%s&dn=%s&code=%s%s',$this->getServerID(),rawurlencode($dn),$code,$new_code[$nb])); + $parms['edit'] = htmlspecialchars(sprintf('cmd=template_engine&server_id=%s&dn=%s',$this->getServerID(),rawurlencode($dn))); + $href = sprintf('cmd.php?%s',$parms['edit']); + + # Each node has a unique id based on dn + $node_id = sprintf('node%s',base64_encode(sprintf('%s-%s',$server->getIndex(),$dn))); $node_id = str_replace('=','_',$node_id); if ($level == 0) printf('',$this->getDepth()+3-1); printf(''; - echo '
'; - if ($entry->isOpened()) { - $this->draw_children($entry,$code.$new_code[$nb]); - } + echo '
'; - if ($level == 0) { + printf('
',$node_id,($entry->isOpened() ? 'block' : 'none')); + if ($entry->isOpened()) + $this->draw_children($entry,$code.$new_code[$nb]); + + echo '
'; + + if ($level == 0) echo ''; - } } + /** + * Expand and draw a child entry, when it is clicked on. This is using AJAX just to render this section of the tree. + */ public function draw_children($parent_entry,$code) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s)',33,__FILE__,__LINE__,__METHOD__,$parent_entry,$code); $children = array(); - foreach($parent_entry->getChildren() as $childDn) - $children[] = $this->getEntry($childDn); + foreach ($parent_entry->getChildren() as $child) { + if (! $this->getEntry($child)) + $this->addEntry($child); - $first_child = $this->get_plm_before_first_child($parent_entry,$code); - $last_child = $this->get_plm_after_last_child($parent_entry,$code); + array_push($children,$this->getEntry($child)); + } + + $first_child = $this->create_before_child($parent_entry,$code); + $last_child = $this->create_after_child($parent_entry,$code); # If compression is on, we need to compress this output - but only if called by draw_tree_node if (function_exists('isCompress') && isCompress() && get_request('cmd','REQUEST') == 'draw_tree_node') @@ -141,7 +169,12 @@ class AJAXTree extends PLMTree { $first = ($i == 0) && (! $first_child); $last = ($i == (count($children)-1)) && (! $last_child); - $this->draw_dn($children[$i]->getDn(),$code,$first,$last); + if (is_object($children[$i])) + $this->draw_dn($children[$i]->getDN(),$code,$first,$last); + else + echo '
problem getting DN entry from ldap'; + + echo "\n"; } echo $last_child; @@ -154,232 +187,110 @@ class AJAXTree extends PLMTree { } /** - * return the indentation bafore a node + * Return the indentation before a node + * * @param $code a string of 0 and 1 ; $code == "000101" will return " | |" */ protected function get_indentation($code) { $indent = ''; - for ($i=0; $i',JSDIR); + break; + + case '1': + $indent .= sprintf('| ',JSDIR); + break; } } return $indent; } + /** + * Draw the javascript to support the tree. + */ protected function draw_javascript() { - echo ' - - '; + printf('',JSDIR); + printf('',JSDIR); } - protected function get_plm_before_first_child($entry,$level) { - if (strlen($level) == 0) return ''; + /** + * Draw the "Create New Entry" item before the children. + */ + private function create_before_child($entry,$level) { + if (strlen($level) == 0) + return ''; - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); $output = ''; - if (!$ldapserver->isReadOnly() && ($entry->getChildrenNumber() > 10) && ($ldapserver->isShowCreateEnabled())) { - $encoded_dn = rawurlencode($entry->getDn()); - $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&container=%s',$ldapserver->server_id,$encoded_dn); - - $output .= $this->get_indentation($level); - $output .= '--'; - $output .= ''; - $output .= sprintf('->',IMGDIR); - $output .= ''; - $output .= ' '; - $output .= ''; - $output .= _('Create new entry here'); - $output .= ''; - } + if (! $server->isReadOnly() && ! $entry->isLeaf() && (count($entry->getChildren()) > 10) && $this->getServer()->isShowCreateEnabled() + && $_SESSION[APPCONFIG]->getValue('appearance','show_top_create')) + $output = $this->draw_create_new_entry($entry,$level,JSDIR.'phplayersmenu/menuimages/tree_split.png'); return $output; } - protected function get_plm_after_last_child($entry,$level) { - if (strlen($level) == 0) return ''; + /** + * Draw the "Create New Entry" item after the children. + */ + private function create_after_child($entry,$level) { + if (strlen($level) == 0) + return ''; - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); $output = ''; - if (!$ldapserver->isReadOnly() && !$entry->isLeaf() && $ldapserver->isShowCreateEnabled()) { - $encoded_dn = rawurlencode($entry->getDn()); - $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&container=%s',$ldapserver->server_id,$encoded_dn); - - $output .= $this->get_indentation($level); - $output .= '--'; - $output .= ''; - $output .= sprintf('->',IMGDIR); - $output .= ''; - $output .= ' '; - $output .= ''; - $output .= _('Create new entry here'); - $output .= ''; - } + if (! $server->isReadOnly() && ! $entry->isLeaf() && $this->getServer()->isShowCreateEnabled()) + $output = $this->draw_create_new_entry($entry,$level,JSDIR.'phplayersmenu/menuimages/tree_corner.png'); return $output; } + + /** + * Draw the "Create New Entry" item. + */ + private function draw_create_new_entry($entry,$level,$img) { + $output = ''; + + $href = sprintf('cmd=template_engine&server_id=%s&container=%s',$this->getServerID(),rawurlencode($entry->getDN())); + + $output .= $this->get_indentation($level); + $output .= sprintf('--',$img); + $output .= sprintf('',htmlspecialchars($href),$entry->getDN()); + $output .= sprintf('->',IMGDIR); + $output .= ''; + $output .= ' '; + + if (isAjaxEnabled()) + $output .= sprintf('', + htmlspecialchars($href),_('Create new entry here'), + htmlspecialchars($href),_('Loading')); + else + $output .= sprintf('',htmlspecialchars($href),_('Create new entry here')); + + $output .= _('Create new entry here'); + $output .= ''; + + return $output; + } + + /** + * List the items in the tree that are open + * + * @return array List of open nodes + */ + public function listOpenItems() { + $result = array(); + + foreach ($this->entries as $dn => $value) + if ($value->isOpened()) + array_push($result,$value->getDN()); + + return $result; + } } ?> diff --git a/lib/Attribute.php b/lib/Attribute.php index 492203c..0ac9998 100644 --- a/lib/Attribute.php +++ b/lib/Attribute.php @@ -1,95 +1,227 @@ name = $name; + # Public for sorting + public $page = 1; + public $order = 255; + public $ordersort = 255; + public $rdn = false; - if (is_string($values) && (strlen($values) > 0)) $this->values = array($values); - elseif (is_array($values)) $this->values = $values; - else $this->values = array(); + # Schema Aliases for this attribute (stored in lowercase) + protected $aliases = array(); - $this->min_value_count = -1; - $this->max_value_count = -1; + # Configuration for automatically generated values + protected $autovalue = array(); + protected $postvalue = array(); - $this->entry = null; - $this->internal = false; - $this->modified = false; - $this->visible = true; - $this->readonly = false; + public function __construct($name,$values,$server_id,$source=null) { + $server = $_SESSION[APPCONFIG]->getServer($server_id); - $this->friendly_name = ''; - $this->description = ''; - $this->icon = ''; - $this->hint = ''; + $sattr = $server->getSchemaAttribute($name); + if ($sattr) { + $this->name = $sattr->getName(false); + $this->setLDAPdetails($sattr); - $this->size = 0; - $this->maxlength = 0; + } else + $this->name = $name; - $this->properties = array(); + $this->source = $source; + + # XML attributes are shown by default + switch ($source) { + case 'XML': $this->show(); + $this->setXML($values); + + break; + + default: + if (! isset($values['values'])) + debug_dump_backtrace('no index "values"',1); + + $this->initValue($values['values']); + } + + # Should this attribute be hidden + if ($server->isAttrHidden($this->name)) + $this->forcehide = true; + + # Should this attribute value be read only + if ($server->isAttrReadOnly($this->name)) + $this->readonly = true; + + # Should this attribute value be unique + if ($server->isAttrUnique($this->name)) + $this->unique = true; } - public function getName() { - return $this->name; + /** + * Return the name of the attribute. + * + * @param boolean $lower - Return the attribute in normal or lower case (default lower) + * @param boolean $real - Return the real attribute name (with ;binary, or just the name) + * @return string Attribute name + */ + public function getName($lower=true,$real=false) { + if ($real) + return $lower ? strtolower($this->name) : $this->name; + else + return $lower ? strtolower($this->real_attr_name()) : $this->real_attr_name(); } public function getValues() { return $this->values; } + public function getOldValues() { + return $this->oldvalues; + } + public function getValueCount() { return count($this->values); } - public function addValue($new_val, $i = -1) { - if ($i < 0) $i = $this->getValueCount(); + /** + * Autovalue is called after the attribute is initialised, and thus the values from the ldap server will be set. + */ + public function autoValue($new_val) { + if ($this->values) + return; + + $this->values = $new_val; + } + + public function initValue($new_val) { + if ($this->values || $this->oldvalues) { + debug_dump(array('new_val'=>$new_val,'this'=>$this)); + debug_dump_backtrace('new and/or old values are set',1); + } + + $this->values = $new_val; + } + + public function clearValue() { + $this->values = array(); + } + + public function setValue($new_val) { + if ($this->values) { + if ($this->oldvalues && ($new_val != $this->values)) { + debug_dump($this); + debug_dump_backtrace('old values are set',1); + } else + $this->oldvalues = $this->values; + } + + if ($new_val == $this->values) + return; + + $this->values = $new_val; + $this->justModified(); + } + + public function addValue($new_val,$i=-1) { + if ($i < 0) + $i = $this->getValueCount(); + $old_val = $this->getValue($i); - if (is_null($old_val) || ($old_val != $new_val)) $this->justModified(); + if (is_null($old_val) || ($old_val != $new_val)) + $this->justModified(); + $this->values[$i] = $new_val; } + public function delValue($i=-1) { + if ($i < 0) + $this->setValue(array()); + + if (! $this->hasBeenModified()) + $this->oldvalues = $this->values; + + if (isset($this->values[$i])) { + unset($this->values[$i]); + $this->values = array_values($this->values); + $this->justModified(); + } + } + public function getValue($i) { - if (isset($this->values[$i])) return ''.$this->values[$i]; - else return null; + if (isset($this->values[$i])) + return $this->values[$i]; + else + return null; + } + + public function getOldValue($i) { + if (isset($this->oldvalues[$i])) + return $this->oldvalues[$i]; + else + return null; } public function getMinValueCount() { @@ -108,21 +240,11 @@ class Attribute { $this->max_value_count = $max; } - public function getEntry() { - return $this->entry; - } - - public function setEntry($entry) { - $this->entry = $entry; - - global $ldapserver; - $schema_attr = null; - if ($entry) { - $schema_attr = $ldapserver->getSchemaAttribute($this->getName(), $entry->getDn()); - } - if ($schema_attr && $schema_attr->getIsSingleValue()) { - $this->setMaxValueCount(1); - } + public function haveMoreValues() { + if ($this->getMaxValueCount() < 0 || ($this->getValueCount() < $this->getMaxValueCount())) + return true; + else + return false; } public function justModified() { @@ -133,6 +255,17 @@ class Attribute { return $this->modified; } + public function isForceDelete() { + return $this->forcedelete; + } + + public function setForceDelete() { + $this->forcedelete = true; + $this->oldvalues = $this->values; + $this->values = array(); + $this->justModified(); + } + public function isInternal() { return $this->internal; } @@ -142,19 +275,74 @@ class Attribute { } public function isRequired() { - if ($this->getMinValueCount() > 0) { + if ($this->getMinValueCount() > 0) return true; - } elseif ($this->isRdn()) { + elseif ($this->ldaptype == 'must') return true; - } else { + elseif ($this->isRDN()) + return true; + else return false; + } + + public function isMay() { + if (($this->ldaptype == 'may') && ! $this->isRequired()) + return true; + else + return false; + } + + public function setType($type) { + $this->type = strtolower($type); + } + + public function getType() { + return $this->type; + } + + public function setLDAPtype($type) { + $this->ldaptype = strtolower($type); + } + + public function getLDAPtype() { + return $this->ldaptype; + } + + public function setProperties($properties) { + foreach ($properties as $index => $value) { + if ($index == 'maxvalnb') { + $this->setMaxValueCount($value); + continue; + + } elseif ($index == 'minvalnb') { + $this->setMinValueCount($value); + continue; + + } elseif ($index == 'maxlength') { + $this->setMinValueCount($value); + continue; + + } elseif ($index == 'hidden') { + $this->visible = $value; + continue; + + } elseif (in_array($index,array('cols','rows'))) { + # @todo To be implemented + continue; + } + + if (isset($this->$index)) + $this->$index = $value; + else { + debug_dump($this); + debug_dump_backtrace(sprintf('Unknown property (%s) with value (%s) for (%s)',$index,$value,$this->getName()),1); + } } } public function setRequired() { - if ($this->getMinValueCount() <= 0) { + if ($this->getMinValueCount() <= 0) $this->setMinValueCount(1); - } } public function setOptional() { @@ -170,7 +358,7 @@ class Attribute { } public function isVisible() { - return $this->visible; + return $this->visible && (! $this->forcehide); } public function hide() { @@ -181,17 +369,15 @@ class Attribute { $this->visible = true; } - public function setFriendlyName($name) { - if ($name != $this->name) { - $this->friendly_name = $name; - } + public function haveFriendlyName() { + return $_SESSION[APPCONFIG]->haveFriendlyName($this); } public function getFriendlyName() { - if ($this->friendly_name) - return $this->friendly_name; + if ($this->display) + return $this->display; else - return $_SESSION[APPCONFIG]->getFriendlyName(real_attr_name($this->name)); + return $_SESSION[APPCONFIG]->getFriendlyName($this); } public function setDescription($description) { @@ -234,36 +420,267 @@ class Attribute { $this->size = $size; } - public function setProperty($name, $value) { - $this->properties[$name] = $value; + public function getSpacer() { + return $this->spacer; } - public function delProperty($name) { - if ($this->hasProperty($name)) unset($this->properties[$name]); + public function getPage() { + return $this->page; + } + public function setPage($page) { + $this->page = $page; } - public function hasProperty($name) { - return isset($this->properties[$name]); + public function getOnChange() { + return $this->onchange; } - public function getProperty($name) { - if ($this->hasProperty($name)) return $this->properties[$name]; - else return null; + public function getHelper() { + return $this->helper; } - public function isRdn() { - if ($this->entry) { - return (preg_grep('/'.$this->name.'/',$this->entry->getRdnAttributeName())); - } else { - return false; - } + public function getHelperValue() { + return $this->helpervalue; + } + + public function getVerify() { + return $this->verify; + } + + public function setRDN($rdn) { + $this->rdn = $rdn; } /** - * Visit the attribute + * Return if this attribute is an RDN attribute + * + * @return boolean */ - public function accept($visitor) { - $visitor->visit('', $this); + public function isRDN() { + return $this->rdn; + } + + /** + * Capture all the LDAP details we are interested in + * + * @param sattr Schema Attribute + */ + private function setLDAPdetails($sattr) { + # By default, set this as a MAY attribute, later processing should make it a MUST attribute if it is. + if (! $this->ldaptype) + $this->ldaptype = 'may'; + + # Store our Aliases + foreach ($sattr->getAliases() as $alias) + array_push($this->aliases,strtolower($alias)); + + if ($sattr->getIsSingleValue()) + $this->setMaxValueCount(1); + } + + /** + * Return a list of aliases for this Attribute (as defined by the schema) + * This list will be lowercase. + */ + public function getAliases() { + return $this->aliases; + } + + public function getAutoValue() { + return $this->autovalue; + } + + public function getPostValue() { + return $this->postvalue; + } + + public function setPostValue($postvalue) { + $this->postvalue = $postvalue; + } + + public function setXML($values) { + # Mostly all the time, this should be an array + if (is_array($values)) + foreach ($values as $index => $value) + switch ($index) { + # Helpers should be accompanied with a attribute. + case 'helper': + if (! isset($values['post'])) + system_message(array( + 'title'=>sprintf('%s [%s]',_('Missing [post] setting in XML file'),$index), + 'body'=>_('[helper] needs an accompanying [post] action.'), + 'type'=>'warn')); + + if (isset($value['value']) && ! is_array($value['value']) && preg_match('/^=php\.(\w+)\((.*)\)$/',$value['value'],$matches)) { + $this->helpervalue['function'] = $matches[1]; + $this->helpervalue['args'] = $matches[2]; + + unset ($value['value']); + } + + foreach ($value as $i => $detail) { + if (! in_array($i,array('default','display','id','value'))) { + system_message(array( + 'title'=>sprintf('%s [%s]',_('Unknown XML setting'),$i), + 'body'=>sprintf('%s [%s]',_('Unknown XML type setting for helper will be ignored.'),$detail), + 'type'=>'warn')); + + unset($value[$i]); + } + } + + $this->$index = $value; + + break; + + case 'hidden': $value ? $this->visible = false : $this->visible = true; + break; + + case 'spacer': $value ? $this->$index = true : $this->$index = false; + break; + + # Essentially, we ignore type, it is used to select an Attribute type in the Factory. But we'll generated a warning if there is an unknown type. + case 'type': + if (! in_array($value,array('password','multiselect','select','textarea'))) + system_message(array( + 'title'=>sprintf('%s [%s]',_('Unknown XML setting'),$index), + 'body'=>sprintf('%s [%s]',_('Unknown XML type setting will be ignored.'),$value), + 'type'=>'warn')); + + break; + + case 'post': + if (preg_match('/^=php\.(\w+)\((.*)\)$/',$value,$matches)) { + $this->postvalue['function'] = $matches[1]; + $this->postvalue['args'] = $matches[2]; + + } else + system_message(array( + 'title'=>sprintf('%s [%s]',_('Unknown XML setting'),$index), + 'body'=>sprintf('%s [%s]',_('Unknown XML type setting will be ignored.'),$value), + 'type'=>'warn')); + + case 'value': + if (is_array($value)) + $this->values = $value; + + else + # Check to see if the value is auto generated. + if (preg_match('/^=php\.(\w+)\((.*)\)$/',$value,$matches)) { + $this->autovalue['function'] = $matches[1]; + $this->autovalue['args'] = $matches[2]; + + # We'll add a hint too + if (! $this->hint) + $this->hint = _('Automatically determined'); + + } else + $this->values = array($value); + + break; + + # Queries + case 'ordersort': + + # Creation/Editing Templates + case 'cols': + case 'default': + case 'display': + case 'hint': + case 'icon': + case 'maxlength': + case 'onchange': + case 'order': + case 'page': + case 'readonly': + case 'rows': + case 'size': + case 'verify': $this->$index = $value; + break; + + default: + system_message(array( + 'title'=>sprintf('%s [%s]',_('Unknown XML setting'),$index), + 'body'=>sprintf('%s [%s]',_('Unknown attribute setting will be ignored.'),serialize($value)), + 'type'=>'warn')); + } + + elseif (is_string($values) && (strlen($values) > 0)) + $this->values = array($values); + + } + + /** + * Display the values removed in an attribute. + */ + public function getRemovedValues() { + $return = array(); + + foreach ($this->getOldValues() as $value) + if (! in_array($value,$this->getValues())) + array_push($return,$value); + + return $return; + } + + /** + * Display the values removed in an attribute. + */ + public function getAddedValues() { + $return = array(); + + foreach ($this->getValues() as $value) + if (! in_array($value,$this->getOldValues())) + array_push($return,$value); + + return $return; + } + + /** + * Prunes off anything after the ";" in an attr name. This is useful for + * attributes that may have ";binary" appended to their names. With + * real_attr_name(), you can more easily fetch these attributes' schema + * with their "real" attribute name. + * + * @param string $attr_name The name of the attribute to examine. + * @return string + */ + private function real_attr_name() { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$attr_name); + + return preg_replace('/;.*$/U','',$this->name); + } + + /** + * Does this attribute need supporting JS + */ + public function needJS($type=null) { + if (is_null($type)) { + foreach (array('focus','blur','validate') as $type) + if ($this->needJS($type)) + return true; + + return false; + + } elseif ($type == 'focus') { + # We dont have any focus javascript routines. + return false; + + } elseif ($type == 'blur') { + if ($this->onchange || $this->isRequired()) + return true; + else + return false; + + } elseif ($type == 'validate') { + if ($this->isRequired()) + return true; + else + return false; + + } else + debug_dump_backtrace(sprintf('Unknown JS request %s',$type),1); } } ?> diff --git a/lib/AttributeFactory.php b/lib/AttributeFactory.php index 1e79ecc..ae35acb 100644 --- a/lib/AttributeFactory.php +++ b/lib/AttributeFactory.php @@ -1,104 +1,183 @@ sprintf('%s [%s]',_('Unknown template [post] function'),$matches[1]), + 'body'=>sprintf('%s [%s]',_('The template function is not known and will be ignored.'),$values['post']), + 'type'=>'warn')); + + unset($values['post']); + } + } + } + + # Check our helper functions exists + if (isset($values['helper']['value']) && ! is_array($values['helper']['value'])) + if (preg_match('/^=php\.(\w+)\((.*)\)$/',$values['helper']['value'],$matches)) + if (! in_array($matches[1],array('GetNextNumber','PasswordEncryptionTypes'))) { + system_message(array( + 'title'=>sprintf('%s [%s]',_('Unknown template helper function'),$matches[1]), + 'body'=>sprintf('%s [%s]',_('The template helper function is not known and will be ignored.'),$values['helper']['value']), + 'type'=>'warn')); + + unset($values['helper']['value']); + } + + # Check to see if the value is auto generated, our attribute type is dependant on the function called. + if (isset($values['value']) && ! is_array($values['value'])) { + if (preg_match('/^=php\.(\w+)\((.*)\)$/',$values['value'],$matches)) { + switch ($matches[1]) { + case 'MultiList': + if (! isset($values['type'])) + $values['type'] = 'multiselect'; + + case 'PickList': + return $this->newSelectionAttribute($name,$values,$server_id,$source); + + case 'RandomPassword': + return $this->newRandomPasswordAttribute($name,$values,$server_id,$source); + + # Fall through and determine the attribute using other methods. + case 'GetNextNumber': + case 'Function' : + break; + + default: + system_message(array( + 'title'=>sprintf('%s [%s]',_('Unknown template function'),$matches[1]), + 'body'=>sprintf('%s [%s]',_('The template function is not known and will be ignored.'),$values['value']), + 'type'=>'warn')); + + unset($values['value']); + } + } + } + + if (isset($values['type'])) + switch ($values['type']) { + case 'password': + return $this->newPasswordAttribute($name,$values,$server_id,$source); + + case 'select': + return $this->newSelectionAttribute($name,$values,$server_id,$source); + + case 'textarea': + return $this->newMultiLineAttribute($name,$values,$server_id,$source); + } if (! strcasecmp($name,'objectClass')) { - return $this->newObjectClassAttribute($name,$values); + return $this->newObjectClassAttribute($name,$values,$server_id,$source); - } elseif ($ldapserver->isJpegPhoto($name)) { - return $this->newJpegAttribute($name,$values); + } elseif ($app['server']->isJpegPhoto($name)) { + return $this->newJpegAttribute($name,$values,$server_id,$source); - } else if ($ldapserver->isAttrBinary($name)) { - return $this->newBinaryAttribute($name,$values); + } elseif ($app['server']->isAttrBinary($name)) { + return $this->newBinaryAttribute($name,$values,$server_id,$source); - } else if (! strcasecmp($name,'userPassword')) { - return $this->newPasswordAttribute($name,$values); + } elseif (! strcasecmp($name,'userPassword')) { + return $this->newPasswordAttribute($name,$values,$server_id,$source); - } else if (! strcasecmp($name,'sambaLMPassword') || ! strcasecmp($name,'sambaNTPassword')) { - return $this->newSambaPasswordAttribute($name,$values); + } elseif (! strcasecmp($name,'sambaLMPassword') || ! strcasecmp($name,'sambaNTPassword')) { + return $this->newSambaPasswordAttribute($name,$values,$server_id,$source); - } elseif (in_array_ignore_case($name,array_keys($_SESSION[APPCONFIG]->GetValue('appearance','date_attrs')))) { - return $this->newDateAttribute($name,$values); + } elseif (in_array(strtolower($name),array_keys(array_change_key_case($_SESSION[APPCONFIG]->getValue('appearance','date_attrs'))))) { + return $this->newDateAttribute($name,$values,$server_id,$source); - } elseif (in_array(strtolower($name),array('shadowlastchange','shadowmin', - 'shadowmax','shadowexpire','shadowwarning','shadowinactive'))) { - return $this->newShadowAttribute($name,$values); + } elseif (in_array(strtolower($name),array('shadowlastchange','shadowmin','shadowmax','shadowexpire','shadowwarning','shadowinactive'))) { + return $this->newShadowAttribute($name,$values,$server_id,$source); - } elseif ($ldapserver->isAttrBoolean($name)) { - $attribute = $this->newSelectionAttribute($name,$values); + } elseif ($app['server']->isAttrBoolean($name)) { + $attribute = $this->newSelectionAttribute($name,$values,$server_id,$source); $attribute->addOption('TRUE',_('true')); $attribute->addOption('FALSE',_('false')); return $attribute; - } elseif ($ldapserver->isDNAttr($name)) { - return $this->newDnAttribute($name,$values); + } elseif ($app['server']->isDNAttr($name)) { + return $this->newDnAttribute($name,$values,$server_id,$source); - } elseif ($ldapserver->isMultiLineAttr($name)) { - return $this->newMultiLineAttribute($name,$values); + } elseif ($app['server']->isMultiLineAttr($name)) { + return $this->newMultiLineAttribute($name,$values,$server_id,$source); } elseif (! strcasecmp($name,'gidNumber')) { - return $this->newGidAttribute($name,$values); + return $this->newGidAttribute($name,$values,$server_id,$source); } else { - return new Attribute($name,$values); + return new Attribute($name,$values,$server_id,$source); } } - public function newJpegAttribute($name,$values) { - return new JpegAttribute($name,$values); + private function newJpegAttribute($name,$values,$server_id,$source) { + return new JpegAttribute($name,$values,$server_id,$source); } - public function newBinaryAttribute($name,$values) { - return new BinaryAttribute($name,$values); + private function newBinaryAttribute($name,$values,$server_id,$source) { + return new BinaryAttribute($name,$values,$server_id,$source); } - public function newPasswordAttribute($name,$values) { - return new PasswordAttribute($name,$values); + private function newPasswordAttribute($name,$values,$server_id,$source) { + return new PasswordAttribute($name,$values,$server_id,$source); } - public function newSambaPasswordAttribute($name,$values) { - return new SambaPasswordAttribute($name,$values); + private function newSambaPasswordAttribute($name,$values,$server_id,$source) { + return new SambaPasswordAttribute($name,$values,$server_id,$source); } - public function newRandomPasswordAttribute($name,$values) { - return new RandomPasswordAttribute($name,$values); + private function newRandomPasswordAttribute($name,$values,$server_id,$source) { + return new RandomPasswordAttribute($name,$values,$server_id,$source); } - public function newShadowAttribute($name,$values) { - return new ShadowAttribute($name,$values); + private function newShadowAttribute($name,$values,$server_id,$source) { + return new ShadowAttribute($name,$values,$server_id,$source); } - public function newSelectionAttribute($name,$values) { - return new SelectionAttribute($name,$values); + private function newSelectionAttribute($name,$values,$server_id,$source) { + return new SelectionAttribute($name,$values,$server_id,$source); } - public function newMultiLineAttribute($name,$values) { - return new MultiLineAttribute($name,$values); + private function newMultiLineAttribute($name,$values,$server_id,$source) { + return new MultiLineAttribute($name,$values,$server_id,$source); } - public function newDateAttribute($name,$values) { - return new DateAttribute($name,$values); + private function newDateAttribute($name,$values,$server_id,$source) { + return new DateAttribute($name,$values,$server_id,$source); } - public function newObjectClassAttribute($name,$values) { - return new ObjectClassAttribute($name,$values); + private function newObjectClassAttribute($name,$values,$server_id,$source) { + return new ObjectClassAttribute($name,$values,$server_id,$source); } - public function newDnAttribute($name,$values) { - return new DnAttribute($name,$values); + private function newDnAttribute($name,$values,$server_id,$source) { + return new DnAttribute($name,$values,$server_id,$source); } - public function newGidAttribute($name,$values) { - return new GidAttribute($name,$values); + private function newGidAttribute($name,$values,$server_id,$source) { + return new GidAttribute($name,$values,$server_id,$source); } } ?> diff --git a/lib/BinaryAttribute.php b/lib/BinaryAttribute.php index 1aa138c..b367b40 100644 --- a/lib/BinaryAttribute.php +++ b/lib/BinaryAttribute.php @@ -1,18 +1,25 @@ filepaths = array(); $this->filenames = array(); diff --git a/lib/DateAttribute.php b/lib/DateAttribute.php index ab74ab8..f6979e0 100644 --- a/lib/DateAttribute.php +++ b/lib/DateAttribute.php @@ -1,11 +1,18 @@ objectClasses = array(); - $this->mustattrs = array(); - $this->mayattrs = array(); - $this->container = ''; - $this->rdn = null; - } - - public function addObjectClass($objectClass) { - global $ldapserver; - - if (!$objectClass || in_array($objectClass,$this->objectClasses)) return; - - $this->objectClasses[] = $objectClass; - - /* add the required and optional attributes of the objectclass */ - - $schema_oclass = $ldapserver->getSchemaObjectClass($objectClass); - assert($schema_oclass); - - // get the required attributes - $schema_oclasses = $ldapserver->SchemaObjectClasses(); - $schema_attrs = $schema_oclass->getMustAttrs($schema_oclasses); - if (!$schema_attrs) $schema_attrs = array(); - elseif (!is_array($schema_attrs)) $schema_attrs = array($schema_attrs); - - // for each required attribute - foreach ($schema_attrs as $schema_attr) { - $attr_name = $schema_attr->getName(); - - if (isset($this->mustattrs[$attr_name])) { - $this->mustattrs[$attr_name][] = $objectClass; - continue; - } - - if (isset($this->mayattrs[$attr_name])) { - unset($this->mayattrs[$attr_name]); - $this->mustattrs[$attr_name] = array($objectClass); - continue; - } - - // get attribute aliases - $aliases = ($schema_attr = $ldapserver->getSchemaAttribute($attr_name)) ? $schema_attr->aliases : null; - if (!$aliases) $aliases = array(); - if (!is_array($aliases)) $aliases = array($aliases); - - // check if we doesn't already add the alias - $found = false; - foreach ($aliases as $alias) { - if (isset($this->mustattrs[$alias])) { - $this->mustattrs[$alias][] = $objectClass; - $found = true; - break; - } elseif (isset($this->mayattrs[$alias])) { - unset($this->mayattrs[$alias]); - $this->mustattrs[$alias] = array($objectClass); - $found = true; - break; - } - } - if ($found) continue; - - $this->mustattrs[$attr_name] = array($objectClass); - } - - // get the optional attributes - $schema_attrs = $schema_oclass->getMayAttrs($schema_oclasses); - if (!$schema_attrs) $schema_attrs = array(); - elseif (!is_array($schema_attrs)) $schema_attrs = array($schema_attrs); - - // for each optional attribute - foreach ($schema_attrs as $schema_attr) { - $attr_name = $schema_attr->getName(); - - if (isset($this->mustattrs[$attr_name])) { - continue; - } - if (isset($this->mayattrs[$attr_name])) { - $this->mayattrs[$attr_name][] = $objectClass; - continue; - } - - // get attribute aliases - $aliases = ($schema_attr = $ldapserver->getSchemaAttribute($attr_name)) ? $schema_attr->aliases : null; - if (!$aliases) $aliases = array(); - if (!is_array($aliases)) $aliases = array($aliases); - - // check if we doesn't already add the alias - $found = false; - foreach ($aliases as $alias) { - if (isset($this->mustattrs[$alias])) { - $found = true; - break; - } elseif (isset($this->mayattrs[$alias])) { - $this->mayattrs[$alias][] = $objectClass; - $found = true; - break; - } - } - if ($found) continue; - - $this->mayattrs[$attr_name] = array($objectClass); - } - } - - public function setContainer($dn) { - $this->container = $dn; - } - - public function getContainer() { - return $this->container; - } - - public function setRdnAttributeName($attribute_name) { - $this->rdn = null; - if (!$attribute_name) return; - - $attrs = $this->getAttributes(); - foreach ($attrs as $attr) { - if ($attr->getName() == $attribute_name) { - $this->rdn = $attr; - return; - } - } - } - - public function getRdnAttributeName() { - $attr = $this->getRdnAttribute(); - if ($attr) return array($attr->getName()); - else return array(''); - } - - public function getRdnAttribute() { - return $this->rdn; - } - - public function getDn() { - if (!$this->container || !$this->rdn) return ''; - $vals = $this->rdn->getValues(); - $val = ($vals && $vals[0]) ? $vals[0] : ''; - if (strlen($val) <= 0) return ''; - return $this->rdn->getName()."=$val,".$this->container; - } - - public function getAttributes() { - global $ldapserver; - - # we can use a static variable if there is only one instance of this class - static $attrs = null; - - if (DEBUG_ENABLED) - debug_log('Entered with () for dn (%s)',1,__FILE__,__LINE__,__METHOD__,$this->getDn()); - - if (! $attrs) { - $attrs = array(); - - $attributefactoryclass = $_SESSION[APPCONFIG]->GetValue('appearance','attribute_factory'); - eval('$attribute_factory = new '.$attributefactoryclass.'();'); - - if ($this->objectClasses) { - $attribute = $attribute_factory->newAttribute('objectClass',$this->objectClasses); - $attribute->setEntry($this); - $attribute->setRequired(); - $attribute->hide(); - $attrs[] = $attribute; - } - - foreach ($this->mustattrs as $attr_name => $objectclasses) { - if ($attr_name == 'objectClass') continue; - - $attribute = $attribute_factory->newAttribute($attr_name,null); - $attribute->setEntry($this); - $attribute->setRequired(); - $attrs[] = $attribute; - } - - foreach ($this->mayattrs as $attr_name => $objectclasses) { - if ($attr_name == 'objectClass') continue; - - $attribute = $attribute_factory->newAttribute($attr_name,null); - $attribute->setEntry($this); - $attrs[] = $attribute; - } - - usort($attrs,'attrcmp'); # Sort optional attributes - } - - return $attrs; - } -} - -?> diff --git a/lib/DefaultEditingEntry.php b/lib/DefaultEditingEntry.php deleted file mode 100644 index 9efc40e..0000000 --- a/lib/DefaultEditingEntry.php +++ /dev/null @@ -1,101 +0,0 @@ -getDn(); - - if (DEBUG_ENABLED) - debug_log('Entered with () for dn (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); - - if (! isset($attrs[$dn])) { - $attrs[$dn] = array(); - - $attributefactoryclass = $_SESSION[APPCONFIG]->GetValue('appearance','attribute_factory'); - eval('$attribute_factory = new '.$attributefactoryclass.'();'); - - $int_attrs_vals = $ldapserver->getDNSysAttrs($this->getDn()); - if (!$int_attrs_vals) $int_attrs_vals = array(); - elseif (!is_array($int_attrs_vals)) $int_attrs_vals = array($int_attrs_vals); - - $custom_int_attrs_vals = $ldapserver->getCustomDNSysAttrs($this->getDn()); - if (! $custom_int_attrs_vals) $attrs_vals = array(); - elseif (! is_array($custom_int_attrs_vals)) $custom_int_attrs_vals = array($custom_int_attrs_vals); - - $attrs_vals = $ldapserver->getDNAttrs($this->getDn(),false,$_SESSION[APPCONFIG]->GetValue('deref','view')); - if (! $attrs_vals) $attrs_vals = array(); - elseif (! is_array($attrs_vals)) $attrs_vals = array($attrs_vals); - - $custom_attrs_vals = $ldapserver->getCustomDNAttrs($this->getDn(),false,$_SESSION[APPCONFIG]->GetValue('deref','view')); - if (! $custom_attrs_vals) $attrs_vals = array(); - elseif (! is_array($custom_attrs_vals)) $custom_attrs_vals = array($custom_attrs_vals); - - $int_attrs_vals = array_merge($int_attrs_vals,$custom_int_attrs_vals); - $attrs_vals = array_merge($attrs_vals,$custom_attrs_vals); - $attrs_vals = array_merge($attrs_vals, $int_attrs_vals); - uksort($attrs_vals,'sortAttrs'); # Sort these entries - - $objectclasses = null; - - foreach ($attrs_vals as $attr => $vals) { - $attribute = $attribute_factory->newAttribute($attr,$vals); - $attribute->setEntry($this); - - if (isset($int_attrs_vals[$attr])) { - $attribute->setInternal(); - $attribute->setReadOnly(); - } - - if ($attr == 'objectClass') $objectclasses = $attribute->getValues(); - - if ($this->isReadOnly() || $ldapserver->isAttrReadOnly($attr)) { - $attribute->setReadOnly(); - } - if ($ldapserver->isAttrHidden($attr)/* || ! strcasecmp($attr,'dn')*/) { - $attribute->hide(); - } - - $attrs[$dn][] = $attribute; - } - - if ($objectclasses) { - $schema_oclasses = $ldapserver->SchemaObjectClasses(); - foreach ($objectclasses as $oclass) { - $schema_oclass = $ldapserver->getSchemaObjectClass($oclass); - assert($schema_oclass); - - $mustattrs = $schema_oclass->getMustAttrs($schema_oclasses); - if (!$mustattrs) $mustattrs = array(); - if (!is_array($mustattrs)) $mustattrs = array($mustattrs); - - foreach ($mustattrs as $mustattr) { - foreach ($attrs[$dn] as $attr) { - if ($attr->getName() == $mustattr->getName()) { - $attr->setRequired(); - break; - } - } - } - } - } - } - - return $attrs[$dn]; - } -} - -?> diff --git a/lib/DefaultEntryFactory.php b/lib/DefaultEntryFactory.php deleted file mode 100644 index 0228e5d..0000000 --- a/lib/DefaultEntryFactory.php +++ /dev/null @@ -1,19 +0,0 @@ - diff --git a/lib/DnAttribute.php b/lib/DnAttribute.php index 8ec3c18..f767aab 100644 --- a/lib/DnAttribute.php +++ b/lib/DnAttribute.php @@ -1,11 +1,18 @@ dn = $dn; - $this->leaf = false; - $this->open = false; - $this->children = array(); - $this->reading_children = false; - $this->size_limited = true; - $this->readonly = false; - $this->icon = ''; - $this->properties = array(); - } - - public function getDn() { - return $this->dn; - } - - public function getRdn() { - return get_rdn($this->getDn(), 0, true); - } - - public function getRdnAttributeName() { - $attr = array(); - if ($this->dn) { - $i = strpos($this->dn, ','); - if ($i !== false) { - $attrs = split('\+',substr($this->dn, 0, $i)); - foreach ($attrs as $id => $attr) { - list ($name,$value) = split('=',$attr); - $attrs[$id] = $name; - } - $attr = array_unique($attrs); - } - } - return $attr; - } - - public function setTree($index) { - $this->server_id = $index; - } - - private function readChildren($nolimit=false) { - if (DEBUG_ENABLED) - debug_log('Entered with ()',1,__FILE__,__LINE__,__METHOD__); - - $ldapserver = (isset($this->server_id) ? $_SESSION[APPCONFIG]->ldapservers->Instance($this->server_id) : null); - if (DEBUG_ENABLED) - debug_log('LdapServer (%s)',1,__FILE__,__LINE__,__METHOD__, $ldapserver ? $ldapserver->server_id : -1); - - $ldap['child_limit'] = $nolimit ? 0 : $_SESSION[APPCONFIG]->GetValue('search','size_limit'); - $ldap['filter'] = $_SESSION[APPCONFIG]->GetValue('appearance','tree_filter'); - $ldap['deref'] = $_SESSION[APPCONFIG]->GetValue('deref','view'); - $ldap['children'] = $ldapserver->getContainerContents($this->getDn(),$ldap['child_limit'],$ldap['filter'],$ldap['deref']); - - if (DEBUG_ENABLED) - debug_log('Children of (%s) are (%s)',64,__FILE__,__LINE__,__METHOD__,$this->getDn(),$ldap['children']); - - if (isset($this->server_id)) { - $this->reading_children = true; - $tree = get_cached_item($ldapserver->server_id,'tree'); - - foreach ($ldap['children'] as $dn) { - if (DEBUG_ENABLED) - debug_log('Adding (%s)',64,__FILE__,__LINE__,__METHOD__,$dn); - - if (! $tree->getEntry($dn)) - $tree->addEntry($dn); - } - set_cached_item($ldapserver->server_id,'tree','null',$tree); - usort($this->children,'pla_compare_dns'); - $this->reading_children = false; - } - - if (count($this->children) == $ldap['child_limit']) - $this->size_limited = true; - else - $this->size_limited = false; - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning ()',1,__FILE__,__LINE__,__METHOD__); - } - - /** - * Returns null if the children have never be defined - * or an array of the dn of the children - */ - public function getChildren() { - if (! $this->children) - $this->readChildren(); - - return $this->children; - } - - public function getChildrenNumber() { - if (! $this->children) - $this->readChildren(); - - if ($this->children) - return count($this->children); - else - return 0; - } - - /** - * Called by Tree::addEntry() only - */ - public function addChild($dn) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); - - if (! $this->children) { - if (DEBUG_ENABLED) - debug_log('this->children is FALSE',64,__FILE__,__LINE__,__METHOD__); - - if (! $this->reading_children) { - if (DEBUG_ENABLED) - debug_log('this->reading_children is FALSE',64,__FILE__,__LINE__,__METHOD__,$dn); - - $this->readChildren(); - }else { - $this->children = array(); - } - } - - $index = array_search($dn,$this->children); - if (DEBUG_ENABLED) - debug_log('array_search of (%s) in (%s) returned (%s)',64,__FILE__,__LINE__,__METHOD__,$dn,$this->children,$index); - - if ($index === false) { - $this->children[] = $dn; - if (! $this->reading_children) usort($this->children,'pla_compare_dns'); - } - - if (DEBUG_ENABLED) - debug_log('Entered with (%s), Leaving ()',1,__FILE__,__LINE__,__METHOD__,$dn); - } - - /** - * Called by Tree::delEntry() only - */ - public function delChild($dn) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); - - if ($this->children) { - # If the parent hasnt been opened in the tree, then there wont be any children. - $index = array_search($dn,$this->children); - if ($index !== false) unset($this->children[$index]); - } - } - - public function rename($newDn) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$newDn); - $this->dn = $newDn; - } - - public function isOpened() { - return $this->open; - } - - public function close() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',1,__FILE__,__LINE__,__METHOD__); - - $this->open = false; - } - - /** - * Opens the node ; the children of the node must have been defined - */ - public function open() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',1,__FILE__,__LINE__,__METHOD__); - - $this->open = true; - - if ($this->isSizeLimited()) { - $this->readChildren(true); - } - } - - public function setLeaf($is_leaf) { - $this->leaf = $is_leaf; - } - - public function isLeaf() { - return $this->leaf; - } - - public function isReadOnly() { - return $this->readonly; - } - - public function setReadOnly() { - $this->readonly = true; - } - - public function setReadWrite() { - $this->readonly = false; - } - - /** - * Returns the path of the icon file used to represent this node ; - * returns the result of get_icon() function - */ - public function getIcon($ldapserver) { - if ($this->icon) return $this->icon; - else return get_icon($ldapserver,$this->dn); - } - - public function isSizeLimited() { - return $this->size_limited; - } - - public function setProperty($name, $value) { - $this->properties[$name] = $value; - } - - public function delProperty($name) { - if ($this->hasProperty($name)) unset($this->properties[$name]); - } - - public function hasProperty($name) { - return isset($this->properties[$name]); - } - - public function getProperty($name) { - if ($this->hasProperty($name)) return $this->properties[$name]; - else return null; - } - - public function getTemplateName() { - if (isset($this->selected_template)) - return $this->selected_template; - else - return ''; - } - - public function getTemplateTitle() { - if (isset($this->selected_template['title'])) - return $this->templates[$this->selected_template]['title']; - else - return _('No Template'); - } - - /** - * Visit the entry and its attributes - * - * The visitor must implement these methods : - * - visitStart($entry) - * - visitEnd($entry) - * where is the entry class name. - */ - public function accept($visitor) { - $visitor->visit('Start', $this); - $attrs = $this->getAttributes(); - foreach ($attrs as $attribute) { - $attribute->accept($visitor); - } - $visitor->visit('End', $this); - } - - public function getAttribute($name) { - foreach ($this->getAttributes() as $attr) { - if ($attr->getName() == $name) return $attr; - } - return null; - } - - /** - * Return an array of Attribute objects - */ - abstract public function getAttributes(); -} -?> diff --git a/lib/EntryFactory.php b/lib/EntryFactory.php deleted file mode 100644 index 6fa7306..0000000 --- a/lib/EntryFactory.php +++ /dev/null @@ -1,24 +0,0 @@ -dnExists($dn)) { - return $this->newEditingEntry($dn); - } else { - return $this->newCreatingEntry($dn); - } - } - - abstract public function newEditingEntry($dn); - abstract public function newCreatingEntry($dn); -} -?> diff --git a/lib/EntryReader.php b/lib/EntryReader.php deleted file mode 100644 index dc559c3..0000000 --- a/lib/EntryReader.php +++ /dev/null @@ -1,394 +0,0 @@ -index = $ldapserver->server_id; - $this->context = 0; - } - - /**************************/ - /* Visit an Entry */ - /**************************/ - - public function visitEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Enter with (%s) for dn (%s)',1,__FILE__,__LINE__,__METHOD__,$entry,$entry->getDn()); - } - - public function visitEntryEnd($entry) { - if (DEBUG_ENABLED) - debug_log('Enter with (%s) for dn (%s)',1,__FILE__,__LINE__,__METHOD__,$entry,$entry->getDn()); - } - - /**************************/ - /* Visit a EditingEntry */ - /**************************/ - - public function visitDefaultEditingEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Enter with (%s) for dn (%s)',1,__FILE__,__LINE__,__METHOD__,$entry,$entry->getDn()); - - $this->context = ENTRY_READER_EDITING_CONTEXT; - $this->visit('Entry::Start', $entry); - } - - public function visitTemplateEditingEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Enter with (%s) for dn (%s)',1,__FILE__,__LINE__,__METHOD__,$entry,$entry->getDn()); - - $this->visit('DefaultEditingEntry::Start', $entry); - - if (isset($_REQUEST['template'])) { - $entry->setSelectedTemplateName(trim($_REQUEST['template'])); - } elseif (($entry->getTemplatesCount() == 1) && !$entry->hasDefaultTemplate()) { - $templates = &$entry->getTemplates(); - $template_names = array_keys($templates); - $entry->setSelectedTemplateName($template_names[0]); - } - } - - /**************************/ - /* Visit a CreatingEntry */ - /**************************/ - - public function visitDefaultCreatingEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Enter with (%s) for dn (%s)',1,__FILE__,__LINE__,__METHOD__,$entry,$entry->getDn()); - - $this->context = ENTRY_READER_CREATION_CONTEXT; - $this->visit('Entry::Start', $entry); - - if (isset($_POST['new_values']['objectClass'])) { - $ocs = $_POST['new_values']['objectClass']; - if (is_string($ocs) && (strlen($ocs) > 0)) $ocs = array($ocs); - elseif (!$ocs) $ocs = array(); - - foreach ($ocs as $oc) $entry->addObjectClass(trim($oc)); - } - - if (isset($_REQUEST['container'])) { - $entry->setContainer(trim($_REQUEST['container'])); - } - } - - public function visitTemplateCreatingEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Enter with (%s) for dn (%s)',1,__FILE__,__LINE__,__METHOD__,$entry,$entry->getDn()); - - $this->visit('DefaultCreatingEntry::Start', $entry); - - if (isset($_REQUEST['template'])) { - $entry->setSelectedTemplateName(trim($_REQUEST['template'])); - } elseif (($entry->getTemplatesCount() == 1) && !$entry->hasDefaultTemplate()) { - $templates = &$entry->getTemplates(); - $template_names = array_keys($templates); - $entry->setSelectedTemplateName($template_names[0]); - } - } - - /**************************/ - /* Visit an Attribute */ - /**************************/ - - public function visitAttribute($attribute) { - if (DEBUG_ENABLED) - debug_log('Enter with (%s) for attribute (%s)',1,__FILE__,__LINE__,__METHOD__,$attribute,$attribute->getName()); - - $name = $attribute->getName(); - - // @todo editing objectclasses - if (($this->context == ENTRY_READER_CREATION_CONTEXT) && ($name == 'objectClass')) return; - - if ($this->context == ENTRY_READER_EDITING_CONTEXT) - $old_vals = $this->get('OldValues', $attribute); - else - $old_vals = array(); - - $new_vals = $this->get('NewValues', $attribute); - - if (isset($_POST['old_values'][$name])) { - $post_old_vals = $_POST['old_values'][$name]; - if (is_string($post_old_vals) && (strlen($post_old_vals) > 0)) $post_old_vals = array($post_old_vals); - elseif (!$post_old_vals) $post_old_vals = array(); - - // delete last empty values - for ($i = count($post_old_vals)-1; $i >= 0; $i--) { - if (! strlen($post_old_vals[$i])) unset($post_old_vals[$i]); - else break; - } - - // attribute modified by someone else ? - if (count($old_vals) != count($post_old_vals)) { - $attribute->justModified(); - } else { - foreach ($post_old_vals as $i => $old_val) { - if (!isset($old_vals[$i]) || ($old_vals[$i] != $old_val)) { - $attribute->justModified(); - break; - } - } - } - } - - foreach ($new_vals as $i => $new_val) { - // if the attribute has not been already modified by a post of a previous page - if (!$attribute->hasBeenModified()) { - // if the value has changed (added or modified/deleted) - if ((!isset($old_vals[$i]) && (strlen($new_val) > 0)) || (isset($old_vals[$i]) && ($old_vals[$i] != $new_val))) { - $new_val = $this->get('PostValue', $attribute, $i, $new_val); - } - } - - if ((!isset($old_vals[$i]) && (strlen($new_val) > 0)) || (isset($old_vals[$i]) && ($old_vals[$i] != $new_val))) { - $attribute->justModified(); - $attribute->addValue($new_val, $i); - } - } - - // old value deletion - if (isset($_POST['old_values'][$name]) && !$attribute->isInternal()) { - for ($i = count($new_vals); $i < count($old_vals); $i++) { - $attribute->addValue('', $i); - } - } - - // modified attributes - $modified_attrs = isset($_REQUEST['modified_attrs']) ? $_REQUEST['modified_attrs'] : false; - if (is_array($modified_attrs) && in_array($name, $modified_attrs)) { - $attribute->justModified(); - } - } - - public function getAttributeOldValues($attribute) { - $old_vals = $attribute->getValues(); - return $old_vals; - } - - public function getAttributeNewValues($attribute) { - $name = $attribute->getName(); - - $new_vals = isset($_POST['new_values'][$name]) ? $_POST['new_values'][$name] : null; - if (is_string($new_vals) && (strlen($new_vals) > 0)) $new_vals = array($new_vals); - elseif (!$new_vals) $new_vals = array(); - - $i = count($new_vals) - 1; - $j = $attribute->getValueCount(); - while (($i >= 0) && ($i >= $j) && !$new_vals[$i]) { - if ($i > $j) unset($new_vals[$i]); - $i--; - } - - return $new_vals; - } - - public function getAttributeRequestValue($attribute, $i, $val, $request) { - if ($request == $attribute->getName()) return $val; - - $val = null; - $entry = $attribute->getEntry(); - $request_attribute = ($entry ? $entry->getAttribute($request) : null); - - if ($request_attribute) { - $val = $request_attribute->getValue($i); - } elseif (isset($_REQUEST[$request][$attribute->getName()][$i])) { - $val = $_REQUEST[$request][$attribute->getName()][$i]; - } - - if (is_null($val)) { - error(sprintf(_('Your template is missing variable (%s)'),$request),'error','index.php'); - } - - return $val; - } - - public function getAttributePostValue($attribute, $i, $val) { - if (!$attribute->hasProperty('post')) return trim($val); - - if (preg_match('/^=php\.(\w+)\((.*)\)$/', $attribute->getProperty('post'), $matches)) { - switch ($matches[1]) { - case 'Password' : - preg_match_all('/%(\w+)(\|.+)?(\/[lU])?%/U',$matches[2],$matchall); - $enc = $this->get('RequestValue', $attribute, $i, $val, $matchall[1][0]); - $password = $val; - if ($password) { - $val = password_hash($password, $enc); - } - break; - case 'SambaPassword' : - $matchall = explode(',',$matches[2]); - - # If we have no password, then dont hash nothing! - if (strlen($val) <= 0) - break; - - $sambapassword = new smbHash; - - switch ($matchall[0]) { - case 'LM' : $val = $sambapassword->lmhash($val); break; - case 'NT' : $val = $sambapassword->nthash($val); break; - default : $val = ''; - } - break; - case 'Join' : - preg_match_all('/%(\w+)(\|.+)?(\/[lU])?%/U',$matches[2],$matchall); - $matchattrs = explode(',',$matches[2]); - $char = $matchattrs[0]; - - $values = array(); - foreach ($matchall[1] as $joinattr) { - $values[] = $this->get('RequestValue', $attribute, $i, $val, $joinattr); - } - - $val = implode($char, $values); - break; - default : - if (function_exists($matches[1])) { - $val = call_user_func($matches[1], $matches[2], $attribute, $i, $val); - } else { - error(sprintf(_('Your template has an unknown post function (%s).'),$matches[1]),'error','index.php'); - } - } - } - - return $val; - } - - /*******************************/ - /* Visit a BinaryAttribute */ - /*******************************/ - - public function getBinaryAttributeOldValues($attribute) { - $old_vals = array(); - return $old_vals; - } - - /** - * If there is binary post data, save them in - * $_SESSION['submitform'][$attribute_name][$key][$file_name][$file_path] - * with key = md5("$file_name|$file_path") - * - * return binary values - */ - public function getBinaryAttributeNewValues($attribute) { - $name = $attribute->getName(); - $new_vals = $this->get('Attribute::NewValues', $attribute); - - $i = 0; - $vals = array(); - foreach ($new_vals as $new_val) { - if (isset($_SESSION['submitform'][$name][$new_val])) { - $bin = ''; - foreach ($_SESSION['submitform'][$name][$new_val] as $filename => $file) { - $attribute->addFileName($filename, $i); - foreach ($file as $filepath => $binaries) { - $attribute->addFilePath($filepath, $i); - $bin = $binaries; - } - } - $vals[] = $bin; - $i++; - } - } - - $new_files = isset($_FILES['new_values']['name'][$name]) ? $_FILES['new_values']['name'][$name] : null; - if (!$new_files) $new_files = array(); - elseif (!is_array($new_files)) $new_files = array($new_files); - - foreach ($new_files as $j => $file_name) { - $file_path = $_FILES['new_values']['tmp_name'][$name][$j]; - if (is_uploaded_file($file_path)) { - $f = fopen($file_path, 'r'); - $binary_data = fread($f, filesize($file_path)); - fclose($f); - - $attribute->addFileName($file_name, $i); - $attribute->addFilePath($file_path, $i); - - $key = md5("$file_name|$file_path"); - $_SESSION['submitform'][$name][$key][$file_name][$file_path] = $binary_data; - $vals[] = $binary_data; - $i++; - } - } - - return $vals; - } - - public function getBinaryAttributePostValue($attribute, $i, $val) { - return $val; - } - - /*********************************/ - /* Visit a PasswordAttribute */ - /*********************************/ - - public function getPasswordAttributePostValue($attribute, $i, $val) { - $name = $attribute->getName(); - - if ($attribute->hasProperty('verify') && $attribute->getProperty('verify')) { - $verif_val = isset($_POST['new_values_verify'][$name][$i]) ? $_POST['new_values_verify'][$name][$i] : null; - if (!$verif_val || ($verif_val != $val)) { - system_message(array( - 'title'=>_('Checking passwords'), - 'body'=>_('You have specified two different passwords'), - 'type'=>'error')); - return $attribute->getValue($i); - } - } - - if ($attribute->hasProperty('post')) { - $val = $this->get('Attribute::PostValue', $attribute, $i, $val); - - } elseif (strlen($val) > 0) { - if (isset($_REQUEST['enc'][$attribute->getName()][$i])) - $enc = $_REQUEST['enc'][$attribute->getName()][$i]; - else - $enc = get_default_hash($this->index); - - $val = password_hash($val, $enc); - } - return $val; - } - - public function getSambaPasswordAttributePostValue($attribute, $i, $val) { - $name = $attribute->getName(); - - if ($attribute->hasProperty('verify') && $attribute->getProperty('verify')) { - $verif_val = isset($_POST['new_values_verify'][$name][$i]) ? $_POST['new_values_verify'][$name][$i] : null; - if (!$verif_val || ($verif_val != $val)) { - system_message(array( - 'title'=>_('Checking passwords'), - 'body'=>_('You have specified two different passwords'), - 'type'=>'error')); - return $attribute->getValue($i); - } - } - - if ($attribute->hasProperty('post')) { - $val = $this->get('Attribute::PostValue', $attribute, $i, $val); - } elseif (strlen($val) > 0) { - $sambapassword = new smbHash; - - if ($name == 'sambaLMPassword') - $val = $sambapassword->lmhash($val); - elseif ($name == 'sambaNTPassword') - $val = $sambapassword->nthash($val); - } - return $val; - } -} -?> diff --git a/lib/EntryWriter.php b/lib/EntryWriter.php deleted file mode 100644 index 22561f5..0000000 --- a/lib/EntryWriter.php +++ /dev/null @@ -1,109 +0,0 @@ -index = $ldapserver->server_id; - $this->visit_attributes = true; - $this->context = 0; - } - - public function getLDAPServer() { - static $CACHE; - - if (! isset($CACHE[$this->index])) - $CACHE[$this->index] = $_SESSION[APPCONFIG]->ldapservers->Instance($this->index); - - return $CACHE[$this->index]; - } - - /**************************/ - /* Paint an Entry */ - /**************************/ - - public function visitEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - - // init - $this->init('Visit', $entry); - } - - public function visitEntryEnd($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - } - - protected function initEntryVisit($entry) { - $this->internal_attributes = array(); - $this->shown_attributes = array(); - $this->hidden_attributes = array(); - } - - /********************************/ - /* Paint a DefaultCreatingEntry */ - /********************************/ - - protected function initDefaultCreatingEntryVisit($entry) { - $this->context = ENTRY_WRITER_CREATION_CONTEXT; - $this->init('Entry::Visit', $entry); - } - - /*******************************/ - /* Paint a DefaultEditingEntry */ - /*******************************/ - - protected function initDefaultEditingEntryVisit($entry) { - $this->context = ENTRY_WRITER_EDITING_CONTEXT; - $this->init('Entry::Visit', $entry); - } - - /*********************************/ - /* Paint a TemplateCreatingEntry */ - /*********************************/ - - /********************************/ - /* Paint a TemplateEditingEntry */ - /********************************/ - - /**************************/ - /* Paint an Attribute */ - /**************************/ - - public function visitAttribute($attribute) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__,$attribute->getName(),$this->visit_attributes); - - if (!$this->visit_attributes) return; - - if ($attribute->isInternal()) $this->internal_attributes[] = $attribute; - elseif ($attribute->isVisible()) $this->shown_attributes[] = $attribute; - else $this->hidden_attributes[] = $attribute; - } -} - -?> diff --git a/lib/EntryWriter1.php b/lib/EntryWriter1.php deleted file mode 100644 index c93ef01..0000000 --- a/lib/EntryWriter1.php +++ /dev/null @@ -1,2732 +0,0 @@ -draw('Title', $entry); - $this->draw('Subtitle', $entry); - echo "\n"; - - # Menu - $this->draw('Menu', $entry); - } - - protected function drawEntryTitle($entry) {} - protected function drawEntrySubtitle($entry) {} - protected function drawEntryMenu($entry) {} - - protected function drawEntryJavascript($entry) { - printf("\n\n",__METHOD__); - - if (isset($_SESSION[APPCONFIG])) { - echo "\n"; - echo ''."\n"; - echo ''."\n"; - echo "\n"; - } - - echo ''."\n"; - echo ''."\n"; - echo ''."\n"; - echo "\n"; - - echo ''."\n"; - - echo ''."\n"; - - for ($i = 0; $i < count($this->shown_attributes); $i++) { - $this->draw('Javascript', $this->shown_attributes[$i]); - } - - echo ''."\n"; - - printf("\n\n",__METHOD__); - } - - /********************************/ - /* Paint a DefaultCreatingEntry */ - /********************************/ - - public function visitDefaultCreatingEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - - # Init - $this->visit('Entry::Start', $entry); - - # Check - $container = $entry->getContainer(); - $container_ok = true; - $objectclasses_ok = true; - - if ($this->step != 1) { - if (!$container || !$this->getLDAPServer()->dnExists($container)) { - $container_ok = false; - $this->step = 1; - } - if (!$entry->getAttributes()) { - $objectclasses_ok = false; - $this->step = 1; - } - } - - # Header - $this->draw('Header', $entry); - - # Errors - if (!$container_ok) { - error(sprintf(_('The container you specified (%s) does not exist.'),htmlspecialchars($container)),'error'); - echo '
'; - } - - if (!$objectclasses_ok) { - error(_('You did not select any objectClasses for this object.'),'error'); - echo '
'; - } - } - - public function visitDefaultCreatingEntryEnd($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - - $this->draw('StepTitle', $entry, $this->step); - $this->draw('StepFormStart', $entry, $this->step); - $this->draw('StepForm', $entry, $this->step); - $this->draw('StepFormEnd', $entry, $this->step); - } - - protected function initDefaultCreatingEntryVisit($entry) { - parent::initDefaultCreatingEntryVisit($entry); - - $this->step = 1; - $step = get_request('step','REQUEST'); - if ($step) $this->step = $step; - } - - protected function drawDefaultCreatingEntryTitle($entry) { - printf('

%s

',_('Create Object')); - } - - protected function drawDefaultCreatingEntrySubtitle($entry) { - printf('

%s%s %s

', - _('Server'),_(':'),$this->getLDAPServer()->name); - } - - protected function drawDefaultCreatingEntryStepTitle($entry, $step) { - if ($step == 1) { - echo '

'; - printf(_('Step %s of %s'), '1', '2'); - echo _(':'); - echo ' '; - echo _('Container and ObjectClass(es)'); - echo '

'; - } else { - echo '

'; - printf(_('Step %s of %s'), '2', '2'); - echo _(':'); - echo ' '; - echo _('Specify attributes and values'); - echo '

'; - } - } - - public function drawDefaultCreatingEntryStepFormStart($entry, $step) { - if ($step == 1) { - echo '
'; - } else { - echo ''; - } - } - - public function drawDefaultCreatingEntryStepForm($entry, $step) { - $container = $entry->getContainer(); - - if ($step == 1) { - printf('', $this->index); - printf('', $step + 1); - echo ''; - - $this->draw('ContainerChooser', $entry, $container); - $this->draw('ObjectClassChooser', $entry); - $this->draw('StepFormSubmitButton', $entry, $step); - - echo '
'; - } else { - printf('', htmlspecialchars($container)); - printf('', $this->index); - printf('', $step + 1); - echo ''; - - $this->draw('RdnChooser', $entry); - $this->draw('ShownAttributes', $entry); - $this->draw('StepFormSubmitButton', $entry, $step); - - echo '
'; - - $this->draw('HiddenAttributes', $entry); - } - } - - public function drawDefaultCreatingEntryStepFormSubmitButton($entry, $step) { - if ($step == 1) { - echo ' '; - printf('', _('Proceed >>')); - echo ''; - - } else { - echo '
'; - printf('', _('Create Object')); - echo '
'; - } - } - - public function drawDefaultCreatingEntryStepFormEnd($entry, $step) { - echo '
'; - - # Javascript - $this->draw('Javascript', $entry); - } - - protected function drawDefaultCreatingEntryContainerChooser($entry, $default_container) { - echo ''; - printf('%s', _('Container')); - printf('', htmlspecialchars($default_container)); - draw_chooser_link('entry_form.container'); - echo ''; - echo ''; - } - - protected function drawDefaultCreatingEntryObjectClassChooser($entry) { - $oclasses = $this->getLDAPServer()->SchemaObjectClasses(); - if (!$oclasses) $oclasses = array(); - elseif (!is_array($oclasses)) $oclasses = array($oclasses); - - echo ''; - printf('%s', _('ObjectClasses')); - echo ''; - echo ''; - echo ''; - - if ($_SESSION[APPCONFIG]->GetValue('appearance', 'show_hints')) { - printf(' Hint',IMGDIR); - echo _('Hint: You must choose exactly one structural objectClass (shown in bold above)'); - echo '
'; - } - } - - protected function drawDefaultCreatingEntryRdnChooser($entry) { - $attrs = $entry->getAttributes(); - $rdn_attr = $entry->getRdnAttribute(); - - printf('%s', 'RDN'); - echo ''; - } - - protected function drawDefaultCreatingEntryShownAttributes($entry) { - $attrs = array(); - - # Put required attributes first - foreach ($this->shown_attributes as $sa) - if ($sa->isRequired()) $attrs[] = $sa; - foreach ($this->shown_attributes as $sa) - if (!$sa->isRequired()) $attrs[] = $sa; - - $has_required_attrs = false; - $has_optional_attrs = false; - foreach ($attrs as $attr) { - if ($attr->isRequired()) { - if (!$has_required_attrs) { - printf('%s', _('Required Attributes')); - $has_required_attrs = true; - } - - } else { - if (!$has_optional_attrs) { - if (!$has_required_attrs) { - printf('%s', _('Required Attributes')); - printf('
(%s)
', _('none')); - } - printf('%s', _('Optional Attributes')); - $has_optional_attrs = true; - } - } - - $this->draw('',$attr,$entry); - echo "\n"; - } - - if (!$has_optional_attrs) { - printf('%s', _('Optional Attributes')); - printf('
(%s)
', _('none')); - } - } - - protected function drawDefaultCreatingEntryHiddenAttributes($entry) { - foreach ($this->hidden_attributes as $attr) { - $this->draw('',$attr,$entry); - echo "\n"; - } - } - - protected function drawDefaultCreatingEntryJavascript($entry) { - $this->draw('Entry::Javascript', $entry); - } - - /*******************************/ - /* Paint a DefaultEditingEntry */ - /*******************************/ - - public function visitDefaultEditingEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - - # Init - $this->visit('Entry::Start', $entry); - - # Header - $this->draw('Header', $entry); - - # Form start - if (! $entry->isReadOnly()) { - echo '
'; - printf('',$this->index); - printf('',htmlspecialchars($entry->getDn())); - } - - echo '
'."\n\n"; - echo ''; - } - - public function visitDefaultEditingEntryEnd($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - - # Draw internal attributes - if (get_request('show_internal_attrs','REQUEST')) { - $this->draw('InternalAttributes', $entry); - echo "\n\n"; - } - - # Draw visible attributes - $this->draw('ShownAttributes', $entry); - - # Form end - if (! $entry->isReadOnly()) { - $this->draw('FormSubmitButton', $entry); - echo '
'; - - # Draw hidden attributes - $this->draw('HiddenAttributes', $entry); - - printf('
'); - - } else { - printf(''); - } - - # Javascript - $this->draw('Javascript', $entry); - } - - protected function initDefaultEditingEntryVisit($entry) { - parent::initDefaultEditingEntryVisit($entry); - - $this->url_base = sprintf('cmd.php?server_id=%s&dn=%s', $this->index, rawurlencode($entry->getDn())); - $this->hint_layout = sprintf('%s%%s',IMGDIR,_('Hint')); - $this->action_layout = '%s%s'; - } - - protected function drawDefaultEditingEntryTitle($entry) { - $dn = $entry->getDn(); - $rdn = get_rdn($dn); - - printf('

%s

',htmlspecialchars($rdn)); - } - - protected function drawDefaultEditingEntrySubtitle($entry) { - echo '

'; - echo _('Server'); - echo _(':'); - echo ' '; - echo $this->getLDAPServer()->name; - echo '     '; - - echo _('Distinguished Name'); - echo _(':'); - echo ' '; - echo htmlspecialchars($entry->getDn()); - echo ''; - echo '
'; - - echo _('Template'); - echo _(':'); - echo ' '; - echo htmlspecialchars($entry->getTemplateTitle()); - echo ''; - if ($entry->getTemplateName()) { - echo ' ('; - echo htmlspecialchars($entry->getTemplateName()); - echo ')'; - } - echo '

'; - } - - protected function drawDefaultEditingEntryMenu($entry) { - $i = 0; - $item = ''; - - echo ''; - echo ''; - $menuitem_number = 0; - - while (($item = $this->get('MenuItem', $entry, $i)) !== false) { - if ($item) { - $endofrow = 0; - $it = ''; // menu item - $ms = ''; // item message - - if (is_array($item)) { - if (count($item) > 0) { - $it = $item[0]; - if (count($item) > 1) $ms = $item[1]; - } - } else { - $it = $item; - } - - if ($it) { - $menuitem_number++; - echo $it; - - if ($ms) { - if (($menuitem_number % 2) == 1) { - $menuitem_number++; - echo ''; - $endofrow = 0; - } - if ($endofrow) - print $ms; - else - echo "$ms"; - echo ""; - $endofrow = 1; - - } else { - if ($menuitem_number > 1 && ($menuitem_number % 2) == 0) { - echo ''; - $endofrow = 1; - } - } - - } elseif ($ms) { - if (($menuitem_number % 2) == 1) { - $menuitem_number++; - echo ''; - $endofrow = 0; - } - - if ($endofrow) - print $ms; - else - echo "$ms"; - echo ""; - $endofrow = 1; - } - } - $i++; - } - - if (($menuitem_number % 2) == 1) echo ''; - else echo ''; - echo ''; - echo ''; - } - - protected function getDefaultEditingEntryMenuItem($entry, $i) { - $config = $_SESSION[APPCONFIG]; - - switch ($i) { - case IdEntryRefreshMenuItem : - if ($config->isCommandAvailable('entry_refresh')) - return $this->get('RefreshMenuItem', $entry); - else return ''; - - case IdEntryExportBaseMenuItem : - if ($config->isCommandAvailable('export')) - return $this->get('ExportBaseMenuItem', $entry); - else return ''; - - case IdEntryMoveMenuItem : - if (!$entry->isReadOnly() && $config->isCommandAvailable('entry_move')) - return $this->get('MoveMenuItem', $entry); - else return ''; - - case IdEntryInternalAttributesMenuItem : - if ($config->isCommandAvailable('entry_internal_attributes_show')) - return $this->get('InternalAttributesMenuItem', $entry); - else return ''; - - case IdEntryDeleteMenuItem : - if (!$entry->isReadOnly() && $config->isCommandAvailable('entry_delete', 'simple_delete')) - return $this->get('DeleteMenuItem', $entry); - else return ''; - - case IdEntryRenameMenuItem : - if (!$entry->isReadOnly() && $config->isCommandAvailable('entry_rename')) { - foreach ($entry->getRdnAttributeName() as $rdnAttr) { - $rdnAttr = $entry->getAttribute($rdnAttr); - if ($rdnAttr && $rdnAttr->isVisible() && !$rdnAttr->isReadOnly()) - return $this->get('RenameMenuItem', $entry); - } - } - return ''; - - case IdEntryDeleteAttributeMessage : - if ($config->GetValue('appearance', 'show_hints') - && $config->isCommandAvailable('attribute_delete')) - return array('', $this->get('DeleteAttributeMessage', $entry)); - else return ''; - - case IdEntryCompareMenuItem : - if (!$entry->isReadOnly() && $config->isCommandAvailable('entry_compare')) - return $this->get('CompareMenuItem', $entry); - else return ''; - - case IdEntryCreateMenuItem : - if (!$entry->isReadOnly() && !$entry->isLeaf() - && $config->isCommandAvailable('entry_create')) - return $this->get('CreateMenuItem', $entry); - else return ''; - - case IdEntryAddAttributeMenuItem : - if (!$entry->isReadOnly() && $config->isCommandAvailable('attribute_add')) - return $this->get('AddAttributeMenuItem', $entry); - else return ''; - - case IdEntryShowChildrenMenuItem : - case IdEntryExportSubMenuItem : - static $children_count = false; - static $more_children = false; - if ($children_count === false) { - # Visible children in the tree - $children_count = $entry->getChildrenNumber(); - # Is there filtered children ? - $more_children = $entry->isSizeLimited(); - if (!$more_children) { - # All children in ldap - $all_children = $this->getLDAPServer()->getContainerContents( - $entry->getDn(), $children_count + 1, - '(objectClass=*)', $config->GetValue('deref','view')); - $more_children = (count($all_children) > $children_count); - } - } - - if ($children_count > 0 || $more_children) { - if ($children_count <= 0) $children_count = ''; - if ($more_children) $children_count .= '+'; - - if ($i == IdEntryShowChildrenMenuItem) { - return $this->get('ShowChildrenMenuItem', $entry, $children_count); - } elseif ($i == IdEntryExportSubMenuItem && $config->isCommandAvailable('export')) { - return $this->get('ExportSubMenuItem', $entry); - } else { - return ''; - } - } else { - return ''; - } - - case IdEntryViewSchemaMessage : - if ($config->GetValue('appearance', 'show_hints') && $config->isCommandAvailable('schema')) - return array('', $this->get('ViewSchemaMessage', $entry)); - else return ''; - - case IdEntryReadOnlyMessage : - if ($entry->isReadOnly()) - return array('', $this->get('ReadOnlyMessage', $entry)); - else return ''; - - case IdEntryModifiedAttributesMessage : - $modified_attrs = array(); - foreach ($entry->getAttributes() as $attr) { - if ($attr->hasBeenModified()) - $modified_attrs[] = $attr->getFriendlyName(); - } - if ($modified_attrs) { - return array('', $this->get('ModifiedAttributesMessage', $entry, $modified_attrs)); - } else return ''; - - default : - return false; - } - } - - protected function getDefaultEditingEntryRefreshMenuItem($entry) { - $href = $this->url_base.'&cmd=template_engine&junk='.random_junk(); - - return sprintf($this->action_layout,IMGDIR,'refresh.png',_('Refresh'), - htmlspecialchars($href),_('Refresh this entry'),_('Refresh')); - } - - protected function getDefaultEditingEntryExportBaseMenuItem($entry) { - $href = $this->url_base.'&cmd=export_form&scope=base'; - - return sprintf($this->action_layout,IMGDIR,'save.png',_('Save'), - htmlspecialchars($href),_('Save a dump of this object'),_('Export')); - } - - protected function getDefaultEditingEntryMoveMenuItem($entry) { - $href = $this->url_base.'&cmd=copy_form'; - - return sprintf($this->action_layout,IMGDIR,'cut.png',_('Cut'),htmlspecialchars($href), - _('Copy this object to another location,a new DN, or another server'), - _('Copy or move this entry')); - } - - protected function getDefaultEditingEntryInternalAttributesMenuItem($entry) { - if (get_request('show_internal_attrs','REQUEST')) { - $href = $this->url_base.'&cmd=template_engine&junk='.random_junk(); - - return sprintf($this->action_layout,IMGDIR,'tools-no.png',_('Hide'), - htmlspecialchars($href),'',_('Hide internal attributes')); - - } else { - $href = $this->url_base.'&cmd=template_engine&show_internal_attrs=true'; - - return sprintf($this->action_layout,IMGDIR,'tools.png',_('Show'), - htmlspecialchars($href),'',_('Show internal attributes')); - } - } - - protected function getDefaultEditingEntryDeleteMenuItem($entry) { - $href = $this->url_base.'&cmd=delete_form'; - - return sprintf($this->action_layout,IMGDIR,'trash.png',_('Trash'),htmlspecialchars($href), - _('You will be prompted to confirm this decision'),_('Delete this entry')); - } - - protected function getDefaultEditingEntryRenameMenuItem($entry) { - $href = $this->url_base.'&cmd=rename_form'; - - return sprintf($this->action_layout,IMGDIR,'rename.png',_('Rename'),htmlspecialchars($href),'',_('Rename')); - } - - protected function getDefaultEditingEntryCompareMenuItem($entry) { - $href = $this->url_base.'&cmd=compare_form'; - - return sprintf($this->action_layout,IMGDIR,'compare.png',_('Compare'), - htmlspecialchars($href),'',_('Compare with another entry')); - } - - protected function getDefaultEditingEntryCreateMenuItem($entry) { - $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&container=%s', - $this->index,rawurlencode($entry->getDn())); - - return sprintf($this->action_layout,IMGDIR,'star.png',_('Create'),htmlspecialchars($href),'',_('Create a child entry')); - } - - protected function getDefaultEditingEntryAddAttributeMenuItem($entry) { - $href = $this->url_base.'&cmd=add_attr_form'; - - return sprintf($this->action_layout,IMGDIR,'add.png',_('Add'),htmlspecialchars($href),'',_('Add new attribute')); - } - - protected function getDefaultEditingEntryShowChildrenMenuItem($entry,$children_count) { - $href = sprintf('cmd.php?cmd=search&server_id=%s&search=true&filter=%s&base_dn=%s&form=advanced&scope=one', - $this->index,rawurlencode('objectClass=*'),rawurlencode($entry->getDn())); - - return sprintf($this->action_layout,IMGDIR,'children.png',_('Children'),htmlspecialchars($href),'', - ($children_count == 1) ? _('View 1 child') : sprintf(_('View %s children'),$children_count)); - } - - protected function getDefaultEditingEntryExportSubMenuItem($entry) { - $href = sprintf('%s&cmd=export_form&scope=%s',$this->url_base,'sub'); - - return sprintf($this->action_layout,IMGDIR,'save.png',_('Save'),htmlspecialchars($href), - _('Save a dump of this object and all of its children'),_('Export subtree')); - } - - protected function getDefaultEditingEntryDeleteAttributeMessage($entry) { - if ($_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete_value') && ! $entry->isReadOnly()) - return sprintf($this->hint_layout,_('Hint: To delete an attribute, empty the text field and click save.')); - else - return ''; - } - - protected function getDefaultEditingEntryViewSchemaMessage($entry) { - return sprintf($this->hint_layout,_('Hint: To view the schema for an attribute, click the attribute name.')); - } - - protected function getDefaultEditingEntryReadOnlyMessage($entry) { - return sprintf($this->hint_layout,_('Viewing entry in read-only mode.')); - } - - protected function getDefaultEditingEntryModifiedAttributesMessage($entry,&$modified_attributes) { - return sprintf($this->hint_layout, - (count($modified_attributes) == 1) - ? sprintf(_('An attribute (%s) was modified and is highlighted below.'),implode('',$modified_attributes)) - : sprintf(_('Some attributes (%s) were modified and are highlighted below.'),implode(', ',$modified_attributes))); - } - - protected function drawDefaultEditingEntryInternalAttributes($entry) { - $counter = 0; - - foreach ($this->internal_attributes as $attr) { - $this->draw('',$attr,$entry); - $counter++; - echo "\n"; - } - - if ($counter == 0) { - echo '('; - echo _('No internal attributes'); - echo ')'; - } - } - - protected function drawDefaultEditingEntryShownAttributes($entry) { - foreach ($this->shown_attributes as $attr) { - $this->draw('',$attr,$entry); - echo "\n"; - } - } - - protected function drawDefaultEditingEntryHiddenAttributes($entry) { - foreach ($this->hidden_attributes as $attr) { - $this->draw('',$attr,$entry); - echo "\n"; - } - } - - protected function drawDefaultEditingEntryFormSubmitButton($entry) { - echo '
'; - } - - protected function drawDefaultEditingEntryJavascript($entry) { - $this->draw('Entry::Javascript', $entry); - } - - /*********************************/ - /* Paint a TemplateCreatingEntry */ - /*********************************/ - - public function visitTemplateCreatingEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - - $template = get_request('template','REQUEST'); - $step = get_request('step','REQUEST'); - - if ($template) { - if ($template == 'none') { - $this->visit('DefaultCreatingEntry::Start', $entry); - return; - } else { - $entry->setSelectedTemplateName($template); - } - - } elseif ($step && $step > 0) { - $this->visit('DefaultCreatingEntry::Start', $entry); - return; - } - - if ($entry->getSelectedTemplateName()) { - # if we already choose an creation template, use it to display the entry - $this->visit('DefaultCreatingEntry::Start', $entry); - - } elseif ($entry->getTemplatesCount() <= 0) { - # if no template is available for this entry, draws it - # to the parent manner - $this->visit('DefaultCreatingEntry::Start', $entry); - - } elseif (($entry->getTemplatesCount() == 1) && !$entry->hasDefaultTemplate()) { - $templates = &$entry->getTemplates(); - $template_names = array_keys($templates); - $entry->setSelectedTemplateName($template_names[0]); - $this->visit('DefaultCreatingEntry::Start', $entry); - - } else { - $this->visit_attributes = false; - - # propose the template choice - $this->draw('TemplateChoice', $entry); - } - } - - public function visitTemplateCreatingEntryEnd($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - - if ($this->visit_attributes) { - foreach ($this->shown_attributes as $attr) { - $page = 1; - if ($attr->hasProperty('page')) { - $page = $attr->getProperty('page'); - } else { - $attr->setProperty('page', 1); - } - if ($page && $page > $this->laststep) { - $this->laststep = $page; - } - } - $this->visit('DefaultCreatingEntry::End', $entry); - $entry->setSelectedTemplateName(''); - } - } - - protected function initTemplateCreatingEntryVisit($entry) { - $this->init('DefaultCreatingEntry::Visit', $entry); - $this->laststep = 1; - } - - protected function drawTemplateCreatingEntryRdnChooser($entry) { - $rdn_attr = $entry->getRdnAttribute(); - - if (!$rdn_attr) { - $this->draw('DefaultCreatingEntry::RdnChooser', $entry); - } else { - printf('', htmlspecialchars($rdn_attr->getName())); - } - } - - protected function drawTemplateCreatingEntryStepTitle($entry, $step) { - if (!$entry->getSelectedTemplateName()) { - $this->draw('DefaultCreatingEntry::StepTitle', $entry, $step); - - } else if ($entry->hasProperty('description')) { - echo '

'; - echo $entry->getProperty('description'); - echo ' '; - echo _('('); - printf(_('step %s of %s'), $step, $this->laststep); - echo _(')'); - echo '

'; - } - } - - public function drawTemplateCreatingEntryStepFormStart($entry, $step) { - if ($entry->getSelectedTemplateName()) { - if ($step < $this->laststep) { - echo '
'; - - } else { - echo ''; - printf('', - $entry->hasProperty('action') ? rawurlencode($entry->getProperty('action')) : 'create'); - } - - } else { - $this->draw('DefaultCreatingEntry::StepFormStart', $entry, $step); - } - } - - public function drawTemplateCreatingEntryStepForm($entry, $step) { - if (!$entry->getSelectedTemplateName()) { - $this->draw('DefaultCreatingEntry::StepForm', $entry, $step); - return; - } - - $container = $entry->getContainer(); - - printf('', htmlspecialchars($container)); - printf('', $this->index); - printf('', $entry->getSelectedTemplateName()); - printf('', $step + 1); - echo ''; - - $this->draw('RdnChooser', $entry); - - # Draw attributes - $this->draw('ShownAttributes', $entry); - - $this->draw('StepFormSubmitButton', $entry, $step); - - echo '
'; - - $this->draw('HiddenAttributes', $entry); - } - - protected function drawTemplateCreatingEntryStepFormSubmitButton($entry, $step) { - if ($step < $this->laststep) $this->draw('DefaultCreatingEntry::StepFormSubmitButton', $entry, 1); - else $this->draw('DefaultCreatingEntry::StepFormSubmitButton', $entry, 2); - } - - protected function drawTemplateCreatingEntryTemplateChoice($entry) { - $this->draw('Title', $entry); - $this->draw('Subtitle', $entry); - echo "\n"; - - printf('

%s

',_('Select a template for the creation process')); - - $href = sprintf('cmd.php?%s', array_to_query_string($_GET,array('meth'),false)); - echo ''; - - foreach ($_POST as $p => $v) { - echo ""; - } - - echo ''; - - $server_menu_html = server_select_list($this->index, true); - printf('', _('Server'), _(':'), $server_menu_html); - - echo ''; - printf('', _('Templates'), _(':')); - echo ''; - - echo '
%s%s%s
%s%s'; - echo ''; - - $i = -1; - $templates = &$entry->getTemplates(); - $nb_templates = count($templates); - - if ($entry->hasDefaultTemplate()) $nb_templates++; - - foreach ($templates as $template_name => $template_attrs) { - $i++; - - # If the template doesnt have a title, we'll use the desc field. - $template_attrs['desc'] = isset($template_attrs['title']) ? $template_attrs['title'] : $template_attrs['desc']; - - # Balance the columns properly - if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || - ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { - echo '
'; - } - - echo ''; - - if (isset($template_attrs['invalid']) && $template_attrs['invalid']) { - printf('',IMGDIR); - } else { - printf('', - htmlspecialchars($template_name), htmlspecialchars($template_name)); - } - - printf('', - htmlspecialchars($template_name), $template_attrs['icon']); - printf(''; - } - - # Default template - if ($entry->hasDefaultTemplate()) { - $i++; - if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || - ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { - echo '
Error
'; - } - echo ''; - echo ''; - printf('',IMGDIR); - printf('',_('Default')); - } - - echo '
'; - echo '
'; - echo '
'; - } - - protected function drawTemplateCreatingEntryShownAttributes($entry) { - if (!$entry->getSelectedTemplateName()) { - $this->draw('DefaultCreatingEntry::ShownAttributes', $entry); - return; - } - - foreach ($this->shown_attributes as $attr) { - $page = $attr->getProperty('page'); - - if ($page == $this->step) { - $this->draw('',$attr,$entry); - echo "\n"; - - } else { - # The displayed attributes are the visible attributes in shown_attributes list - $attr->hide(); - $this->hidden_attributes[] = $attr; - } - } - } - - protected function drawTemplateCreatingEntryHiddenAttributes($entry) { - if (!$entry->getSelectedTemplateName()) { - $this->draw('DefaultCreatingEntry::HiddenAttributes', $entry); - return; - } - - foreach ($this->hidden_attributes as $attr) { - $this->draw('',$attr,$entry); - echo "\n"; - } - } - - protected function drawTemplateCreatingEntryJavascript($entry) { - printf("\n\n",__METHOD__); - $this->draw('DefaultCreatingEntry::Javascript', $entry); - - $templates = new Templates($this->index); - foreach ($entry->getAttributes() as $attribute) { - if ($attribute->hasProperty('onchange')) { - $onchange = $attribute->getProperty('onchange'); - if (is_array($onchange)) { - foreach ($onchange as $value) - $templates->OnChangeAdd($this->getLDAPServer(),$attribute->getName(),$value); - } else { - $templates->OnChangeAdd($this->getLDAPServer(),$attribute->getName(),$onchange); - } - } - } - $hash = $templates->getJsHash(); - - echo ''; - - printf("\n\n",__METHOD__); - } - - /********************************/ - /* Paint a TemplateEditingEntry */ - /********************************/ - - public function visitTemplateEditingEntryStart($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - - $template = get_request('template','REQUEST'); - - if ($template) { - if ($template == 'none') { - $this->visit('DefaultEditingEntry::Start', $entry); - return; - } else { - $entry->setSelectedTemplateName($template); - } - } - - if ($entry->getSelectedTemplateName()) { - # if we already choose an editing template, use it to display the entry - $this->visit('DefaultEditingEntry::Start', $entry); - } elseif ($entry->getTemplatesCount() <= 0) { - # if no template is available for this entry, draws it - # to the parent manner - $this->visit('DefaultEditingEntry::Start', $entry); - } elseif (($entry->getTemplatesCount() == 1) && !$entry->hasDefaultTemplate()) { - $templates = &$entry->getTemplates(); - $template_names = array_keys($templates); - $entry->setSelectedTemplateName($template_names[0]); - $this->visit('DefaultEditingEntry::Start', $entry); - } else { - $this->visit_attributes = false; - - # propose the template choice - $this->draw('TemplateChoice', $entry); - } - } - - public function visitTemplateEditingEntryEnd($entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$entry->getDn()); - - if ($this->visit_attributes) { - $this->visit('DefaultEditingEntry::End', $entry); - $entry->setSelectedTemplateName(''); - } - } - - protected function drawTemplateEditingEntryTemplateChoice($entry) { - $this->draw('Title', $entry); - $this->draw('Subtitle', $entry); - echo "\n"; - - printf('

%s

',_('Select a template to edit the entry')); - - $href = sprintf('cmd.php?%s', array_to_query_string($_GET,array('meth'),false)); - echo '
'; - - foreach ($_POST as $p => $v) { - echo ""; - } - - echo ''; - echo ''; - printf('',_('Templates'), _(':')); - echo ''; - - echo '
%s%s'; - echo ''; - - $i = -1; - $templates = &$entry->getTemplates(); - $nb_templates = count($templates); - - if ($entry->hasDefaultTemplate()) $nb_templates++; - - foreach ($templates as $template_name => $template_attrs) { - $i++; - - # If the template doesnt have a title, we'll use the desc field. - $template_attrs['desc'] = isset($template_attrs['title']) ? $template_attrs['title'] : $template_attrs['desc']; - - # Balance the columns properly - if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || - ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { - echo '
'; - } - - echo ''; - - printf('', - htmlspecialchars($template_name), htmlspecialchars($template_name)); - - printf('', - htmlspecialchars($template_name), $template_attrs['icon']); - printf(''; - } - - # Default template - if ($entry->hasDefaultTemplate()) { - $i++; - if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || - ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { - echo '
'; - } - echo ''; - echo ''; - printf('',IMGDIR); - printf('',_('Default')); - } - - echo '
'; - echo '
'; - echo '
'; - } - - protected function drawTemplateEditingEntryShownAttributes($entry) { - foreach ($this->shown_attributes as $attr) { - // @todo if this->page == attr->page - $this->draw('',$attr,$entry); - echo "\n"; - } - } - - protected function drawTemplateEditingEntryHiddenAttributes($entry) { - printf('', $entry->getSelectedTemplateName()); - $this->draw('DefaultEditingEntry::HiddenAttributes', $entry); - } - - protected function drawTemplateEditingEntryJavascript($entry) { - printf("\n\n",__METHOD__); - $this->draw('DefaultEditingEntry::Javascript', $entry); - - $templates = new Templates($this->index); - foreach ($entry->getAttributes() as $attribute) { - if ($attribute->hasProperty('onchange')) { - $onchange = $attribute->getProperty('onchange'); - if (is_array($onchange)) { - foreach ($onchange as $value) - $templates->OnChangeAdd($this->getLDAPServer(),$attribute->getName(),$value); - } else { - $templates->OnChangeAdd($this->getLDAPServer(),$attribute->getName(),$onchange); - } - } - } - $hash = $templates->getJsHash(); - - echo ''; - printf("\n\n",__METHOD__); - } - - /**************************/ - /* Paint an Attribute */ - /**************************/ - - protected function drawAttribute($attribute,$entry) { - if ($attribute->isVisible()) $this->draw('Informations', $attribute); - $this->draw('Values',$attribute,$entry); - } - - protected function drawAttributeJavascript($attribute) { - echo ''."\n"; - } - - protected function drawAttributeFocusJavascript($attribute, $component) { - $entry = $attribute->getEntry(); - - if ($entry) - echo $this->get('AttributeFocusJavascript', $entry, $attribute, $component); - } - - protected function drawAttributeBlurJavascript($attribute, $component) { - $entry = $attribute->getEntry(); - - if ($entry) - echo $this->get('AttributeBlurJavascript', $entry, $attribute, $component); - } - - protected function drawAttributeValidateJavascript($attribute, $component, $silence, $var_valid) { - if ($attribute->isRequired()) { - echo 'var vals = getAttributeValues("new", "'.$attribute->getName().'"); - if (vals.length <= 0) { - '.$var_valid.' = false; - alertError("'._('This attribute is required')._(':').' '.$attribute->getFriendlyName().'", '.$silence.'); - }'; - echo 'var comp = getAttributeComponents("new", "'.$attribute->getName().'"); - for (var i = 0; i < comp.length; i++) { - comp[i].style.backgroundColor = '.$var_valid.' ? "white" : \'#FFFFA0\'; - comp[i].style.color = '.$var_valid.' ? "black" : \'#00005F\'; - }'; - } - } - - protected function getEntryAttributeFocusJavascript($entry, $attribute, $component) { - return ''; - } - - protected function getEntryAttributeBlurJavascript($entry, $attribute, $component) { - return ''; - } - - protected function getDefaultCreatingEntryAttributeBlurJavascript($entry, $attribute, $component) { - return "\n\t\t\t\t\t\t".'validate_'.$attribute->getName().'('.$component.', false);'."\n"; - } - - protected function getTemplateCreatingEntryAttributeBlurJavascript($entry, $attribute, $component) { - $j = 'fill('.$component.'.id, pla_getComponentValue('.$component.'));'; - return $j; - } - - protected function getDefaultEditingEntryAttributeBlurJavascript($entry, $attribute, $component) { - return "\n\t\t\t\t\t\t".'validate_'.$attribute->getName().'('.$component.', false);'."\n"; - } - - protected function getTemplateEditingEntryAttributeBlurJavascript($entry, $attribute, $component) { - $j = 'fill('.$component.'.id, pla_getComponentValue('.$component.'));'; - return $j; - } - - protected function drawAttributeFillJavascript($attribute, $component_id, $component_value) { - echo "\n\t\t\t\t\t\t".'validate_'.$attribute->getName().'(pla_getComponentById('.$component_id.'), false);'."\n"; - } - - protected function drawAttributeInformations($attribute) { - if (($this->context == ENTRY_WRITER_EDITING_CONTEXT) && $attribute->hasBeenModified()) echo ''; - else echo ''; - - echo ''; - $this->draw('Name', $attribute); - echo ''; - - echo ''; - - # Setup the $attr_note, which will be displayed to the right of the attr name (if any) - if ($_SESSION[APPCONFIG]->GetValue('appearance', 'show_attribute_notes')) { - $this->draw('Notes', $attribute); - } - - echo ''; - echo ''; - } - - protected function drawAttributeNotes($attribute) { - $attr_note = ''; - - $alias_note = $this->get('AliasNote', $attribute); - if ($alias_note) { - if (trim($attr_note)) $attr_note .= ', '; - $attr_note .= $alias_note; - } - - $required_note = $this->get('RequiredNote', $attribute); - if ($required_note) { - if (trim($attr_note)) $attr_note .= ', '; - $attr_note .= $required_note; - } - - $rdn_note = $this->get('RdnNote', $attribute); - if ($rdn_note) { - if (trim($attr_note)) $attr_note .= ', '; - $attr_note .= $rdn_note; - } - - $hint_note = $this->get('HintNote',$attribute); - if ($hint_note) { - if (trim($attr_note)) $attr_note .= ', '; - $attr_note .= $hint_note; - } - - if ($attr_note) printf('%s', $attr_note); - - if ($attribute->isReadOnly() && $this->getLDAPServer()->isAttrReadOnly($attribute->getName())) { - printf('(%s)', - _('This attribute has been flagged as read only by the phpLDAPadmin administrator'), - _('read only')); - } - } - - protected function drawAttributeValues($attribute,$entry) { - if ($attribute->isVisible()) $this->draw('StartValueLine', $attribute); - - # draws values - $value_count = $attribute->getValueCount(); - $i = 0; - for (; $i < $value_count; $i++) { - $this->draw('Value',$attribute,$i,$entry); - } - - if ($this->context == ENTRY_WRITER_CREATION_CONTEXT) { - $blankvalue_count = $attribute->getMaxValueCount(); - if ($blankvalue_count < 0) $blankvalue_count = 1; - else $blankvalue_count -= $value_count; - - for ($j = 0; $j < $blankvalue_count; $j++) { - $this->draw('BlankValue',$attribute,$i+$j,$entry); - } - } - - if ($attribute->isVisible()) { - $this->draw('Menu', $attribute); - $this->draw('EndValueLine', $attribute); - } - } - - protected function drawAttributeMenu($attribute) { - $i = 0; - $item = ''; - - while (($item = $this->get('MenuItem', $attribute, $i)) !== false) { - if ($item) { - echo '
'.$item.'
'; - } - $i++; - } - } - - protected function getAttributeMenuItem($attribute, $i) { - if ($this->context != ENTRY_WRITER_EDITING_CONTEXT) - return false; - - switch ($i) { - case IdAttributeAddValueMenuItem : - if ($attribute->isVisible() && !$attribute->isReadOnly() - && $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value')) { - if ($attribute->getMaxValueCount() < 0 || $attribute->getValueCount() < $attribute->getMaxValueCount()) { - return $this->get('AddValueMenuItem', $attribute); - } - } - return ''; - - case IdAttributeModifyMemberMenuItem : - if (in_array($attribute->getName(), $_SESSION[APPCONFIG]->GetValue('modify_member','groupattr'))) { - if ($attribute->isVisible() && !$attribute->isReadOnly() && !$attribute->isRdn() - && ($_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value') - || $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete_value'))) { - return $this->get('ModifyMemberMenuItem', $attribute); - } - } - return ''; - - case IdAttributeRenameMenuItem : - if ($attribute->isVisible() && $attribute->isRdn() && !$attribute->isReadOnly() - && $_SESSION[APPCONFIG]->isCommandAvailable('entry_rename')) { - return $this->get('RenameMenuItem', $attribute); - } - return ''; - - default : - return false; - } - } - - protected function drawAttributeStartValueLine($attribute) { - if (($this->context == ENTRY_WRITER_EDITING_CONTEXT) && $attribute->hasBeenModified()) { - echo ''; - } else { - echo ''; - } - echo ''; - } - - protected function drawAttributeEndValueLine($attribute) { - echo ''; - echo ''; - - if (($this->context == ENTRY_WRITER_EDITING_CONTEXT) && $attribute->hasBeenModified()) { - echo ''; - } - } - - protected function drawAttributeValue($attribute,$i,$entry) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s, %d)',1,__FILE__,__LINE__,__METHOD__,$attribute->getName(),$i); - - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - - if ($attribute->isVisible()) { - echo '
'; - $this->draw('Icon', $attribute, $val); - echo ''; - } - - $this->draw('OldValue', $attribute, $i); - - $this->draw('NewValue',$attribute,$i,$entry); - - if ($attribute->isVisible()) { - echo ''; - if (($i == 0) && $attribute->isRequired() && $attribute->getEntry() && !$attribute->getEntry()->isReadOnly()) { - echo ' '; - $this->draw('RequiredSymbol', $attribute); - } - echo '
'; - } - } - - /** - * Save the current value to detect changes - */ - protected function drawAttributeOldValue($attribute, $i) { - if ($this->context == ENTRY_WRITER_EDITING_CONTEXT) - $val = $attribute->getValue($i); - else - $val = ''; - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - printf('', - htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val)); - } - - /** - * Display the current value - */ - protected function drawAttributeNewValue($attribute,$i,$entry) { - if (!$attribute->isVisible()) { - $this->draw('HiddenValue', $attribute, $i); - $this->draw('Javascript',$attribute); - - } elseif ($attribute->isReadOnly() || ($attribute->getEntry() && $attribute->getEntry()->getDn() && $attribute->isRdn())) { - - /* If this is the RDN, we need to see if it has multiple values. If it does, and the multivalues are not - * not in the RDN, then we need to make them editable. */ - - if ($attribute->isRdn()) { - $rdn = split('\+',get_rdn($entry->getDN())); - if (in_array(sprintf('%s=%s',$attribute->getName(),$attribute->getValue($i)),$rdn)) - $this->draw('ReadOnlyValue', $attribute, $i); - else - $this->draw('ReadWriteValue', $attribute, $i); - - } else - $this->draw('ReadOnlyValue', $attribute, $i); - - } else { - $this->draw('ReadWriteValue', $attribute, $i); - } - } - - protected function drawAttributeBlankValue($attribute,$i,$entry) { - $this->draw('Value',$attribute,$i,$entry); - } - - protected function drawAttributeHiddenValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - printf('', - htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($val)); - } - - protected function drawAttributeReadOnlyValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - printf('
', - htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), - $i, htmlspecialchars($val), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : ''); - } - - protected function drawAttributeReadWriteValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - if ($attribute->hasProperty('helper')) { - echo '
'; - } - - /* We smack an id="..." tag in here that doesn't have [][] in it to allow the - * draw_chooser_link() to identify it after the user clicks. */ - $id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); - - printf('', - htmlspecialchars($attribute->getName()), $i, $id, - htmlspecialchars($val), $attribute->getName(), $attribute->getName(), - ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', - ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); - - if ($attribute->hasProperty('helper')) { - echo ''; - $this->draw('Helper', $attribute, $i); - echo '
'; - } - } - - protected function drawAttributeHelper($attribute, $i) { - $params = $attribute->getProperty('helper'); - if (!$params) $params = array(); - elseif (!is_array($params)) $params = array($params); - - $id = isset($params['id']) ? $params['id'] : ''; - if (is_array($id)) $id = (count($id) > 0 ? $id[0] : ''); - - $display = isset($params['display']) ? $params['display'] : ''; - if (is_array($display)) $display = (count($display) > 0 ? $display[0] : ''); - - $vals = isset($params['value']) ? $params['value'] : array(); - if (!is_array($vals)) $vals = array($vals); - - $opts = isset($params['option']) ? $params['option'] : array(); - if (!is_array($opts)) $opts = array($opts); - - $dn = ''; - if ($attribute->getEntry()) { - if ($this->context == ENTRY_WRITER_CREATION_CONTEXT) { - $dn = $attribute->getEntry()->getContainer(); - } else { - $dn = $attribute->getEntry()->getDn(); - } - } - - $ldapserver = $this->getLDAPServer(); - $arr1 = array(); - foreach ($vals as $id_parval => $parval) { - $arr2 = Templates::EvaluateDefault($ldapserver, $parval, $dn, null, null); - if (is_array($arr2)) $arr1 = array_merge($arr1,$arr2); - else $arr1[$id_parval] = $arr2; - } - $vals = $arr1; - - $arr1 = array(); - foreach ($opts as $id_parval => $parval) { - $arr2 = Templates::EvaluateDefault($ldapserver, $parval, $dn, null, null); - if (is_array($arr2)) $arr1 = array_merge($arr1,$arr2); - else $arr1[$id_parval] = $arr2; - } - $opts = $arr1; - - $default = (count($vals) > 0 ? $vals[0] : ''); - if (!is_scalar($default)) $default = ''; - if (!is_null($attribute->getValue($i)) && (strlen($default) <= 0)) { - $default = $this->get('DefaultValueHelper', $attribute, $i); - } - - if (count($opts) > 0) { - $found = false; - - printf(''; - } else { - printf('', - $id, htmlspecialchars($attribute->getName()), $i, - $id, htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($default)); - } - - if ($display) { - echo '
'; - echo ''.$display.''; - echo '
'; - } - } - - protected function getAttributeDefaultValueHelper($attribute, $i) { - $params = $attribute->getProperty('helper'); - - # Should only return 1 default entry. - if (isset($params['value']) && ! is_array($params['value'])) - return $params['value']; - - # If there are multiple values, return the first one. - else if (isset($params['value']) && is_array($params['value'])) - return array_shift($params['value']); - - # No default values, return a blank. - else - return ''; - } - - protected function getAttributeRenameMenuItem($attribute) { - $encoded_dn = ''; - if ($attribute->getEntry()) $encoded_dn = rawurlencode($attribute->getEntry()->getDn()); - if (!$encoded_dn) return; // creating entry - - $url_base = sprintf('cmd.php?server_id=%s&dn=%s', $this->index, $encoded_dn); - $href = sprintf('%s&cmd=rename_form', $url_base); - - return sprintf('(%s)', htmlspecialchars($href), _('rename')); - } - - protected function getAttributeAddValueMenuItem($attribute) { - /* Draw the "add value" link under the list of values for this attributes */ - $encoded_dn = ''; - $template = ''; - if ($attribute->getEntry()) { - $encoded_dn = rawurlencode($attribute->getEntry()->getDn()); - if (method_exists($attribute->getEntry(), 'getSelectedTemplateName')) - $template = $attribute->getEntry()->getSelectedTemplateName(); - } - if (!$encoded_dn) return; // creating entry - - $href = sprintf('cmd.php?cmd=add_value_form&server_id=%s&dn=%s%s&attr=%s', - $this->index, $encoded_dn, $template ? "&template=$template" : '', rawurlencode($attribute->getName())); - - return sprintf('(%s)', - htmlspecialchars($href), sprintf(_('Add an additional value to attribute \'%s\''), - $attribute->getName()), _('add value')); - } - - protected function getAttributeModifyMemberMenuItem($attribute) { - $dn = ($attribute->getEntry()) ? $attribute->getEntry()->getDn() : ''; - $encoded_dn = ($dn) ? rawurlencode($dn) : ''; - if (!$encoded_dn) return; // creating entry - - $href = sprintf('cmd.php?cmd=modify_member_form&server_id=%s&dn=%s&attr=%s', - $this->index, $encoded_dn, rawurlencode($attribute->getName())); - - return sprintf('(%s)', - htmlspecialchars($href), sprintf(_('Modify members for \'%s\''), $dn), _('modify group members')); - } - - protected function drawAttributeIcon($attribute, $val) { - if (is_dn_string($val) || $this->getLDAPServer()->isDNAttr($attribute->getName())) { - $this->draw('DnValueIcon', $attribute, $val); - } elseif (is_mail_string($val)) { - $this->draw('MailValueIcon', $attribute, $val); - } elseif (is_url_string($val)) { - $this->draw('UrlValueIcon', $attribute, $val); - } else { - $icon = $attribute->getIcon(); - if ($icon) printf('Icon ', $icon); - } - } - - protected function drawAttributeDnValueIcon($attribute, $val) { - if (strlen($val) <= 0) { - printf('Go ',IMGDIR); - - } elseif ($this->getLDAPServer()->dnExists($val)) { - printf('Go ', - _('Go to'),htmlspecialchars($val),$this->index,rawurlencode($val),IMGDIR); - - } else { - printf('Go ',_('DN not available'),htmlspecialchars($val),IMGDIR); - } - } - - protected function drawAttributeMailValueIcon($attribute, $val) { - $img = sprintf('%s',IMGDIR,_('Mail')); - if (strlen($val) <= 0) echo $img; - else printf(''.$img.'', htmlspecialchars($val)); - echo ' '; - } - - protected function drawAttributeUrlValueIcon($attribute, $val) { - $img = sprintf('%s',IMGDIR,_('URL')); - $url = split(' +',$val,2); - if (strlen($val) <= 0) echo $img; - else printf('%s',htmlspecialchars($url[0]),$img); - echo ' '; - } - - protected function drawAttributeName($attribute) { - $config = $_SESSION[APPCONFIG]; - - $attr_display = $attribute->getFriendlyName(); - - if ($attribute->getEntry() && $attribute->getEntry()->getDn() // if not creating attribute - && $config->isCommandAvailable('schema') ) { - - $href = sprintf('cmd.php?cmd=schema&server_id=%s&view=attributes&viewvalue=%s', - $this->index, real_attr_name($attribute->getName())); - printf('%s', $attribute->getName(), htmlspecialchars($href), $attr_display); - - } else { - printf('%s', $attr_display); - } - } - - protected function getAttributeAliasNote($attribute) { - # Is there a user-friendly translation available for this attribute? - $friendly_name = $attribute->getFriendlyName(); - - if ($friendly_name != $attribute->getName()) - return sprintf('%s', - _('Note'),$friendly_name,_('is an alias for'),$attribute->getName(),_('alias')); - else - return ''; - } - - protected function getAttributeRequiredNote($attribute) { - # is this attribute required by an objectClass ? - $required_by = ''; - - if ($attribute->getEntry()) { - $schema_attr = $this->getLDAPServer()->getSchemaAttribute($attribute->getName(),$attribute->getEntry()->getDn()); - if ($schema_attr) { - $entry_attributes = $attribute->getEntry()->getAttributes(); - $objectclass_attribute = null; - foreach ($entry_attributes as $entry_attribute) { - # It seems that some LDAP servers (Domino) returns attributes in lower case? - if ($entry_attribute->getName() == 'objectClass' - || $entry_attribute->getName() == 'objectclass') { - $objectclass_attribute = $entry_attribute; - break; - } - } - - if ($objectclass_attribute) { - $classes = arrayLower($objectclass_attribute->getValues()); - foreach ($schema_attr->getRequiredByObjectClasses() as $required) { - if (in_array(strtolower($required), $classes)) { - $required_by .= $required . ' '; - } - } - } - } - } - - if ($required_by) { - return "" . _('required') . ""; - } else { - return ''; - } - } - - protected function getAttributeRdnNote($attribute) { - # is this attribute required because its the RDN - if ($attribute->isRdn()) { - return "" . 'rdn' . " "; - } else { - return ''; - } - } - - protected function getAttributeHintNote($attribute) { - # Is there a hint for this attribute - if ($attribute->getHint()) { - return sprintf('%s ',htmlspecialchars($attribute->getHint()),_('hint')); - } else { - return ''; - } - } - - protected function drawAttributeRequiredSymbol($attribute) { - echo '*'; - } - - /***************************/ - /* Paint a BinaryAttribute */ - /***************************/ - - protected function drawBinaryAttributeValues($attribute) { - $valcount = $attribute->getValueCount(); - - if ($attribute->isVisible()) { - $this->draw('StartValueLine', $attribute); - - echo ''; - echo _('Binary value'); - - if ($valcount > 0) { - if (strcasecmp($attribute->getName(), 'objectSid') == 0) { - printf(' (%s)', binSIDtoText($attribute->getValue(0))); - } - } - - echo '
'; - - if ($valcount > 0) { - if ($attribute->getEntry() && $attribute->getEntry()->getDn()) { - $href = sprintf('download_binary_attr.php?server_id=%s&dn=%s&attr=%s', - $this->index, rawurlencode($attribute->getEntry()->getDn()), - $attribute->getName()); - - if ($valcount > 1) { - for ($i=1; $i<=$valcount; $i++) { - printf('Save %s(%s)
', - htmlspecialchars($href), $i,IMGDIR,_('download value'), $i); - } - } else { - printf('Save %s
', - htmlspecialchars($href),IMGDIR,_('download value')); - } - } - - if (! $attribute->isReadOnly() && $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete')) { - printf(''. - 'Trash %s', - $attribute->getName(), $attribute->getFriendlyName(),IMGDIR,_('delete attribute')); - } - } elseif ($attribute->isReadOnly() || ! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value')) { - printf('
', - _("[no value]")); - } else { - $i = 0; - $val = ''; - $id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); - printf('
', - htmlspecialchars($attribute->getName()), $i, $id, - htmlspecialchars($val), $attribute->getName(), $attribute->getName(), - ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', - ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); - } - - echo '
'; - - $this->draw('EndValueLine', $attribute); - } else { - for ($i=0; $i<$valcount; $i++) { - $n = $attribute->getFileName($i); - $p = $attribute->getFilePath($i); - if ($n && $p) { - printf('', - htmlspecialchars($attribute->getName()), $i, md5("$n|$p")); - printf('', - htmlspecialchars($attribute->getName()), $i, md5("$n|$p")); - } - } - } - } - - protected function drawBinaryAttributeJavascript($attribute) { - printf("\n\n",__METHOD__); - $this->draw('Attribute::Javascript', $attribute); - - $dn = ''; - if ($attribute->getEntry()) $dn = $attribute->getEntry()->getDn(); - if (!$dn) return; - - static $already_draw = false; - if ($already_draw) return; - else $already_draw = true; - - echo ' - -
- - - -
'; - - echo ' - '; - printf("\n\n",__METHOD__); - } - - protected function drawBinaryAttributeBlurJavascript($attribute, $component) { - } - - /***************************/ - /* Paint a DateAttribute */ - /***************************/ - - protected function drawDateAttributeReadWriteValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - - printf(' ', - $attribute->getName(), $i, htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val), - $attribute->getName(), $attribute->getName(), - ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', - ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); - draw_date_selector_link($attribute->getName().'_'.$i); - echo ''."\n"; - } - - protected function drawDateAttributeJavascript($attribute) { - printf("\n\n",__METHOD__); - $this->draw('Attribute::Javascript', $attribute); - - $entry['date'] = $_SESSION[APPCONFIG]->GetValue('appearance','date_attrs'); - $entry['time'] = $_SESSION[APPCONFIG]->GetValue('appearance','date_attrs_showtime'); - $entry['format'] = $_SESSION[APPCONFIG]->GetValue('appearance', 'date'); - - if (isset($entry['date'][$attribute->getName()])) - $entry['format'] = $entry['date'][$attribute->getName()]; - - printf('',JSDIR); - printf('',JSDIR); - printf('',JSDIR); - - for ($i = 0; $i <= $attribute->getValueCount(); $i++) { - printf('',$attribute->getName(),$i,$entry['format']); - - if (in_array_ignore_case($attribute->getName(),array_keys($entry['time'])) && ($entry['time'][$attribute->getName()])) - printf('',$attribute->getName(),$i,'true'); - } - printf("\n\n",__METHOD__); - } - - /***************************/ - /* Paint a DnAttribute */ - /***************************/ - - protected function drawDnAttributeReadWriteValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - if ($attribute->hasProperty('helper')) { - echo '
'; - } - - $input_name = sprintf('new_values[%s][%s]', htmlspecialchars($attribute->getName()), $i); - $input_id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); - - printf(' ', - $input_name, $input_id, htmlspecialchars($val), - $attribute->getName(), $attribute->getName(), - ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', - ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); - - /* draw a link for popping up the entry browser if this is the type of attribute - * that houses DNs. */ - draw_chooser_link("entry_form.$input_id", false); - echo ''; - - if ($attribute->hasProperty('helper')) { - echo ''; - $this->draw('Helper', $attribute, $i); - echo '
'; - } - echo "\n"; - } - - protected function drawDnAttributeIcon($attribute, $val) { - $this->draw('DnValueIcon', $attribute, $val); - } - - /***************************/ - /* Paint a GidAttribute */ - /***************************/ - - protected function drawGidAttributeReadWriteValue($attribute, $i) { - $this->draw('Attribute::ReadWriteValue', $attribute, $i); - - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - - $dn = ''; - if ($attribute->getEntry()) $dn = $attribute->getEntry()->getDn(); - - # If this is a gidNumber on a non-PosixGroup entry, lookup its name and description for convenience - if (! in_array_ignore_case('posixGroup', $this->getLDAPServer()->getDNAttr($dn, 'objectClass'))) { - $gid_number = $val; - $search_group_filter = "(&(objectClass=posixGroup)(gidNumber=$val))"; - $group = $this->getLDAPServer()->search(null, null, $search_group_filter,array('dn','description')); - - if (count($group) > 0) { - echo '
'; - - $group = array_pop($group); - $group_dn = $group['dn']; - $group_name = explode('=',get_rdn($group_dn)); - $group_name = $group_name[1]; - $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', - $this->index, rawurlencode($group_dn)); - - echo ''; - printf('%s', htmlspecialchars($href), htmlspecialchars($group_name)); - - $description = isset($group['description']) ? $group['description'] : null; - - if (is_array($description)) { - foreach ($description as $item) - printf(' (%s)',htmlspecialchars($item)); - } else { - printf(' (%s)',htmlspecialchars($description)); - } - - echo ''; - } - } - } - - /***************************/ - /* Paint a JpegAttribute */ - /***************************/ - - protected function drawJpegAttributeValues($attribute) { - if ($attribute->isVisible()) { - $this->draw('StartValueLine', $attribute); - - $value_count = $attribute->getValueCount(); - if ($value_count > 0) { - /* Don't draw the delete buttons if there is more than one jpegPhoto - * (phpLDAPadmin can't handle this case yet) */ - if ($attribute->getEntry() && $attribute->getEntry()->getDn()) { - draw_jpeg_photos($this->getLDAPServer(), $attribute->getEntry()->getDn(), - $attribute->getName(), ! $attribute->isReadOnly() - && $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete')); - } - } elseif ($attribute->isReadOnly() || ! $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value')) { - printf('
',_('[no value]')); - } else { - $i = 0; - $val = ''; - $id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); - printf('
', - htmlspecialchars($attribute->getName()), $i, $id, - htmlspecialchars($val), $attribute->getName(), $attribute->getName(), - ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', - ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); - } - - $this->draw('EndValueLine', $attribute); - } else { - $this->draw('BinaryAttribute::Values', $attribute); - } - } - - /******************************/ - /* Paint a MultiLineAttribute */ - /******************************/ - - protected function drawMultiLineAttributeReadOnlyValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - printf('
', - ($attribute->getRows() > 0) ? 'rows="'.$attribute->getRows().'"' : '', - ($attribute->getCols() > 0) ? 'cols="'.$attribute->getCols().'"' : '', - htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($val)); - } - - protected function drawMultiLineAttributeReadWriteValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - printf('', - ($attribute->getRows() > 0) ? 'rows="'.$attribute->getRows().'"' : '', - ($attribute->getCols() > 0) ? 'cols="'.$attribute->getCols().'"' : '', - htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($attribute->getName()), $i, - $attribute->getName(), $attribute->getName(), - htmlspecialchars($val)); - } - - /********************************/ - /* Paint a ObjectClassAttribute */ - /********************************/ - - protected function drawObjectClassAttributeNewValue($attribute,$i,$entry) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - $schema_object = ($val) ? $this->getLDAPServer()->getSchemaObjectClass($val) : false; - $structural = (is_object($schema_object) && $schema_object->getType() == 'structural'); - - if (!$attribute->isVisible()) { - $this->draw('HiddenValue', $attribute, $i); - } elseif ($structural) { - # Is this value is a structural objectClass, make it read-only - printf('', - htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($attribute->getName()), $i, htmlspecialchars($val)); - - printf(' (%s)
', - _('This is a structural ObjectClass and cannot be removed.'), - _('structural')); - } else { - $this->draw('Attribute::NewValue',$attribute,$i,$entry); - } - } - - protected function drawObjectClassAttributeIcon($attribute, $val) { - if (strlen($val) > 0) { - $href = sprintf('cmd.php?cmd=schema&server_id=%s&view=objectClasses&viewvalue=%s', - $this->index, $val); - printf('Info ', - _('View the schema description for this objectClass'), htmlspecialchars($href),IMGDIR); - } - } - - /*****************************/ - /* Paint a PasswordAttribute */ - /*****************************/ - - protected function drawPasswordAttributeOldValue($attribute, $i) { - $this->draw('Attribute::OldValue', $attribute, $i); - } - - protected function drawPasswordAttributeHiddenValue($attribute, $i) { - if ($this->context == ENTRY_WRITER_CREATION_CONTEXT) - $this->draw('Attribute::HiddenValue', $attribute, $i); - } - - protected function drawPasswordAttributeReadOnlyValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - $enc_type = get_enc_type($val); - if ($val == '') $enc_type = get_default_hash($this->index); - $obfuscate_password = obfuscate_password_display($enc_type); - - printf('
', - ($obfuscate_password ? 'password' : 'text'), - htmlspecialchars($attribute->getName()), $i, htmlspecialchars($attribute->getName()), - $i, htmlspecialchars($val), ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : ''); - - if ($val != '') $this->draw('CheckLink', $attribute, 'new_values_'.htmlspecialchars($attribute->getName()).'_'.$i); - } - - protected function drawPasswordAttributeReadWriteValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - $enc_type = get_enc_type($val); - - # Set the default hashing type if the password is blank (must be newly created) - if ($val == '') - $enc_type = get_default_hash($this->index); - - echo '
'; - - $obfuscate_password = obfuscate_password_display($enc_type); - $id = sprintf('new_values_%s_%s', htmlspecialchars($attribute->getName()), $i); - printf('', - ($obfuscate_password ? 'password' : 'text'), - htmlspecialchars($attribute->getName()), $i, $id, - htmlspecialchars($val), - $attribute->getName(), $attribute->getName(), - ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', - ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); - - echo ''; - - if ($attribute->hasProperty('helper')) - $this->draw('Helper', $attribute, $i); - else - echo enc_type_select_list($enc_type,'enc',$attribute->getName(),$i); - - echo '
'; - - if ($attribute->hasProperty('verify') && $attribute->getProperty('verify') && $obfuscate_password) { - $id_v = sprintf('new_values_verify_%s_%s', htmlspecialchars($attribute->getName()), $i); - printf('', - htmlspecialchars($attribute->getName()), $i, $id_v, - ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', - ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); - echo ''; - printf('(%s)', _('confirm')); - echo '
'; - } - - $this->draw('CheckLink', $attribute, $id); - echo '
'; - } - - protected function getPasswordAttributeDefaultValueHelper($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - $enc_type = get_enc_type($val); - - # Set the default hashing type if the password is blank (must be newly created) - if ($val == '') { - $enc_type = get_default_hash($this->index); - } - - return $enc_type; - } - - protected function drawPasswordAttributeCheckLink($attribute, $component_id) { - printf('%s
', - $component_id/*base64_encode($val)*/, _('Check password...')); - } - - protected function drawPasswordAttributeJavascript($attribute) { - printf("\n\n",__METHOD__); - $this->draw('Attribute::Javascript', $attribute); - - static $already_draw = false; - if ($already_draw) return; - else $already_draw = true; - - # add the javascript so we can call check password later. - printf("\n\n",__METHOD__); - echo ' - '; - printf("\n\n",__METHOD__); - } - - /***********************************/ - /* Paint a RandomPasswordAttribute */ - /***********************************/ - - protected function drawRandomPasswordAttributeJavascript($attribute) { - printf("\n\n",__METHOD__); - $this->draw('PasswordAttribute::Javascript', $attribute); - - $pwd = password_generate(); - $pwd = str_replace("\\", "\\\\", $pwd); - $pwd = str_replace("'", "\\'", $pwd); - - printf("\n\n",__METHOD__); - echo ''; - printf("\n\n",__METHOD__); - } - - /******************************/ - /* Paint a SelectionAttribute */ - /******************************/ - - protected function drawSelectionAttributeValues($attribute,$entry) { - if (!$attribute->isVisible() || !$attribute->isMultiple() || ($attribute->getValueCount() > 0)) { - $this->draw('Attribute::Values',$attribute,$entry); - } else { - $this->draw('StartValueLine', $attribute); - $this->draw('Value', $attribute, 0,$entry); - $this->draw('Menu', $attribute); - $this->draw('EndValueLine', $attribute); - } - } - - protected function drawSelectionAttributeReadOnlyValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - printf('', - htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($val)); - - $select = $attribute->getSelection(); - if (isset($select[$val])) $val = $select[$val]; - echo htmlspecialchars($val).'
'; - } - - protected function drawSelectionAttributeReadWriteValue($attribute, $i) { - if ($attribute->isMultiple()) { - # For multiple selection, we draw the component only one time - if ($i > 0) return; - - if (($attribute->getSize() > 0) && ($attribute->getSize() < $attribute->getOptionCount())) { - $selected = array(); - printf(''; - - } else { - $selected = array(); - $vals = $attribute->getValues(); - $j = 0; - - echo ''; - foreach ($attribute->getSelection() as $value => $description) { - if (in_array($value, $vals)) $selected[$value] = true; - $id = 'new_values_'.htmlspecialchars($attribute->getName()).'_'.($j++); - printf('', - $id, htmlspecialchars($attribute->getName()), $value, - $attribute->getName(), $attribute->getName(), - isset($selected[$value]) ? 'checked' : '', - " $description"); - } - - foreach ($vals as $val) { - if (!isset($selected[$val])) { - $id = 'new_values_'.htmlspecialchars($attribute->getName()).'_'.($j++); - printf('', - $id, htmlspecialchars($attribute->getName()), $val, - $attribute->getName(), $attribute->getName(), - " $val"); - } - } - echo '
%s
%s
'; - } - - } else { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - if ($attribute->hasProperty('helper')) - echo '
'; - - $found = false; - $empty_value = false; - - $id = 'new_values_'.htmlspecialchars($attribute->getName()).'_'.$i; - - # If we are a required attribute, and the selection is blank, then the user cannot submit this form. - if ($attribute->isRequired() && ! count($attribute->getSelection())) - system_message(array( - 'title'=>_('Template Value Error'), - 'body'=>sprintf('This template uses a selection list for attribute [%s], however the selection list is empty.
You may need to create some dependancy entries in your LDAP server so that this attribute renders with values. Alternatively, you may be able to define the appropriate selection values in the template file.',$attribute->getName()), - 'type'=>'warn')); - - - printf(''; - - if ($attribute->hasProperty('helper')) { - echo '
'; - $this->draw('Helper', $attribute, $i); - echo '
'; - } - } - } - - protected function getSelectionAttributeMenuItem($attribute, $i) { - switch ($i) { - case IdAttributeAddValueMenuItem : - if (!$attribute->isMultiple()) { - return $this->get('Attribute::MenuItem', $attribute, $i); - } - return ''; - - case IdAttributeModifyMemberMenuItem : - return ''; - - default : - return $this->get('Attribute::MenuItem', $attribute, $i); - } - } - - protected function drawSelectionAttributeIcon($attribute, $val) { - if (!$attribute->isMultiple() || $attribute->isReadOnly()) - $this->draw('Attribute::Icon', $attribute, $val); - } - - /***************************/ - /* Paint a ShadowAttribute */ - /***************************/ - - protected function drawShadowAttributeReadOnlyValue($attribute, $i) { - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - if ($i < 0) $i = 0; - - printf('', - htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($attribute->getName()), $i, - htmlspecialchars($val)); - - $today = date('U'); - $shadow_date = $today; - if ($attribute->getEntry()) { - $shadow_date = shadow_date($attribute->getEntry()->getAttributes(),$attribute->getName()); - } - - echo htmlspecialchars($val).' '; - echo ''; - $this->draw('ShadowDate', $attribute, $shadow_date); - echo '
'; - } - - protected function drawShadowAttributeReadWriteValue($attribute, $i) { - $this->draw('Attribute::ReadWriteValue', $attribute, $i); - - $val = $attribute->getValue($i); - if (!is_string($val) || (strlen($val) <= 0)) return; - - $today = date('U'); - $shadow_date = $today; - if ($attribute->getEntry()) { - $shadow_date = shadow_date($attribute->getEntry()->getAttributes(),$attribute->getName()); - } - - # Show the dates for all the shadow attributes. - if ($shadow_date !== false) { - echo ''; - $this->draw('ShadowDate', $attribute, $shadow_date); - echo ''; - echo '
'; - } - } - - protected function drawShadowAttributeShadowDate($attribute, $shadow_date) { - $config = $_SESSION[APPCONFIG]; - - $shadow_before_today_attrs = arrayLower($attribute->shadow_before_today_attrs); - $shadow_after_today_attrs = arrayLower($attribute->shadow_after_today_attrs); - $today = date('U'); - - if (($today < $shadow_date) && in_array(strtolower($attribute->getName()),$shadow_before_today_attrs)) { - echo '('; - echo htmlspecialchars(strftime($config->GetValue('appearance', 'date'), $shadow_date)); - echo ')'; - - } elseif (($today > $shadow_date) && in_array(strtolower($attribute->getName()),$shadow_after_today_attrs)) { - echo '('; - echo htmlspecialchars(strftime($config->GetValue('appearance', 'date'), $shadow_date)); - echo ')'; - - } else { - echo '('; - echo htmlspecialchars(strftime($config->GetValue('appearance', 'date'), $shadow_date)); - echo ')'; - } - } -} -?> diff --git a/lib/EntryWriter2.php b/lib/EntryWriter2.php deleted file mode 100644 index 1185bd1..0000000 --- a/lib/EntryWriter2.php +++ /dev/null @@ -1,301 +0,0 @@ -getAttributes(); - $rdn_attr = $entry->getRdnAttribute(); - - echo ' '; - printf(' %s%s','RDN',_(':')); - echo ''; - } - - protected function drawDefaultCreatingEntryShownAttributes($entry) { - $attrs = array(); - - // put required attributes first - foreach ($this->shown_attributes as $sa) { - if ($sa->isRequired()) $attrs[] = $sa; - } - foreach ($this->shown_attributes as $sa) { - if (!$sa->isRequired()) $attrs[] = $sa; - } - - $has_required_attrs = false; - $has_optional_attrs = false; - foreach ($attrs as $attr) { - if ($attr->isRequired()) { - if (!$has_required_attrs) { - echo ' '; - $has_required_attrs = true; - } - } else { - if (!$has_optional_attrs) { - if (!$has_required_attrs) { - // no required attributes - } - echo ' '; - $has_optional_attrs = true; - } - } - - $this->draw('', $attr); - echo "\n"; - } - - if (!$has_optional_attrs) { - // no optional attributes - } - } - - public function drawDefaultCreatingEntryStepFormSubmitButton($entry, $step) { - echo ' '; - if ($step == 1) { - echo '
'; - printf('', _('Proceed >>')); - echo '
'; - } else { - echo '
'; - printf('', _('Create Object')); - echo '
'; - } - } - - /*******************************/ - /* Paint a DefaultEditingEntry */ - /*******************************/ - - protected function drawDefaultEditingEntryInternalAttributes($entry) { - $counter = 0; - - echo ' '; - - foreach ($this->internal_attributes as $attr) { - $this->draw('', $attr); - $counter++; - echo "\n"; - } - - if ($counter == 0) { - echo '('; - echo _('No internal attributes'); - echo ')'; - } - } - - protected function drawDefaultEditingEntryShownAttributes($entry) { - echo ' '; - parent::drawDefaultEditingEntryShownAttributes($entry); - } - - protected function drawDefaultEditingEntryFormSubmitButton($entry) { - echo ' '; - echo '
'; - } - - /*********************************/ - /* Paint a TemplateCreatingEntry */ - /*********************************/ - - protected function drawTemplateCreatingEntryShownAttributes($entry) { - if ($entry->getSelectedTemplateName()) { - echo ' '; - } - parent::drawTemplateCreatingEntryShownAttributes($entry); - } - - /********************************/ - /* Paint a TemplateEditingEntry */ - /********************************/ - - protected function drawTemplateEditingEntryShownAttributes($entry) { - echo ' '; - parent::drawTemplateEditingEntryShownAttributes($entry); - } - - /**************************/ - /* Paint an Attribute */ - /**************************/ - - protected function drawAttribute($attribute) { - if ($attribute->isVisible()) { - if (($this->context == ENTRY_WRITER_EDITING_CONTEXT) && $attribute->hasBeenModified()) { - echo ''; - } else { - echo ''; - } - $this->draw('Informations', $attribute); - } - - $this->draw('Values', $attribute); - - if ($attribute->isVisible()) { - echo ''; - if (($this->context == ENTRY_WRITER_EDITING_CONTEXT) && $attribute->hasBeenModified()) { - //echo ''; - } - if ($attribute->hasProperty('spacer') && $attribute->getProperty('spacer')) { - echo ' '; - } - } - } - - protected function drawAttributeInformations($attribute) { - echo ''; - $this->draw('Icon', $attribute, ''); - echo ''; - - echo ''; - $this->draw('Name', $attribute); - echo _(':'); - - echo '
'; - if ($_SESSION[APPCONFIG]->GetValue('appearance', 'show_attribute_notes')) { - $this->draw('Notes', $attribute); - } - - echo ''; - } - - protected function drawAttributeNotes($attribute) { - $attr_note = ''; - - $alias_note = $this->get('AliasNote', $attribute); - if ($alias_note) { - if (trim($attr_note)) $attr_note .= ', '; - $attr_note .= $alias_note; - } - - $required_note = $this->get('RequiredNote', $attribute); - if ($required_note) { - if (trim($attr_note)) $attr_note .= ', '; - $attr_note .= $required_note; - } - - $rdn_note = $this->get('RdnNote', $attribute); - if ($rdn_note) { - if (trim($attr_note)) $attr_note .= ', '; - $attr_note .= $rdn_note; - } - - if ($attr_note) printf('%s', $attr_note); - - if ($attribute->isReadOnly() && $this->getLDAPServer()->isAttrReadOnly($attribute->getName())) { - printf('(%s)', - _('This attribute has been flagged as read only by the phpLDAPadmin administrator'), - _('read only')); - } - } - - protected function drawAttributeStartValueLine($attribute) { - echo ''; - } - - protected function drawAttributeEndValueLine($attribute) { - echo ''; - } - - protected function drawAttributeValue($attribute, $i) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s, %d)',1,__FILE__,__LINE__,__METHOD__,$attribute->getName(),$i); - - $val = $attribute->getValue($i); - if (!is_string($val)) $val = ''; - - if ($attribute->isVisible()) { - echo '
'; - } - - $this->draw('OldValue', $attribute, $i); - - $this->draw('NewValue', $attribute, $i); - - if ($attribute->isVisible()) { - echo ''; - if (($i == 0) && $attribute->isRequired() && $attribute->getEntry() && !$attribute->getEntry()->isReadOnly()) { - echo ' '; - $this->draw('RequiredSymbol', $attribute); - } - echo '
'; - } - } - - protected function drawAttributeMenu($attribute) { - if ($attribute->getHint()) - printf('Hint %s',IMGDIR,$attribute->getHint()); - - parent::drawAttributeMenu($attribute); - } - - /***************************/ - /* Paint a BinaryAttribute */ - /***************************/ - - /***************************/ - /* Paint a DateAttribute */ - /***************************/ - - /***************************/ - /* Paint a DnAttribute */ - /***************************/ - - /***************************/ - /* Paint a GidAttribute */ - /***************************/ - - /***************************/ - /* Paint a JpegAttribute */ - /***************************/ - - /******************************/ - /* Paint a MultiLineAttribute */ - /******************************/ - - /********************************/ - /* Paint a ObjectClassAttribute */ - /********************************/ - - /*****************************/ - /* Paint a PasswordAttribute */ - /*****************************/ - - /***********************************/ - /* Paint a RandomPasswordAttribute */ - /***********************************/ - - /******************************/ - /* Paint a SelectionAttribute */ - /******************************/ - - /***************************/ - /* Paint a ShadowAttribute */ - /***************************/ - -} - -?> diff --git a/lib/GidAttribute.php b/lib/GidAttribute.php index d34b9b4..b72d1e9 100644 --- a/lib/GidAttribute.php +++ b/lib/GidAttribute.php @@ -1,11 +1,18 @@ getLdapServer(); - - $this->draw_mass_deletion_start_form(); + $server = $this->getServer(); echo ''; - $this->draw_server_name(); + if (! $onlytree) + $this->draw_server_name(); $this->javascript = ''; $javascript_id = 0; @@ -28,155 +42,131 @@ class HTMLTree extends Tree { /* Do we have what it takes to authenticate here, or do we need to * present the user with a login link (for 'cookie' and 'session' auth_types)? */ - if ($ldapserver->haveAuthInfo()) { - if ($ldapserver->connect(false)) { + if ($server->isLoggedIn(null)) { + if (! $onlytree) { $this->draw_menu(); - if ($ldapserver->auth_type != 'config') + if ($server->getAuthType() != 'config') $this->draw_logged_in_dn(); else printf('',$this->getDepth()+3); - if ($ldapserver->isReadOnly()) + if ($server->isReadOnly()) printf('',$this->getDepth()+3-1,_('read only')); else printf('',$this->getDepth()+3); - printf(''; - - } else { // end if( $ldapserver->connect(false) ) - # @todo: need this message to display the LDAP server name, so we know which one is the problematic one. - system_message(array( - 'title'=>_('Authenticate to server'), - 'body'=>_('Could not connect to LDAP server'), - 'type'=>'warn')); - - $this->draw_logout_link(); - - # Proceed to the next server in the list. We cannot do anything mroe here. - //return; + printf(''; + + echo '
 
(%s)
 
 
', - $_SESSION[APPCONFIG]->GetValue('appearance','tree_width') ? sprintf('width: %spx; ',$_SESSION[APPCONFIG]->GetValue('appearance','tree_width')) : '', - $_SESSION[APPCONFIG]->GetValue('appearance','tree_height') ? sprintf('height: %spx; ',$_SESSION[APPCONFIG]->GetValue('appearance','tree_height')) : ''); - - foreach ($ldapserver->getBaseDN() as $base_dn) { - # Did we get a base_dn for this server somehow? - if ($base_dn) { - /* Check if the LDAP server is not yet initialized - * (ie, the base DN configured in config.php does not exist) - */ - if (! $ldapserver->dnExists($base_dn)) { - $javascript_id++; - - printf('',IMGDIR,$this->getDepth()+3-3,pretty_print_dn($base_dn)); - - /* Move this form and add it to the end of the html - otherwise the javascript - * doesnt work when isMassDeleteEnabled returning true. - */ -#@todo: move to new format and test. - $this->javascript .= sprintf('',$javascript_id); - $this->javascript .= sprintf('',$ldapserver->server_id); - $this->javascript .= sprintf('',htmlspecialchars(get_container($base_dn))); - $this->javascript .= sprintf('',get_rdn($base_dn)); - $this->javascript .= sprintf(''); - - printf('',$this->getDepth()+3-3,_('This base entry does not exist.'),$javascript_id,_('Create it?')); - - continue; - - } else { - $this->draw_dn($base_dn,-1); - } - - } else { // end if ($base_dn) - # The server refuses to give out the base dn - printf('', - $this->getDepth()+3-2, - _('Could not determine the root of your LDAP tree.'), - _('It appears that the LDAP server has been configured to not reveal its root.'), - _('Please specify it in config.php')); - - # Proceed to the Base DN. We cannot draw anything else for this Base DN. - continue; - } - } - echo '
%s
%s%s
%s
%s
%s
 
', + $_SESSION[APPCONFIG]->getValue('appearance','tree_width') ? sprintf('width: %spx; ',$_SESSION[APPCONFIG]->getValue('appearance','tree_width')) : '', + $_SESSION[APPCONFIG]->getValue('appearance','tree_height') ? sprintf('height: %spx; ',$_SESSION[APPCONFIG]->getValue('appearance','tree_height')) : '', + $server->getIndex()); } - } else { // end if $ldapserver->haveAuthInfo() - /* We don't have enough information to login to this server - * Draw the "login..." link */ - if ($ldapserver->auth_type != 'http') + echo ''; + + if (! count($this->getBaseEntries())) { + # We didnt get any baseDN entries in our tree? + printf('', + $this->getDepth()+3-2, + _('Could not determine the root of your LDAP tree.'), + _('It appears that the LDAP server has been configured to not reveal its root.'), + _('Please specify it in config.php')); + + echo '
%s
%s
%s
'; + + if (! $onlytree) + echo '
'; + return; + } + + /** + * Check if the LDAP server is not yet initialized + * (ie, the base DN configured in config.php does not exist) + */ + foreach ($this->getBaseEntries() as $base) { + if (! $base->isInLDAP()) { + $javascript_id++; + + printf('%s', + IMGDIR,$this->getDepth()+3-3,pretty_print_dn($base->getDN())); + + $this->javascript .= sprintf('
',$javascript_id); + $this->javascript .= sprintf('',$server->getIndex()); + $this->javascript .= sprintf('',htmlspecialchars($server->getContainer($base->getDN()))); + $this->javascript .= sprintf('',get_rdn($base->getDN())); + $this->javascript .= sprintf('
'); + + printf('%s%s', + $this->getDepth()+3-3,_('This base entry does not exist.'),$javascript_id,_('Create it?')); + + echo ''; + + if (! $onlytree) + echo ''; + + echo ''; + return; + + } else { + $this->draw_dn($base->getDN(),-1); + } + } + + echo ''; + + if (! $onlytree) + echo ''; + + # We are not logged in, draw a login... link. + } else { + if ($server->getAuthType() != 'config') $this->draw_login_link(); } - $this->draw_mass_deletion_submit_button(); - # Tree Footer. - # @todo: Need to implement a mechanism to have a footer, but not display it if it is blank. - #printf('%s',$this->getDepth()+3,' '); echo ''; - $this->draw_mass_deletion_end_form(); echo "\n\n"; - $this->draw_javascript(); - } + static $js_drawn = false; - protected function draw_mass_deletion_start_form() { - $ldapserver = $this->getLdapServer(); - - # Does this server want mass deletion available? - if ($ldapserver->isMassDeleteEnabled()) { - echo '
'; - printf('',$ldapserver->server_id); - echo "\n\n"; - } - } - - protected function draw_mass_deletion_submit_button() { - $ldapserver = $this->getLdapServer(); - - if ($ldapserver->isMassDeleteEnabled()) { - printf('', - $this->getDepth()+3,_('Delete Checked Entries')); - } - } - - protected function draw_mass_deletion_end_form() { - $ldapserver = $this->getLdapServer(); - - if ($ldapserver->isMassDeleteEnabled()) { - echo ''; - echo '
'; + if (! $js_drawn) { + $this->draw_javascript(); + $js_drawn = true; } } + /** + * Draw the server name + */ protected function draw_server_name() { - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); echo ''; printf('%s',IMGDIR,_('Server')); printf('',$this->getDepth()+3-1); - printf('%s',htmlspecialchars($ldapserver->name)); + printf('%s',$server->getName()); - if ($ldapserver->haveAuthInfo() && ! in_array($ldapserver->auth_type,array('config','http'))) { + if (! is_null($server->inactivityTime())) { $m = sprintf(_('Inactivity will log you off at %s'), - strftime('%H:%M',time() + ($ldapserver->session_timeout*60))); + strftime('%H:%M',$server->inactivityTime())); printf(' %s',IMGDIR,$m,$m); } echo ''; } + /** + * Draw the tree menu options + */ protected function draw_menu() { $links = ''; - $link = ''; $i = 0; - while (($link = $this->get_menu_item($i)) !== false) { - if ($link) { - //if ($links) $links .= ' | '; - $links .= ''.$link.''; - } - $i++; + foreach (array('schema','search','refresh','server_info','monitor','import','export','logout') as $menu) { + $link = $this->get_menu_item($menu); + if ($link) + $links .= sprintf('%s',$this->get_menu_item($menu)); } # Draw the quick-links below the server name: @@ -187,109 +177,160 @@ class HTMLTree extends Tree { } } + /** + * Get the HTML for each tree menu option + */ protected function get_menu_item($i) { - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); + $menu = array(); switch($i) { - case 0 : - if ($_SESSION[APPCONFIG]->isCommandAvailable('schema')) return $this->get_schema_menu_item(); - else return ''; - case 1 : - if ($_SESSION[APPCONFIG]->isCommandAvailable('search')) return $this->get_search_menu_item(); - else return ''; - case 2 : - if ($_SESSION[APPCONFIG]->isCommandAvailable('server_refresh')) return $this->get_refresh_menu_item(); - else return ''; - case 3 : - if ($_SESSION[APPCONFIG]->isCommandAvailable('server_info')) return $this->get_info_menu_item(); - else return ''; - case 4 : - if (!$ldapserver->isReadOnly() && $_SESSION[APPCONFIG]->isCommandAvailable('import')) return $this->get_import_menu_item(); - else return ''; - case 5 : - if ($_SESSION[APPCONFIG]->isCommandAvailable('export')) return $this->get_export_menu_item(); - else return ''; - case 6 : - if (! in_array($ldapserver->auth_type,array('config','http'))) return $this->get_logout_menu_item(); - else return ''; - default : + case 'schema': + if (! $_SESSION[APPCONFIG]->isCommandAvailable('script','schema')) + return ''; + + $menu['cmd'] = 'schema'; + $menu['ajax'] = _('Loading Schema'); + $menu['div'] = 'BODY'; + $menu['title'] = _('View schema for'); + $menu['img'] = 'schema.png'; + $menu['name'] = _('schema'); + break; + + case 'search': + if (! $_SESSION[APPCONFIG]->isCommandAvailable('script','query_engine')) + return ''; + + $menu['cmd'] = 'query_engine'; + $menu['ajax'] = _('Loading Search'); + $menu['div'] = 'BODY'; + $menu['title'] = _('Search'); + $menu['img'] = 'search.png'; + $menu['name'] = _('search'); + break; + + case 'refresh': + if (! $_SESSION[APPCONFIG]->isCommandAvailable('script','refresh')) + return ''; + + $menu['cmd'] = 'refresh'; + $menu['href'] = '&noheader=1&purge=1'; + $menu['ajax'] = _('Refreshing Tree'); + $menu['div'] = sprintf('SID_%s_nodes',$server->getIndex()); + $menu['title'] = _('Refresh'); + $menu['img'] = 'refresh-big.png'; + $menu['name'] = _('refresh'); + break; + + case 'server_info': + if (! $_SESSION[APPCONFIG]->isCommandAvailable('script','server_info')) + return ''; + + $menu['cmd'] = 'server_info'; + $menu['ajax'] = _('Loading Info'); + $menu['div'] = 'BODY'; + $menu['title'] = _('Info'); + $menu['img'] = 'info.png'; + $menu['name'] = _('info'); + break; + + case 'monitor': + if (! $_SESSION[APPCONFIG]->isCommandAvailable('script','monitor')) + return ''; + + # Fetch basic RootDSE attributes using the + and *. + $query = array(); + $query['base'] = ''; + $query['scope'] = 'base'; + $query['attrs'] = $server->getValue('server','root_dse_attributes'); + $query['baseok'] = true; + $results = $server->query($query,null); + if ($results) + $attrs = array_change_key_case(array_pop($results)); + else + return ''; + + if (! isset($attrs['monitorcontext'])) + return ''; + + $menu['cmd'] = 'monitor'; + $menu['ajax'] = _('Loading Monitor Info'); + $menu['div'] = 'BODY'; + $menu['title'] = _('Monitor'); + $menu['img'] = 'ldap-server.png'; + $menu['name'] = _('monitor'); + break; + + case 'import': + if (! $_SESSION[APPCONFIG]->isCommandAvailable('script','import') || $server->isReadOnly()) + return ''; + + $menu['cmd'] = 'import_form'; + $menu['ajax'] = _('Loading Import'); + $menu['div'] = 'BODY'; + $menu['title'] = _('Import'); + $menu['img'] = 'import.png'; + $menu['name'] = _('import'); + break; + + case 'export': + if (! $_SESSION[APPCONFIG]->isCommandAvailable('script','export')) + return ''; + + $menu['cmd'] = 'export_form'; + $menu['ajax'] = _('Loading Export'); + $menu['div'] = 'BODY'; + $menu['title'] = _('Export'); + $menu['img'] = 'export.png'; + $menu['name'] = _('export'); + break; + + case 'logout': + if (in_array($server->getAuthType(),array('config','http'))) + return ''; + + $href = sprintf('cmd.php?cmd=logout&server_id=%s',$server->getIndex()); + + return sprintf('%s
%s
', + htmlspecialchars($href),_('Logout of this server'),IMGDIR,'logout.png',_('logout'),_('logout')); + + default: return false; } + + $href_parms = htmlspecialchars(sprintf('cmd=%s&server_id=%s%s',$menu['cmd'],$server->getIndex(),isset($menu['href']) ? $menu['href'] : '')); + + if (isAjaxEnabled()) + return sprintf('%s
%s
', + $href_parms,$menu['div'],$href_parms,$menu['ajax'],$menu['title'],$server->getName(),IMGDIR,$menu['img'],$menu['name'],$menu['name']); + else + return sprintf('%s
%s
', + $href_parms,$menu['title'],$server->getName(),IMGDIR,$menu['img'],$menu['name'],$menu['name']); } - protected function get_schema_menu_item() { - $ldapserver = $this->getLdapServer(); - $href = sprintf('cmd.php?cmd=schema&server_id=%s',$ldapserver->server_id); - - return sprintf('%s
%s
', - _('View schema for'),$ldapserver->name,htmlspecialchars($href),IMGDIR,'schema.png',_('schema'),_('schema')); - } - - protected function get_search_menu_item() { - $ldapserver = $this->getLdapServer(); - $href = sprintf('cmd.php?cmd=search&server_id=%s&form=undefined',$ldapserver->server_id); - - return sprintf('%s
%s
', - _('search'),$ldapserver->name,htmlspecialchars($href),IMGDIR,'search.png',_('search'),_('search')); - } - - protected function get_refresh_menu_item() { - $ldapserver = $this->getLdapServer(); - $href = sprintf('cmd.php?cmd=refresh&server_id=%s',$ldapserver->server_id); - - return sprintf('%s
%s
', - _('Refresh all expanded containers for'),$ldapserver->name,htmlspecialchars($href),IMGDIR,'refresh-big.png',_('refresh'),_('refresh')); - } - - protected function get_info_menu_item() { - $ldapserver = $this->getLdapServer(); - $href = sprintf('cmd.php?cmd=server_info&server_id=%s',$ldapserver->server_id); - - return sprintf('%s
%s
', - _('View server-supplied information'),htmlspecialchars($href),IMGDIR,'info.png',_('info'),_('info')); - } - - protected function get_import_menu_item() { - $ldapserver = $this->getLdapServer(); - $href = sprintf('cmd.php?cmd=ldif_import_form&server_id=%s',$ldapserver->server_id); - - return sprintf('%s
%s
', - _('Import entries from an LDIF file'),htmlspecialchars($href),IMGDIR,'import.png',_('import'),_('import')); - } - - protected function get_export_menu_item() { - $ldapserver = $this->getLdapServer(); - $href = sprintf('cmd.php?cmd=export_form&server_id=%s',$ldapserver->server_id); - - return sprintf('%s
%s
', - _('Export entries'),htmlspecialchars($href),IMGDIR,'export.png',_('export'),_('export')); - } - - protected function get_logout_menu_item() { - $ldapserver = $this->getLdapServer(); - $href = sprintf('cmd.php?cmd=logout&server_id=%s',$ldapserver->server_id); - - return sprintf('%s
%s
', - _('Logout of this server'),htmlspecialchars($href),IMGDIR,'logout.png',_('logout'),_('logout')); - } - + /** + * Draw the Logged in User DN + */ protected function draw_logged_in_dn() { - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); - $logged_in_dn = $ldapserver->getLoggedInDN(); - printf('%s%s ',$this->getDepth()+3-1,_('Logged in as'),_(':')); + $logged_in_dn = $server->getLogin(null); + echo ''; + echo ''; + printf('%s: ',$this->getDepth()+3-1,_('Logged in as')); - if ($ldapserver->getDNBase($logged_in_dn) == $logged_in_dn) { + if ($server->getContainerTop($logged_in_dn) == $logged_in_dn) { $logged_in_branch = ''; $logged_in_dn_array = array(); + } else { - $logged_in_branch = preg_replace('/,'.$ldapserver->getDNBase($logged_in_dn).'$/','',$logged_in_dn); + $logged_in_branch = preg_replace('/,'.$server->getContainerTop($logged_in_dn).'$/','',$logged_in_dn); $logged_in_dn_array = pla_explode_dn($logged_in_branch); } - $bases = $ldapserver->getDNBase($logged_in_dn); + $bases = $server->getContainerTop($logged_in_dn); if (is_array($bases) && count($bases)) - $logged_in_dn_array[] = $bases; + array_push($logged_in_dn_array,$bases); $rdn = $logged_in_dn; @@ -297,22 +338,27 @@ class HTMLTree extends Tree { if (! is_array($logged_in_dn_array)) $logged_in_dn_array = array($logged_in_dn); - if (strcasecmp('anonymous',$logged_in_dn)) { - foreach ($logged_in_dn_array as $rdn_piece) { - $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$ldapserver->server_id,rawurlencode($rdn)); - printf('%s',htmlspecialchars($href),pretty_print_dn($rdn_piece)); + if (trim($logged_in_dn)) { + if ($server->dnExists($logged_in_dn)) + foreach ($logged_in_dn_array as $rdn_piece) { + $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$server->getIndex(),rawurlencode($rdn)); + printf('%s',htmlspecialchars($href),pretty_print_dn($rdn_piece)); - if ($rdn_piece != end($logged_in_dn_array)) - echo ','; + if ($rdn_piece != end($logged_in_dn_array)) + echo ','; - $rdn = substr($rdn,(1 + strpos($rdn,','))); - } + $rdn = substr($rdn,(1 + strpos($rdn,','))); + } + + else + echo $logged_in_dn; } else { echo 'Anonymous'; } - echo ''; + echo ''; + echo ''; } /** @@ -320,89 +366,78 @@ class HTMLTree extends Tree { * * @param dn $dn Current dn. * @param int $level Level to start drawing (start to -1) + * @todo This function hasnt been tested with the new rewrite of PLA */ protected function draw_dn($dn,$level) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s)',33,__FILE__,__LINE__,__METHOD__,$dn,$level); - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); - $dnEntry = $this->getEntry($dn); - if (!$dnEntry) { + # Get entry to display as node + $entry = $this->getEntry($dn); + + # If the entry doesnt exist, we'll add it. + if (! $entry) { $this->addEntry($dn); - $dnEntry = $this->getEntry($dn); + $entry = $this->getEntry($dn); } - if (!$dnEntry) + + # If the entry doesnt exist in the server, then return here with an empty string. + if (! $entry) return; - $encoded_dn = rawurlencode($dn); - $href['expand'] = sprintf('cmd.php?cmd=expand&server_id=%s&dn=%s',$ldapserver->server_id,$encoded_dn); - $href['collapse'] = sprintf('cmd.php?cmd=collapse&server_id=%s&dn=%s',$ldapserver->server_id,$encoded_dn); - $href['edit'] = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$ldapserver->server_id,$encoded_dn); - $img_src = sprintf('%s/%s',IMGDIR,$dnEntry->getIcon($ldapserver)); + # Get our children. + $child_count = $this->readChildrenNumber($dn); + $rdn = get_rdn($dn); + $dnENCODE = rawurlencode($dn); + $href['expand'] = htmlspecialchars(sprintf('cmd.php?cmd=expand&server_id=%s&dn=%s',$server->getIndex(),$dnENCODE)); + $href['collapse'] = htmlspecialchars(sprintf('cmd.php?cmd=collapse&server_id=%s&dn=%s',$server->getIndex(),$dnENCODE)); + $href['edit'] = htmlspecialchars(sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$server->getIndex(),$dnENCODE)); echo ''; - $colspan = $this->getDepth()+3+$level+1; - - for ($i=0;$i<=$level;$i++) { - echo ''; - $colspan--; - } - - # Shall we draw the "mass-delete" checkbox? - if ($ldapserver->isMassDeleteEnabled()) { - printf('',htmlspecialchars($dn)); - } else { - echo ''; - } - $colspan--; - - $child_count = $this->get_children_number($dnEntry); + printf('',$level+2); # Is this node expanded? (deciding whether to draw "+" or "-") - if ($dnEntry->isOpened()) { - if (!$child_count && !$ldapserver->isShowCreateEnabled()) { + if ($entry->isOpened()) + if (! $child_count && ! $this->getServer()->isShowCreateEnabled()) printf('-',IMGDIR); - } else { + else printf('-',$href['collapse'],IMGDIR); - } - } else { - if (($child_count !== false) && (!$child_count) && (!$ldapserver->isShowCreateEnabled())) { + else + if (($child_count !== false) && (! $child_count) && (! $this->getServer()->isShowCreateEnabled())) printf('-',IMGDIR); - } else { + else printf('+',$href['expand'],IMGDIR); - } - } - $colspan--; - printf('img',$href['edit'],$ldapserver->server_id,$encoded_dn,$img_src); - $colspan--; + printf('img', + $href['edit'],$server->getIndex(),preg_replace('/=/','_',base64_encode($dn)),IMGDIR,$entry->getIcon()); - printf('',$colspan); - printf('%s',$href['edit'],$this->get_formatted_dn($dnEntry,$level)); + printf('',$this->getDepth()+3-$level); + printf('%s',$href['edit'],$this->get_formatted_dn($entry,$level)); if ($child_count) printf(' (%s)',$child_count); echo ''; - if ($dnEntry->isOpened()) { + if ($entry->isOpened()) { /* Draw the "create new" link at the top of the tree list if there are more than 10 * entries in the listing for this node. */ - if (!$ldapserver->isReadOnly() && ($dnEntry->getChildrenNumber() > 10) - && ($ldapserver->isShowCreateEnabled())) { + if (!$server->isReadOnly() && (count($entry->getChildren()) > 10) + && $this->getServer()->isShowCreateEnabled()) { - $this->draw_create_link($ldapserver->server_id,$rdn,$level,$encoded_dn); + $this->draw_create_link($rdn,$level,$dnENCODE); } - foreach ($dnEntry->getChildren() as $dnChildEntry) + foreach ($entry->getChildren() as $dnChildEntry) $this->draw_dn($dnChildEntry,$level+1); # Always draw the "create new" link at the bottom of the listing - if (!$ldapserver->isReadOnly() && !$dnEntry->isLeaf() && $ldapserver->isShowCreateEnabled()) { - $this->draw_create_link($ldapserver->server_id,$rdn,$level,$encoded_dn); + if (! $server->isReadOnly() && ! $entry->isLeaf() && $this->getServer()->isShowCreateEnabled()) { + $this->draw_create_link($rdn,$level,$dnENCODE); } } @@ -411,91 +446,80 @@ class HTMLTree extends Tree { } protected function get_formatted_dn($entry,$level) { - if ($level < 0) return pretty_print_dn($entry->getDn()); - else return draw_formatted_dn($this->getLdapServer(),$entry); - } - - protected function get_children_number($entry) { - if ($entry->isOpened()) { - $child_count = $entry->getChildrenNumber(true); - - if ($entry->isSizeLimited()) { - $child_count .= '...'; - } - - return $child_count; - - } else { - if ($this->getLdapServer()->isLowBandwidth()) { - return false; - - } else { - $child_count = $entry->getChildrenNumber(); - - if ($entry->isSizeLimited()) { - $child_count .= '+'; - } - - return $child_count; - } - } + if ($level < 0) + return pretty_print_dn($entry->getDN()); + else + return draw_formatted_dn($this->getServer(),$entry); } /** * Print the HTML to show the "create new entry here". * - * @param int $server_id * @param dn $rdn * @param int $level * @param dn $encoded_dn */ - protected function draw_create_link($server_id,$rdn,$level,$encoded_dn) { + protected function draw_create_link($rdn,$level,$encoded_dn) { # print the "Create New object" link. - $href = htmlspecialchars(sprintf('cmd.php?cmd=template_engine&server_id=%s&container=%s',$server_id,$encoded_dn)); + $href = htmlspecialchars(sprintf('cmd.php?cmd=template_engine&server_id=%s&container=%s',$this->getServerID(),$encoded_dn)); echo ''; - for ($i=0;$i<=$level;$i++) - echo ''; - - echo ''; - echo ''; + printf('',$level+3); printf('%s',$href,IMGDIR,_('new')); printf('%s', - $this->getDepth()+3-$level-1-3,$href,_('Create a new entry in'),$rdn,_('Create new entry here')); + $this->getDepth()+3-$level,$href,_('Create a new entry in'),$rdn,_('Create new entry here')); echo ''; } + /** + * Draw login link + * @todo change the determination of $recently_timed_out_servers + */ protected function draw_login_link() { global $recently_timed_out_servers; - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); - $href = htmlspecialchars( - sprintf('cmd.php?cmd=%s&server_id=%s',get_custom_file($ldapserver->server_id,'login_form',''),$ldapserver->server_id)); + $href_parm = htmlspecialchars(sprintf('cmd=%s&server_id=%s',get_custom_file($server->getIndex(),'login_form',''),$server->getIndex())); echo ''; - printf('%s',$href,IMGDIR,_('login')); - printf('%s',$this->getDepth()+3-2,$href,_('Login').'...'); + + if (isAjaxEnabled()) { + printf('%s', + $href_parm,$href_parm,_('Loading Login'),_('Login to'),$server->getName(),IMGDIR,'uid.png',_('login')); + printf('%s', + $this->getDepth()+3-2,$href_parm,$href_parm,_('Loading Login'),_('Login to'),$server->getName(),_('login')); + + } else { + printf('%s',$href_parm,IMGDIR,'uid.png',_('login')); + printf('%s...',$this->getDepth()+3-2,$href_parm,_('Login')); + } + echo ''; printf(' ',$this->getDepth()+3); printf(' ',$this->getDepth()+3); # If the server recently timed out display the message - if (is_array($recently_timed_out_servers) && in_array($ldapserver->server_id,$recently_timed_out_servers)) + if (is_array($recently_timed_out_servers) && in_array($server->getIndex(),$recently_timed_out_servers)) printf('%s', $this->getDepth()+3-1,_('(Session timed out. Automatically logged out.)')); } + /** + * Draw out link + */ protected function draw_logout_link() { - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); - if (! in_array($ldapserver->auth_type,array('config','http'))) { + if (! in_array($server->getAuthType(),array('config','http'))) printf('%s', - $this->getDepth()+3-1,get_custom_file($ldapserver->server_id,'logout',''),$ldapserver->server_id,_('logout')); - } + $this->getDepth()+3-1,get_custom_file($server->getIndex(),'logout',''),$server->getIndex(),_('logout')); } + /** + * If there is javascript, draw it + */ protected function draw_javascript() { if ($this->javascript) { echo "\n"; @@ -508,28 +532,31 @@ class HTMLTree extends Tree { * Work out how deep the "opened" tree is. */ public function getDepth() { - $ldapserver = $this->getLdapServer(); + $server = $this->getServer(); + + # If we are not logged in + if (! $server->isLoggedIn(null)) + return 0; static $depths = array(); - if (! isset($depths[$ldapserver->server_id])) { + if (! isset($depths[$server->getIndex()])) { $max = 0; # BaseDN are open, so we start at 1. foreach ($this->entries as $dn) { - $basedepth = count(pla_explode_dn($ldapserver->getContainerParent($dn->getDn(),'/'))); + $basedepth = count(pla_explode_dn($server->getContainerPath($dn->getDN(),'/'))); $depth = 0; - //if ($dn->isOpened()) - $depth = count(pla_explode_dn($dn->getDn()))+1-$basedepth; + $depth = count(pla_explode_dn($dn->getDN()))+1-$basedepth; if ($depth > $max) $max = $depth; } - $depths[$ldapserver->server_id] = $max; + $depths[$server->getIndex()] = $max; } - return $depths[$ldapserver->server_id]; + return $depths[$server->getIndex()]; } } ?> diff --git a/lib/JpegAttribute.php b/lib/JpegAttribute.php index 238ef64..69c84e6 100644 --- a/lib/JpegAttribute.php +++ b/lib/JpegAttribute.php @@ -1,11 +1,18 @@ rows = 0; - $this->cols = 0; - } + protected $rows = 0; + protected $cols = 0; public function getRows() { return $this->rows; diff --git a/lib/ObjectClassAttribute.php b/lib/ObjectClassAttribute.php index 7af2567..89968e3 100644 --- a/lib/ObjectClassAttribute.php +++ b/lib/ObjectClassAttribute.php @@ -1,13 +1,19 @@ diff --git a/lib/PLMTree.php b/lib/PLMTree.php deleted file mode 100644 index 6261a43..0000000 --- a/lib/PLMTree.php +++ /dev/null @@ -1,169 +0,0 @@ - size_limit. - */ - protected function draw_dn($dn,$level) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',33,__FILE__,__LINE__,__METHOD__,$dn,$level); - - static $tm = null; - - if (! isset($tm)) { - $tm = new TreeMenu(); - $tm->setDirroot(JSDIR.'phplayersmenu/'); - $tm->setIcondir(IMGDIR); - $tm->setIconwww(IMGDIR); - $tm->setImgwww(JSDIR.'phplayersmenu/menuimages/'); - } - - $tree_plm = $this->to_plm($dn,$level); - - $tm->setMenuStructureString($tree_plm); - $tm->parseStructureForMenu('pla_tree_'.$this->server_id); - $tm->setTreeMenuTheme(''); - $tm->newTreeMenu('pla_tree_'.$this->server_id); - - echo sprintf('%s',$this->getDepth()+3-1,$tm->getTreeMenu('pla_tree_'.$this->server_id)); - } - - protected function to_plm($dn,$level) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',33,__FILE__,__LINE__,__METHOD__,$dn,$level); - - $ldapserver = $this->getLdapServer(); - - $dnEntry = $this->getEntry($dn); - if (!$dnEntry) { - $this->addEntry($dn); - $dnEntry = $this->getEntry($dn); - } - if (!$dnEntry) { - if (DEBUG_ENABLED) - debug_log('Returning (%s)',33,__FILE__,__LINE__,__METHOD__,''); - return ''; - } - - $encoded_dn = rawurlencode($dn); - $edit_href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$this->server_id,$encoded_dn); - $rdn = get_rdn($dn); - - $dots = ''; - for ($i=0;$i<=$level+1;$i++) $dots .= '.'; - - # Have we tranversed this part of the tree yet? - if ($dnEntry->isOpened()) { - $child_count = $this->get_children_number($dnEntry); - $tree_plm = sprintf("%s|%s|%s|%s|%s|%s|%s\n", - $dots, - ($this->get_formatted_dn($dnEntry, $level)).($child_count ? ' ('.$child_count.')' : ''), - $edit_href, $this->get_formatted_title($dnEntry, $level), $dnEntry->getIcon($ldapserver), '', - ($dnEntry->isOpened() ? 1 : 0)); - - $tree_plm .= $this->get_plm_before_first_child($dnEntry, $level); - - foreach ($dnEntry->getChildren() as $dn) { - $tree_plm .= $this->to_plm($dn,$level+1); - } - - $tree_plm .= $this->get_plm_after_last_child($dnEntry, $level); - } else { - $child_count = $this->get_children_number($dnEntry); - - if ($child_count) { - $tree_plm = sprintf("%s|%s|%s|%s|%s|%s|%s|%s\n", - $dots, - ($this->get_formatted_dn($dnEntry, $level)).($child_count ? ' ('.$child_count.')' : ''), - $edit_href, $this->get_formatted_title($dnEntry, $level), $dnEntry->getIcon($ldapserver), '', - ($dnEntry->isOpened() ? 1 : 0), - $child_count); - } else { - $tree_plm = sprintf("%s|%s|%s|%s|%s|%s|%s|%s\n", - $dots, - ($this->get_formatted_dn($dnEntry, $level)), - $edit_href, $this->get_formatted_title($dnEntry, $level), $dnEntry->getIcon($ldapserver), '', - ($dnEntry->isOpened() ? 1 : 0), - $child_count === false ? 1 : 0); - } - } - - if (DEBUG_ENABLED) - debug_log('Returning (%s)',33,__FILE__,__LINE__,__METHOD__,$tree_plm); - - return $tree_plm; - } - - protected function get_formatted_title($entry, $level) { - return $entry->getDn(); - } - - protected function get_plm_before_first_child($entry, $level) { - $ldapserver = $this->getLdapServer(); - - $plm = ''; - - if (!$ldapserver->isReadOnly() && ($entry->getChildrenNumber() > 10) && ($ldapserver->isShowCreateEnabled())) { - $encoded_dn = rawurlencode($entry->getDn()); - $create_href = sprintf('cmd.php?cmd=template_engine&server_id=%s&container=%s', $ldapserver->server_id, $encoded_dn); - - $dots = '.'; - for ($i=0;$i<=$level+1;$i++) $dots .= '.'; - - $plm = sprintf("%s|%s|%s|%s|%s|%s|%s\n", - $dots, _('Create new entry here'), - $create_href, $entry->getDn(), 'star.png', '', 0); - } - - return $plm; - } - - protected function get_plm_after_last_child($entry, $level) { - $ldapserver = $this->getLdapServer(); - - $plm = ''; - - if (!$ldapserver->isReadOnly() && !$entry->isLeaf() && $ldapserver->isShowCreateEnabled()) { - $encoded_dn = rawurlencode($entry->getDn()); - $create_href = sprintf('cmd.php?cmd=template_engine&server_id=%s&container=%s', $ldapserver->server_id, $encoded_dn); - - $dots = '.'; - for ($i=0;$i<=$level+1;$i++) $dots .= '.'; - - $plm = sprintf("%s|%s|%s|%s|%s|%s|%s\n", - $dots, _('Create new entry here'), - $create_href, $entry->getDn(), 'star.png', '', 0); - } - - return $plm; - } -} -?> diff --git a/lib/PageRender.php b/lib/PageRender.php new file mode 100644 index 0000000..ee1e6f3 --- /dev/null +++ b/lib/PageRender.php @@ -0,0 +1,1154 @@ +server_id = $server_id; + $this->template_id = $template_id; + } + + /** + * Dummy method... + */ + protected function visitAttribute() {} + + /** + * Get our templates applicable for this object + */ + protected function getTemplates() { + return new Templates($this->server_id); + } + + public function getTemplate() { + return $this->template; + } + + public function getTemplateID() { + return $this->template->getID(); + } + + /** + * Initialise the PageRender + */ + public function accept() { + if (DEBUGTMP) printf('%s:%s
',time(),__METHOD__); + + if ($this->template_id) { + $templates = $this->getTemplates(); + $this->template = $templates->getTemplate($this->template_id); + + if ($this->dn) + $this->template->setDN($this->dn); + elseif ($this->container) + $this->template->setContainer($this->container); + + $this->template->accept(); + + # Process our actions + if (get_request('post_value','REQUEST')) + foreach (get_request('post_value','REQUEST') as $attr => $values) { + $attribute = $this->template->getAttribute($attr); + + if (! $attribute) + debug_dump_backtrace(sprintf('There was a post_value for an attribute [%s], but it doesnt exist?',$attr),1); + + foreach ($values as $index) + if ($attribute->getPostValue()) + $this->get('Post',$attribute,$index); + else + $this->get('AutoPost',$attribute,$index); + } + + foreach ($this->template->getAttributes(true) as $attribute) { + if (DEBUGTMP||DEBUGTMPSUB) printf('* %s [Accept:%s]
',__METHOD__,get_class($attribute)); + + $this->visit('',$attribute); + } + } + } + + public function drawTitle($title='Title') { + printf('

%s

',$title); + } + + public function drawSubTitle($subtitle=null) { + if (is_null($subtitle)) + $subtitle = sprintf('%s: %s   %s: %s', + _('Server'),$this->getServer()->getName(),_('Distinguished Name'),$this->dn); + + printf('

%s

',$subtitle); + } + + public function setDN($dn) { + if ($this->container) + system_message(array( + 'title'=>__METHOD__, + 'body'=>'CONTAINER set while setting DN', + 'type'=>'info')); + + $this->dn = $dn; + } + + public function setContainer($dn) { + if ($this->dn) + system_message(array( + 'title'=>__METHOD__, + 'body'=>'DN set while setting CONTAINER', + 'type'=>'info')); + + $this->container = $dn; + } + + /** + * May be overloaded in other classes + */ + protected function getMode() {} + + /** + * Process our arguments from the templates + */ + protected function getPostAttribute($attribute,$i) { + $autovalue = $attribute->getPostValue(); + $args = explode(';',$autovalue['args']); + $server = $this->getServer(); + $vals = $attribute->getValues(); + + switch ($autovalue['function']) { + /** + * Join will concatenate values with a string, similiar to explode() + * eg: =php.Join(-;%sambaSID%,%sidsuffix%) + * + * * arg 0 + * - character to use when joining the attributes + * + * * arg 1 + * - values to concatenate together. we'll explode %attr% values. + */ + case 'Join': + preg_match_all('/%(\w+)(\|.+)?(\/[lU])?%/U',$args[1],$matchall); + $matchattrs = $matchall[1]; + $char = $args[0]; + + $values = array(); + $blank = 0; + foreach ($matchattrs as $joinattr) { + $attribute2 = $this->template->getAttribute($joinattr); + + if (! $attribute2) { + if (($pv = get_request(strtolower($joinattr),'REQUEST')) && isset($pv[$attribute->getName()][$i])) { + array_push($values,$pv[$attribute->getName()][$i]); + + if (! $pv[$attribute->getName()][$i]) + $blank++; + + } else { + array_push($values,''); + $blank++; + } + + } elseif (count($attribute2->getValues()) !=1) { + array_push($values,''); + $blank++; + + system_message(array( + 'title'=>_('Invalid value count for [post] processing'), + 'body'=>sprintf('%s (%s [%s])',_('Function() variable expansion can only handle 1 value'), + $attribute->getName(false),count($attribute->getValues())), + 'type'=>'warn')); + + } else + array_push($values,$attribute2->getValue(0)); + } + + # If all our value expansion results in blanks, we'll return no value + if (count($matchattrs) == $blank) + if (count($vals) > 1) + $vals[$i] = null; + else + $vals = null; + + else + $vals[$i] = implode($char,$values); + + break; + + /** + * PasswordEncrypt will encrypt a password + * eg: =php.PasswordEncrypt(%enc%;%userPassword%) + * + * This function will encrypt the users password "userPassword" using the "enc" method. + */ + case 'PasswordEncrypt': + if (count($args) != 2) { + system_message(array( + 'title'=>_('Invalid argument count for PasswordEncrypt'), + 'body'=>sprintf('%s (%s)',_('PasswordEncrypt() only accepts two arguments'),$autovalue['args']), + 'type'=>'warn')); + + return; + } + + # Get the attribute. + if (preg_match_all('/%(\w+)(\|.+)?(\/[lU])?%/U',strtolower($args[1]),$matchall)) { + if (count($matchall[1]) != 1) + system_message(array( + 'title'=>_('Invalid value count for PasswordEncrypt'), + 'body'=>sprintf('%s (%s)',_('Unable to get the attribute value for PasswordEncrypt()'),count($matchall[1])), + 'type'=>'warn')); + + $passwordattr = $matchall[1][0]; + $passwordvalue = $_REQUEST['new_values'][$passwordattr][$i]; + + } else + $passwordvalue = $args[1]; + + if (! trim($passwordvalue) || in_array($passwordvalue,$attribute->getOldValues())) + return; + + # Get the encoding + if ($passwordattr && preg_match_all('/%(\w+)(\|.+)?(\/[lU])?%/U',strtolower($args[0]),$matchall)) { + if (count($matchall[1]) != 1) + system_message(array( + 'title'=>_('Invalid value count for PasswordEncrypt'), + 'body'=>sprintf('%s (%s)',_('Unable to get the attribute value for PasswordEncrypt()'),count($matchall[1])), + 'type'=>'warn')); + + $enc = $_REQUEST[$matchall[1][0]][$passwordattr][$i]; + + } else + $enc = strtolower($args[0]); + + switch ($enc) { + case 'lm': + $sambapassword = new smbHash; + $vals[$i] = $sambapassword->lmhash($passwordvalue); + + break; + + case 'nt': + $sambapassword = new smbHash; + $vals[$i] = $sambapassword->nthash($passwordvalue); break; + + break; + + default: + $vals[$i] = password_hash($passwordvalue,$enc); + } + + $vals = array_unique($vals); + + break; + + default: + $vals = $this->get('AutoPost',$attribute,$i); + } + + if (! $vals) + return; + + $attribute->clearValue(); + + if (! is_array($vals)) + $attribute->setValue(array($vals)); + else + $attribute->setValue($vals); + } + + /** + * This function is invoked if we dont know which template we should be using. + * + * @return string Template ID to be used or null if the user was presented with a list. + */ + protected function getTemplateChoice() { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$this->template ? $this->template->getDN() : ''); + + # First work out our template + $templates = $this->getTemplates(); + $template = $templates->getTemplate($this->template_id); + + # If the template we asked for is available + if ($this->template_id === $template->getID()) { + if (DEBUGTMP) printf('%s:%s
',__METHOD__,'Choosing the SELECTED template'); + + return $this->template_id; + + # If there are no defined templates + } elseif (count($templates->getTemplates($this->getMode())) <= 0) { + if (DEBUGTMP) printf('%s:%s
',__METHOD__,'Choosing the DEFAULT template, no other template applicable'); + + # Since getTemplate() returns a default template if the one we want doesnt exist, we can return $templates->getID(), it should be the default. + return $template->getID(); + + # If there is only 1 defined template, and no default available, then that is our template. + } elseif ((count($templates->getTemplates($this->getMode())) == 1) && ! $this->haveDefaultTemplate()) { + if (DEBUGTMP) printf('%s:%s
',__METHOD__,'AUTOMATIC choosing a template, only 1 template applicable'); + + $template = $templates->getTemplates($this->getMode()); + $template = array_shift($template); + return $template->getID(); + + } else { + if (DEBUGTMP) printf('%s:%s
',__METHOD__,'SELECT a template to use.'); + + # Propose the template choice + $this->drawTemplateChoice(); + } + + # If we got here, then there wasnt a template. + return null; + } + + /** DRAW ATTRIBUTE NAME **/ + + final protected function drawNameAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd.php?cmd=schema&server_id=%s&view=attributes&viewvalue=%s', + $this->getServerID(),$attribute->getName()); + + if (! $_SESSION[APPCONFIG]->getValue('appearance','show_schema_link')) + printf('%s',_($attribute->getFriendlyName())); + + elseif ($attribute->getLDAPtype()) + printf('%s', + htmlspecialchars($href), + _('Click to view the schema definition for attribute type'),$attribute->getName(false),_($attribute->getFriendlyName())); + else + printf('%s',_('This attribute is not defined in the LDAP schema'),_($attribute->getFriendlyName())); + + if (DEBUGTMPSUB) printf(' [%s]',get_class($attribute)); + } + + /** ATTRIBUTE NOTES */ + + protected function drawNotesAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $attr_note = ''; + + foreach (array('NoteAlias','NoteRequired','NoteRDN','NoteHint','NoteRO') as $note) { + $alias_note = $this->get($note,$attribute); + + if ($alias_note) { + if (trim($attr_note)) + $attr_note .= ', '; + + $attr_note .= $alias_note; + } + } + + if ($attr_note) + printf('%s',$attr_note); + } + + protected function getNoteAliasAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + # Is there a user-friendly translation available for this attribute? + $friendly_name = $attribute->getFriendlyName(); + + if (strtolower($friendly_name) != $attribute->getName()) + return sprintf('%s', + _('Note'),$friendly_name,_('is an alias for'),$attribute->getName(false),_('alias')); + else + return ''; + } + + #@todo this function shouldnt re-calculate requiredness, it should be known in the template already - need to set the ldaptype when initiating the attribute. + protected function getNoteRequiredAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $required_by = ''; + $sattr_required = ''; + + # Is this attribute required by an objectClass ? + $sattr = $this->getServer()->getSchemaAttribute($attribute->getName()); + if ($sattr) + $sattr_required = $sattr->getRequiredByObjectClasses(); + + if ($sattr_required) { + $oc = $this->template->getAttribute('objectclass'); + + if ($oc) + foreach ($oc->getValues() as $objectclass) { + # If this objectclass is in our required list + if (in_array_ignore_case($objectclass,$sattr_required)) { + $required_by .= sprintf('%s ',$objectclass); + continue; + } + + # If not, see if it is in our parent. + $sattr = $this->getServer()->getSchemaObjectClass($objectclass); + + if (array_intersect($sattr->getParents(),$sattr_required)) + $required_by .= sprintf('%s ',$objectclass); + } + + else + debug_dump_backtrace('How can there be no objectclasses?',1); + } + + if ($required_by) + return sprintf('%s',_('Required attribute for objectClass(es)'),$required_by,_('required')); + else + return ''; + } + + protected function getNoteRDNAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + # Is this attribute required because its the RDN + if ($attribute->isRDN()) + return sprintf('rdn',_('This attribute is required for the RDN.')); + else + return ''; + } + + protected function getNoteHintAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + # Is there a hint for this attribute + if ($attribute->getHint()) + return sprintf('%s',$attribute->getHint(),_('hint')); + else + return ''; + } + + protected function getNoteROAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + # Is this attribute is readonly + if ($attribute->isReadOnly()) + return sprintf('ro',_('This attribute has been marked as Read Only.')); + else + return ''; + } + /** DRAW HIDDEN VALUES **/ + + /** + * Draw all hidden attributes + */ + final public function drawHiddenAttributes() { + foreach ($this->template->getAttributes(true) as $attribute) + if ($attribute->hasbeenModified()) + if ($attribute->getValues()) + foreach ($attribute->getValues() as $index => $details) + $this->draw('HiddenValue',$attribute,$index); + + # We are deleting this attribute, so we need to display an empty value + else + $this->draw('HiddenValue',$attribute,0); + } + + /** + * Draw specific hidden attribute + */ + final protected function drawHiddenValueAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $val = $attribute->getValue($i); + + printf('', + htmlspecialchars($attribute->getName()),$i,htmlspecialchars($attribute->getName()),$i, + htmlspecialchars($val)); + } + + /** DRAW DISPLAYED OLD VALUES **/ + protected function drawOldValuesAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + foreach ($attribute->getValues() as $index => $details) + $this->draw('OldValue',$attribute,$index); + } + + final protected function drawOldValueAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + echo $attribute->getOldValue($i); + } + + /** DRAW DISPLAYED CURRENT VALUES **/ + + protected function drawCurrentValuesAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + for ($i=0;$i<$attribute->getValueCount();$i++) { + if ($i > 0) + echo '
'; + + $this->draw('CurrentValue',$attribute,$i); + } + } + + /** + * Draw the current specific value of an attribute + */ + final protected function drawCurrentValueAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUGTMPSUB) printf(' [%s]',__METHOD__); + + echo $attribute->getValue($i); + } + + /** + * Draw a input value for an attribute - used in a form. + */ + protected function drawFormValueAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUGTMPSUB) printf(' [%s]',__METHOD__); + + if ($this->getServer()->isReadOnly() || $attribute->isReadOnly() + || ($attribute->isRDN() && $this->template->getType() != 'creation' && $i < count($attribute->getValues()))) + + $this->draw('FormReadOnlyValue',$attribute,$i); + else + $this->draw('FormReadWriteValue',$attribute,$i); + + # Show the ADDVALUE DIV if the attribute can have more values, and we have rendered the last value + if ($attribute->haveMoreValues() && $attribute->getValueCount() == $i+1) + printf('
',$attribute->getName()); + + if ($attribute->getPostValue()) + printf('',$attribute->getName(),$i); + } + + protected function drawFormReadOnlyValueAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $val = $attribute->getValue($i); + + printf('', + htmlspecialchars($attribute->getName()),$i,htmlspecialchars($attribute->getName()),$i,htmlspecialchars($val)); + } + + protected function drawFormReadWriteValueAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $val = $attribute->getValue($i); + + if ($attribute->getHelper() || $attribute->getVerify()) + echo ''; + + } elseif ($attribute->getVerify()) + echo ''; + + if ($attribute->getVerify()) { + printf(''; + } + + if ($attribute->getHelper() || $attribute->getVerify()) + echo '
'; + + printf('', + htmlspecialchars($attribute->getName()),$i, + htmlspecialchars($attribute->getName()),$i, + htmlspecialchars($val), + $attribute->needJS('focus') ? sprintf('onFocus="focus_%s(this);" ',$attribute->getName()) : '', + $attribute->needJS('blur') ? sprintf('onBlur="blur_%s(this);" ',$attribute->getName()) : '', + ($attribute->getSize() > 0) ? sprintf('size="%s"',$attribute->getSize()) : '', + ($attribute->getMaxLength() > 0) ? sprintf('maxlength="%s"',$attribute->getMaxLength()) : ''); + + if ($attribute->getHelper()) { + echo ''; + $this->draw('AttributeHelper',$attribute,$i); + echo '
', + htmlspecialchars($attribute->getName()),$i, + htmlspecialchars($attribute->getName()),$i, + ($attribute->getSize() > 0) ? sprintf('size="%s"',$attribute->getSize()) : '', + ($attribute->getMaxLength() > 0) ? sprintf('maxlength="%s"',$attribute->getMaxLength()) : ''); + + echo ''; + printf('(%s)',_('confirm')); + echo '
'; + } + + /** + * Draw specific hidden binary attribute + */ + final protected function drawHiddenValueBinaryAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $val = $attribute->getValue($i); + + printf('', + htmlspecialchars($attribute->getName()),$i,base64_encode($val)); + } + + final protected function drawOldValueBinaryAttribute($attribute,$i) { + # If we dont have a value, we'll just return; + if (! $attribute->getOldValue($i)) + return; + + printf('[%s]',_('Binary Value')); + } + + final protected function drawCurrentValueBinaryAttribute($attribute,$i) { + printf('[%s]',_('Binary Value')); + } + + protected function drawFormReadWriteValueBinaryAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if ($attribute->getValue($i)) { + $this->draw('CurrentValue',$attribute,$i); + echo '

'; + + $href = sprintf('download_binary_attr.php?server_id=%s&dn=%s&attr=%s&index=%s', + $this->getServerID(),rawurlencode($this->template->getDN()),$attribute->getName(),$i); + + printf('Save %s', + htmlspecialchars($href),IMGDIR,_('download value')); + + echo '
'; + + if (! $attribute->isReadOnly() && $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete')) + printf('Trash %s', + $attribute->getName(),$attribute->getFriendlyName(),$i,IMGDIR,_('delete attribute')); + + } else { + printf('
', + htmlspecialchars($attribute->getName()),$i, + htmlspecialchars($attribute->getName()),$i, + $attribute->needJS('focus') ? sprintf('onFocus="focus_%s(this);" ',$attribute->getName()) : '', + $attribute->needJS('blur') ? sprintf('onBlur="blur_%s(this);" ',$attribute->getName()) : '', + ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', + ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); + } + } + + protected function drawFormReadWriteValueDateAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $val = $attribute->getValue($i); + + echo ''; + printf(' ', + $attribute->getName(),$i, + htmlspecialchars($attribute->getName()),$i,htmlspecialchars($val), + $attribute->needJS('focus') ? sprintf('onFocus="focus_%s(this);" ',$attribute->getName()) : '', + $attribute->needJS('blur') ? sprintf('onBlur="blur_%s(this);" ',$attribute->getName()) : '', + ($attribute->getSize() > 0) ? sprintf('size="%s"',$attribute->getSize()) : '', + ($attribute->getMaxLength() > 0) ? sprintf('maxlength="%s"',$attribute->getMaxLength()) : ''); + + $this->draw('SelectorPopup',$attribute,$i); + echo ''."\n"; + } + + protected function drawFormReadWriteValueDnAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $val = $attribute->getValue($i); + + if ($attribute->getHelper()) + echo '
'; + + $input_name = sprintf('new_values[%s][%s]',htmlspecialchars($attribute->getName()),$i); + $id = sprintf('new_values_%s_%s',htmlspecialchars($attribute->getName()),$i); + + printf(' ', + $input_name,$id,htmlspecialchars($val), + $attribute->needJS('focus') ? sprintf('onFocus="focus_%s(this);" ',$attribute->getName()) : '', + $attribute->needJS('blur') ? sprintf('onBlur="blur_%s(this);" ',$attribute->getName()) : '', + ($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : '', + ($attribute->getMaxLength() > 0) ? 'maxlength="'.$attribute->getMaxLength().'"' : ''); + + # Draw a link for popping up the entry browser if this is the type of attribute that houses DNs. + draw_chooser_link(sprintf('entry_form.%s',$id),false); + echo ''; + + if ($attribute->getHelper()) { + echo ''; + $this->draw('Helper',$attribute,$i); + echo '
'; + } + + echo "\n"; + } + + protected function drawFormReadWriteValueGidAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $this->drawFormReadWriteValueAttribute($attribute,$i); + + $server = $this->getServer(); + $val = $attribute->getValue($i); + + # If this is a gidNumber on a non-PosixGroup entry, lookup its name and description for convenience + if ($this->template->getDN() && ! in_array_ignore_case('posixGroup',$this->getServer()->getDNAttrValue($this->template->getDN(),'objectclass'))) { + $query['filter'] = sprintf('(&(objectClass=posixGroup)(gidNumber=%s))',$val); + $query['attrs'] = array('dn','description'); + + # Reorganise our base, so that our base is first + $bases = array_unique(array_merge(array($server->getContainerTop($this->template->getDN())),$server->getBaseDN())); + + # Search our bases, until we find a match. + foreach ($bases as $base) { + $query['base'] = $base; + $group = $this->getServer()->query($query,null); + + if (count($group) > 0) { + echo '
'; + + $group = array_pop($group); + $group_dn = $group['dn']; + $group_name = explode('=',get_rdn($group_dn)); + $group_name = $group_name[1]; + $href = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s', + $this->getServerID(),rawurlencode($group_dn)); + + echo ''; + printf('%s',htmlspecialchars($href),$group_name); + + $description = isset($group['description']) ? $group['description'] : null; + + if (is_array($description)) + foreach ($description as $item) + printf(' (%s)',$item); + else + printf(' (%s)',$description); + + echo ''; + + break; + } + } + } + } + + /** + * Draw a Jpeg Attribute + */ + final protected function drawOldValueJpegAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUGTMPSUB) printf(' [%s]',__METHOD__); + + # If we dont have a value, we'll just return; + if (! $attribute->getOldValue($i)) + return; + + draw_jpeg_photo($this->getServer(),$this->template->getDN(),$attribute->getName(),$i,false,false); + } + + /** + * Draw a Jpeg Attribute + */ + final protected function drawCurrentValueJpegAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUGTMPSUB) printf(' [%s]',__METHOD__); + + # If we dont have a value, we'll just return; + if (! $attribute->getValue($i)) + return; + + # If the attribute is modified, the new value needs to be stored in a session variable for the draw_jpeg_photo callback. + if ($attribute->hasBeenModified()) { + $_SESSION['tmp'][$attribute->getName()][$i] = $attribute->getValue($i); + draw_jpeg_photo(null,$this->template->getDN(),$attribute->getName(),$i,false,false); + } else + draw_jpeg_photo($this->getServer(),$this->template->getDN(),$attribute->getName(),$i,false,false); + } + + protected function drawFormReadOnlyValueJpegAttribute($attribute,$i) { + draw_jpeg_photo($this->getServer(),$this->template->getDN(),$attribute->getName(),$i,false,false); + } + + protected function drawFormReadOnlyValueMultiLineAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $val = $attribute->getValue($i); + + printf('', + ($attribute->getRows() > 0) ? 'rows="'.$attribute->getRows().'"' : '', + ($attribute->getCols() > 0) ? 'cols="'.$attribute->getCols().'"' : '', + htmlspecialchars($attribute->getName()),$i, + htmlspecialchars($attribute->getName()),$i, + $val); + } + + protected function drawFormReadWriteValueMultiLineAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $val = $attribute->getValue($i); + + printf('', + ($attribute->getRows() > 0) ? 'rows="'.$attribute->getRows().'"' : '', + ($attribute->getCols() > 0) ? 'cols="'.$attribute->getCols().'"' : '', + htmlspecialchars($attribute->getName()),$i, + htmlspecialchars($attribute->getName()),$i, + $attribute->needJS('focus') ? sprintf('onFocus="focus_%s(this);" ',$attribute->getName()) : '', + $attribute->needJS('blur') ? sprintf('onBlur="blur_%s(this);" ',$attribute->getName()) : '', + $val); + } + + protected function drawFormValueObjectClassAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $val = $attribute->getValue($i); + + /* It seems that openLDAP allows us to remove additional structural objectclasses + however other LDAP servers, dont remove them (even if we ask them to). */ + # Do we have our internal attributes. + $internal = $this->template->getAttribute('structuralobjectclass'); + + if ($internal) { + $structural = in_array_ignore_case($val,$internal->getValues()); + + # We'll work it out the traditional way. + } else { + # If this schema structural? + $schema_object = ($val) ? $this->getServer()->getSchemaObjectClass($val) : false; + $structural = (is_object($schema_object) && $schema_object->getType() == 'structural'); + } + + if ($structural) { + $this->draw('FormReadOnlyValue',$attribute,$i); + + printf(' (%s)', + _('This is a structural ObjectClass and cannot be removed.'), + _('structural')); + + } else + $this->draw('FormReadWriteValue',$attribute,$i); + } + + protected function getAutoPostPasswordAttribute($attribute,$i) { + $attribute->setPostValue(array('function'=>'PasswordEncrypt','args'=>sprintf('%%enc%%;%%%s%%',$attribute->getName()))); + $this->get('Post',$attribute,$i); + } + + protected function drawOldValuePasswordAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUGTMPSUB) printf(' [%s]',__METHOD__); + + $val = $attribute->getOldValue($i); + + if (obfuscate_password_display(get_enc_type($val))) + echo str_repeat('*',16); + else + echo nl2br(htmlspecialchars($attribute->getOldValue($i))); + } + + final protected function drawCurrentValuePasswordAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUGTMPSUB) printf(' [%s]',__METHOD__); + + $val = $attribute->getValue($i); + + if (obfuscate_password_display(get_enc_type($val))) + echo str_repeat('*',16); + else + echo nl2br(htmlspecialchars($attribute->getValue($i))); + } + + protected function drawFormReadOnlyValuePasswordAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $server = $this->getServer(); + $val = $attribute->getValue($i); + + if (trim($val)) + $enc_type = get_enc_type($val); + else + $enc_type = $server->getValue('appearance','password_hash'); + + $obfuscate_password = obfuscate_password_display($enc_type); + + printf('
', + ($obfuscate_password ? 'password' : 'text'), + htmlspecialchars($attribute->getName()),$i,htmlspecialchars($attribute->getName()), + $i,htmlspecialchars($val),($attribute->getSize() > 0) ? 'size="'.$attribute->getSize().'"' : ''); + + if (trim($val)) + $this->draw('CheckLink',$attribute,'new_values_'.htmlspecialchars($attribute->getName()).'_'.$i); + } + + protected function drawFormReadWriteValuePasswordAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $server = $this->getServer(); + $val = $attribute->getValue($i); + + $enc_type = get_enc_type($val); + + # Set the default hashing type if the password is blank (must be newly created) + if (trim($val)) + $enc_type = get_enc_type($val); + else + $enc_type = $server->getValue('appearance','password_hash'); + + echo '
'; + + $obfuscate_password = obfuscate_password_display($enc_type); + $id = sprintf('new_values_%s_%s',htmlspecialchars($attribute->getName()),$i); + + printf('', + ($obfuscate_password ? 'password' : 'text'), + htmlspecialchars($attribute->getName()),$i,$id, + htmlspecialchars($val), + $attribute->needJS('focus') ? sprintf('onFocus="focus_%s(this);" ',$attribute->getName()) : '', + $attribute->needJS('blur') ? sprintf('onBlur="blur_%s(this);" ',$attribute->getName()) : '', + ($attribute->getSize() > 0) ? sprintf('size="%s"',$attribute->getSize()) : '', + ($attribute->getMaxLength() > 0) ? sprintf('maxlength="%s"',$attribute->getMaxLength()) : ''); + + echo ''; + + if ($attribute->getHelper()) + $this->draw('Helper',$attribute,$i); + else + $this->draw('DefaultHelper',$attribute,$i); + + echo '
'; + + if ($attribute->getVerify() && $obfuscate_password) { + printf('', + htmlspecialchars($attribute->getName()),$i, + htmlspecialchars($attribute->getName()),$i, + ($attribute->getSize() > 0) ? sprintf('size="%s"',$attribute->getSize()) : '', + ($attribute->getMaxLength() > 0) ? sprintf('maxlength="%s"',$attribute->getMaxLength()) : ''); + + echo ''; + printf('(%s)',_('confirm')); + echo '
'; + } + + $this->draw('CheckLink',$attribute,$id); + echo '
'; + } + + protected function drawFormReadWriteValueSelectionAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if ($attribute->isMultiple()) { + # For multiple selection, we draw the component only one time + if ($i > 0) + return; + + $selected = array(); + $vals = $attribute->getValues(); + $j = 0; + + if (($attribute->getSize() > 0) && ($attribute->getSize() < $attribute->getOptionCount())) { + + printf(''; + + } else { + echo ''; + + foreach ($attribute->getSelection() as $value => $description) { + if (in_array($value,$vals)) + $selected[$value] = true; + + printf('', + htmlspecialchars($attribute->getName()),$j++, + htmlspecialchars($attribute->getName()),$value, + $attribute->needJS('focus') ? sprintf('onFocus="focus_%s(this);" ',$attribute->getName()) : '', + $attribute->needJS('blur') ? sprintf('onBlur="blur_%s(this);" ',$attribute->getName()) : '', + isset($selected[$value]) ? 'checked' : '', + $description); + } + + foreach ($vals as $val) + if (! isset($selected[$val])) + printf('', + htmlspecialchars($attribute->getName()),$j++, + htmlspecialchars($attribute->getName()),$val, + $attribute->needJS('focus') ? sprintf('onFocus="focus_%s(this);" ',$attribute->getName()) : '', + $attribute->needJS('blur') ? sprintf('onBlur="blur_%s(this);" ',$attribute->getName()) : '', + $val); + + echo '
 %s
 %s
'; + } + + # This is a single value attribute + } else { + $val = $attribute->getValue($i) ? $attribute->getValue($i) : $attribute->getDefault(); + + if ($attribute->getHelper()) + echo '
'; + + $found = false; + $empty_value = false; + + # If we are a required attribute, and the selection is blank, then the user cannot submit this form. + if ($attribute->isRequired() && ! count($attribute->getSelection())) + system_message(array( + 'title'=>_('Template Value Error'), + 'body'=>sprintf('This template uses a selection list for attribute [%s], however the selection list is empty.
You may need to create some dependancy entries in your LDAP server so that this attribute renders with values. Alternatively, you may be able to define the appropriate selection values in the template file.',$attribute->getName(false)), + 'type'=>'warn')); + + printf(''; + + if ($attribute->getHelper()) { + echo '
'; + $this->draw('Helper',$attribute,$i); + echo '
'; + } + } + } + + /** + * Takes a shadow* attribute and returns the date as an integer. + * + * @param array Attribute objects + * @param string A shadow attribute name + */ + private function shadow_date($attribute) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__, + $attr); + + $shadowattr = array(); + $shadowattr['lastchange'] = $this->template->getAttribute('shadowlastchange'); + $shadowattr['max'] = $this->template->getAttribute('shadowmax'); + + $shadow = array(); + $shadow['lastchange'] = $shadowattr['lastchange'] ? $shadowattr['lastchange']->getValue(0) : null; + $shadow['max'] = $shadowattr['max'] ? $shadowattr['max']->getValue(0) : null; + + if (($attribute->getName() == 'shadowlastchange') && $shadow['lastchange']) + $shadow_date = $shadow['lastchange']; + + elseif (($attribute->getName() == 'shadowmax') && ($shadow['max'] > 0) && $shadow['lastchange']) + $shadow_date = $shadow['lastchange']+$shadow['max']; + + elseif (($attribute->getName() == 'shadowwarning') && ($attribute->getValue(0) > 0) + && $shadow['lastchange'] && $shadow['max'] && $shadow['max'] > 0) + $shadow_date = $shadow['lastchange']+$shadow['max']-$attribute->getValue(0); + + elseif (($attribute->getName() == 'shadowinactive') && ($attribute->getValue(0) > 0) + && $shadow['lastchange'] && $shadow['max'] && $shadow['max'] > 0) + $shadow_date = $shadow['lastchange']+$shadow['max']+$attribute->getValue(0); + + elseif (($attribute->getName() == 'shadowmin') && ($attribute->getValue(0) > 0) && $shadow['lastchange']) + $shadow_date = $shadow['lastchange']+$attribute->getValue(0); + + elseif (($attribute->getName() == 'shadowexpire') && ($attribute->getValue(0) > 0)) + $shadow_date = $shadowattr->getValue(0); + + # Couldn't interpret the shadow date (could be 0 or -1 or something) + else + return false; + + return $shadow_date*24*3600; + } + + protected function drawShadowDateShadowAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $shadow_before_today_attrs = arrayLower($attribute->shadow_before_today_attrs); + $shadow_after_today_attrs = arrayLower($attribute->shadow_after_today_attrs); + $shadow_date = $this->shadow_date($attribute); + + if (! $shadow_date) + return; + + $today = date('U'); + + echo '
'; + if (($today < $shadow_date) && in_array(strtolower($attribute->getName()),$shadow_before_today_attrs)) + printf('(%s)', + strftime($_SESSION[APPCONFIG]->getValue('appearance','date'),$shadow_date)); + + elseif (($today > $shadow_date) && in_array(strtolower($attribute->getName()),$shadow_after_today_attrs)) + printf('(%s)', + strftime($_SESSION[APPCONFIG]->getValue('appearance','date'),$shadow_date)); + + else + printf('(%s)', + strftime($_SESSION[APPCONFIG]->getValue('appearance','date'),$shadow_date)); + + echo '
'; + } + + protected function drawFormReadOnlyValueShadowAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $this->drawFormReadOnlyValueAttribute($attribute,$i); + $this->draw('ShadowDate',$attribute); + } + + protected function drawFormReadWriteValueShadowAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $this->drawFormReadWriteValueAttribute($attribute,$i); + $this->draw('ShadowDate',$attribute); + } +} +?> diff --git a/lib/PasswordAttribute.php b/lib/PasswordAttribute.php index c21ac7e..f4134f7 100644 --- a/lib/PasswordAttribute.php +++ b/lib/PasswordAttribute.php @@ -1,11 +1,18 @@ getServer(); + + foreach ($xmldata['query'] as $xml_key => $xml_value) { + if (DEBUG_ENABLED) + debug_log('Foreach loop Key [%s] Value [%s]',4,__FILE__,__LINE__,__METHOD__,$xml_key,is_array($xml_value)); + + switch ($xml_key) { + + # Build our attribute list from the DN and Template. + case ('attributes'): + if (DEBUG_ENABLED) + debug_log('Case [%s]',4,__FILE__,__LINE__,__METHOD__,$xml_key); + + if (is_array($xmldata['query'][$xml_key])) { + foreach ($xmldata['query'][$xml_key] as $tattrs) { + foreach ($tattrs as $index => $details) { + + if (DEBUG_ENABLED) + debug_log('Foreach tattrs Key [%s] Value [%s]',4,__FILE__,__LINE__,__METHOD__, + $index,$details); + + # If there is no schema definition for the attribute, it will be ignored. + if ($sattr = $server->getSchemaAttribute($index)) { + if (is_null($attribute = $this->getAttribute($sattr->getName()))) + $attribute = $this->addAttribute($sattr->getName(false),array('values'=>array())); + + $attribute->show(); + $attribute->setXML($details); + } + } + } + } + + break; + + # Build our bases list from the DN and Template. + case ('bases'): + if (isset($xmldata['query'][$xml_key]['base'])) + if (is_array($xmldata['query'][$xml_key]['base'])) + $this->base = $xmldata['query'][$xml_key]['base']; + else + $this->base = array($xmldata['query'][$xml_key]['base']); + else + error(sprintf(_('In the XML file (%s), [%s] contains an unknown key.'), + $this->filename,$xml_key),'error','index.php'); + + $this->base = array_unique($this->base); + break; + + default: + if (DEBUG_ENABLED) + debug_log('Case [%s]',4,__FILE__,__LINE__,__METHOD__,$xml_key); + + # Some key definitions need to be an array, some must not be: + $allowed_arrays = array(''); + $storelower = array(''); + $storearray = array(''); + + # Items that must be stored lowercase + if (in_array($xml_key,$storelower)) + if (is_array($xml_value)) + foreach ($xml_value as $index => $value) + $xml_value[$index] = strtolower($value); + else + $xml_value = strtolower($xml_value); + + # Items that must be stored as arrays + if (in_array($xml_key,$storearray) && ! is_array($xml_value)) + $xml_value = array($xml_value); + + # Items that should not be an array + if (! in_array($xml_key,$allowed_arrays) && is_array($xml_value)) { + debug_dump(array(__METHOD__,'key'=>$xml_key,'value'=>$xml_value)); + error(sprintf(_('In the XML file (%s), [%s] is an array, it must be a string.'), + $this->filename,$xml_key),'error'); + } + + $this->$xml_key = $xml_value; + } + } + + # Check we have some manditory items. + foreach (array() as $key) { + if (! isset($this->$key) + || (! is_array($this->$key) && ! trim($this->$key))) { + + $this->setInvalid(sprintf(_('Missing %s in the XML file.'),$key)); + break; + } + } + } + + /** + * Accept will run the query and store the results in results() + */ + public function accept() { + $server = $this->getServer(); + + $query = array(); + + # If this is a custom search, we need to populate are paramters + if ($this->getID() == 'none') { + $bases = get_request('base','REQUEST',false,null); + $query['filter'] = get_request('filter','REQUEST',false,'objectClass=*'); + $query['scope'] = get_request('scope','REQUEST',false,'sub'); + $attrs = get_request('display_attrs','REQUEST'); + + $attrs = preg_replace('/\s+/','',$attrs); + if ($attrs) + $query['attrs'] = explode(',',$attrs); + else + $query['attrs'] = array('*'); + + } else { + $bases = $this->base; + $query['filter'] = $this->filter; + $query['scope'] = $this->scope; + $query['attrs'] = $this->getAttributeNames(); + } + + if (! $bases) + $bases = $server->getBaseDN(); + elseif (! is_array($bases)) + $bases = explode('|',$bases); + + foreach ($bases as $base) { + $query['base'] = $base; + + $time_start = utime(); + $this->results[$base] = $server->query($query,null); + $time_end = utime(); + + $this->resultsdata[$base]['time'] = round($time_end-$time_start,2); + $this->resultsdata[$base]['scope'] = $query['scope']; + $this->resultsdata[$base]['filter'] = $query['filter']; + $this->resultsdata[$base]['attrs'] = $query['attrs']; + + if ($this->getAttrSortOrder()) + masort($this->results[$base],$this->getAttrSortOrder()); + } + } + + /** + * This is temporary to get around objects that use a DN for rendering, for example jpegPhoto + */ + public function setDN($dn) { + $this->dn = $dn; + } + + /** + * This is temporary to get around objects that use a DN for rendering, for example jpegPhoto + */ + public function getDN() { + return $this->dn; + } + + public function getAttrSortOrder() { + $result = array(); + + if (count($this->attributes)) { + masort($this->attributes,'ordersort'); + + foreach ($this->attributes as $attribute) + array_push($result,$attribute->getName()); + + } else { + $display = preg_replace('/,\s+/',',',get_request('orderby','REQUEST',false,'')); + + if (trim($display)) + $result = explode(',',$display); + } + + return implode(',',$result); + } + + public function getAttrDisplayOrder() { + $result = array(); + + if (count($this->attributes)) { + masort($this->attributes,'order'); + + foreach ($this->attributes as $attribute) + array_push($result,$attribute->getName()); + + } else { + $display = preg_replace('/,\s+/',',',get_request('display_attrs','REQUEST',false,'')); + + if (trim($display)) + $result = explode(',',$display); + } + + # If our display order is empty, then dynamically build it + if (! count($result)) { + foreach ($this->results as $details) + foreach ($details as $attrs) + $result = array_merge($result,array_keys(array_change_key_case($attrs))); + + $result = array_unique($result); + sort($result); + } + + # Put the DN first + array_unshift($result,'dn'); + $result = array_unique($result); + + return implode(',',$result); + } + + /** + * Test if the template is visible + * + * @return boolean + */ + public function isVisible() { + return $this->visible; + } + + public function getDescription() { + return $this->description; + } +} +?> diff --git a/lib/QueryRender.php b/lib/QueryRender.php new file mode 100644 index 0000000..f2ab86f --- /dev/null +++ b/lib/QueryRender.php @@ -0,0 +1,544 @@ +%s
',__METHOD__); + if (DEBUGTMP||DEBUGTMPSUB) printf('* %s [GETquery:%s]
',__METHOD__,get_request('query','REQUEST')); + if (DEBUGTMP||DEBUGTMPSUB) printf('* %s [Page:%s]
',__METHOD__,get_request('page','REQUEST')); + + $this->template_id = $this->getTemplateChoice(); + $this->page = get_request('page','REQUEST',false,1); + + if ($this->template_id) { + $templates = $this->getTemplates(); + $this->template = $templates->getTemplate($this->template_id); + $this->template->accept(); + + $this->visitStart(); + $this->visitEnd(); + } + } + + /** + * Get our templates applicable for this object + */ + protected function getTemplates() { + return new Queries($this->server_id); + } + + /** + * Are default queries enabled? + */ + protected function haveDefaultTemplate() { + $server = $this->getServer(); + + if ($server->getValue('query','disable_default')) + return false; + else + return true; + } + + protected function drawTemplateChoice() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $server = $this->getServer(); + + $this->drawTitle(_('Search')); + $this->drawSubTitle(); + + echo "\n"; + + $baseDNs = $server->getBaseDN(); + + echo '
'; + echo '
'; + echo ''; + printf('',$server->getIndex()); + + echo ''; + echo ''; + + $templates = $this->getTemplates(); + + if (count($templates->getTemplates())) { + echo ''; + printf('',_('Run a predefined query'),_('Predefined Query')); + echo ''; + echo ''; + } + + echo ''; + printf('',_('The format to show the query results'),_('Display Format')); + echo ''; + echo ''; + + echo ''; + printf('',_('Entries to show per page'),_('Show Results')); + echo ''; + echo ''; + + echo ''; + + echo ''; + echo ''; + + printf('',_('Search')); + + echo '
 
%s'; + echo ''; + echo '
%s'; + echo ''; + echo '
%s'; + echo ''; + echo '
'; + printf('
','block'); + echo '
'; + echo '
'; + printf('%s',_('Custom Query')); + echo ''; + + printf('',_('Base DN')); + printf(''; + echo ''; + + echo ''; + printf('',_('The scope in which to search'),_('Search Scope')); + + echo ''; + echo ''; + + echo ''; + printf('', + htmlspecialchars(_('Standard LDAP search filter. Example: (&(sn=Smith)(givenName=David))')),_('Search Filter')); + + printf('', + 'objectClass=*'); + + echo ''; + + echo ''; + printf('', + _('A list of attributes to display in the results (comma-separated)'),_('Show Attributes')); + + printf('', + implode(', ',$_SESSION[APPCONFIG]->getValue('search','result_attributes'))); + echo ''; + + echo ''; + printf('',_('Order by'),_('Order by')); + printf('',''); + + echo '
%s',count($baseDNs) == 1 ? $baseDNs[0] : ''); + + draw_chooser_link('advanced_search_form.base'); + + echo '
%s'; + echo ''; + echo '
%s
%s
%s
'; + echo '
'; + echo '
'; + echo '

'; + echo '
'; + echo '
'; + } + + private function visitStart() { + $this->drawTitle(_('Search Results')); + $this->drawSubTitle(); + echo '
'; + } + + private function visitEnd() { + $server = $this->getServer(); + $afattrs = $this->getAFAttrs(); + + # Display the Javascript that enables us to show/hide DV entries + echo ''; + echo "\n\n"; + + $this->drawBaseTabs(); + + switch(get_request('format','REQUEST',false,'table')) { + case 'list': + + $counter = 0; + foreach ($this->template->results as $base => $results) { + if (! $show = get_request('show','REQUEST')) + $show = ($counter++ === 0 ? $this->getAjaxRef($base) : null); + + printf('
', + $this->getAjaxRef($base), + ($show == $this->getAjaxRef($base) ? '' : 'none')); + + echo ''; + echo ''; + echo '
'; + echo '
'; + echo '
'; + + $this->drawResultsTable($base,count($results)); + + echo '
'; + echo '
'; + + foreach ($results as $dn => $dndetails) { + $dndetails = array_change_key_case($dndetails); + + # Temporarily set our DN, for rendering that leverages our DN (eg: JpegPhoto) + $this->template->setDN($dn); + + echo ''; + + echo ''; + printf('',IMGDIR,get_icon($server->getIndex(),$dn)); + + printf('', + $server->getIndex(),rawurlencode(dn_unescape($dn)),htmlspecialchars(get_rdn($dn))); + echo ''; + + printf('', + htmlspecialchars(dn_unescape($dn))); + + # Iterate over each attribute for this entry + foreach (explode(',',$this->template->getAttrDisplayOrder()) as $attr) { + # Ignore DN, we've already displayed it. + if ($attr == 'dn') + continue; + + if (! isset($dndetails[$attr])) + continue; + + # Set our object with our values + $afattrs[$attr]->clearValue(); + + if (is_array($dndetails[$attr])) + $afattrs[$attr]->initValue($dndetails[$attr]); + else + $afattrs[$attr]->initValue(array($dndetails[$attr])); + + echo ''; + echo ''; + + echo ''; + + echo ''; + echo ''; + } + + echo '
icon%s
 dn%s
 '; + $this->draw('Name',$afattrs[$attr]); + echo ''; + $this->draw('CurrentValues',$afattrs[$attr]); + echo '
'; + echo '
'; + } + + echo '
'; + echo '
'; + + echo "\n\n"; + } + + break; + + case 'table': + + # Display the results. + $counter = 0; + foreach ($this->template->results as $base => $results) { + if (! $show = get_request('show','REQUEST')) + $show = ($counter++ === 0 ? $this->getAjaxRef($base) : null); + + printf('
', + $this->getAjaxRef($base), + ($show == $this->getAjaxRef($base) ? '' : 'none')); + + echo ''; + echo '
'; + echo '
'; + echo '
'; + + $this->drawResultsTable($base,count($results)); + + echo '
'; + echo '
'; + + if (! $results) { + echo _('Search returned no results'); + echo '
'; + echo '
'; + continue; + } + + echo ''; + + echo ''; + echo ''; + echo ''; + + foreach (explode(',',$this->template->getAttrDisplayOrder()) as $attr) { + echo ''; + } + + echo ''; + echo ''; + + echo ''; + $counter = 0; + foreach ($results as $dn => $dndetails) { + $dndetails = array_change_key_case($dndetails); + + # Temporarily set our DN, for rendering that leverages our DN (eg: JpegPhoto) + $this->template->setDN($dn); + + printf('',++$counter%2 ? 'odd' : 'even'); + + $href = sprintf('cmd=template_engine&server_id=%s&dn=%s',$server->getIndex(),rawurlencode($dn)); + printf('', + htmlspecialchars($href), + IMGDIR,get_icon($server->getIndex(),$dn)); + + # We'll clone our attribute factory attributes, since we need to add the values to them for rendering. + foreach (explode(',',$this->template->getAttrDisplayOrder()) as $attr) { + # If the entry is blank, we'll draw an empty box and continue. + if (! isset($dndetails[$attr])) { + echo ''; + continue; + } + + # Special case for DNs + if ($attr == 'dn') { + $dn_display = strlen($dn) > 40 + ? sprintf('%s...',htmlspecialchars($dn),htmlspecialchars(substr($dn,0,40))) + : htmlspecialchars($dn); + + printf('',htmlspecialchars($href),$dn_display); + continue; + } + + # Set our object with our values + $afattrs[$attr]->clearValue(); + if (is_array($dndetails[$attr])) + $afattrs[$attr]->initValue($dndetails[$attr]); + else + $afattrs[$attr]->initValue(array($dndetails[$attr])); + + echo ''; + } + + echo ''; + } + + echo ''; + echo '
 '; + $this->draw('Name',$afattrs[$attr]); + echo '
icon %s'; + $this->draw('CurrentValues',$afattrs[$attr]); + echo '
'; + echo ''; + echo ''; + echo ''; + echo "\n\n"; + } + + break; + + default: + printf('Have ID [%s], run this query for page [%s]',$this->template_id,$this->page); + } + } + + public function drawSubTitle($subtitle=null) { + + if (is_null($subtitle)) { + $server = $this->getServer(); + + $subtitle = sprintf('%s: %s',_('Server'),$server->getName()); + + if ($this->template_id) { + $subtitle .= '
'; + $subtitle .= sprintf('%s: %s',('Query'),$this->template->getID() != 'none' ? $this->template->getTitle() : _('Default')); + if ($this->template->getName()) + $subtitle .= sprintf(' (%s)',$this->template->getName(false)); + } + } + + parent::drawSubTitle($subtitle); + } + + private function getAFattrs() { + $attribute_factory = new AttributeFactory(); + $results = array(); + + foreach (explode(',',$this->template->getAttrDisplayOrder()) as $attr) + $results[$attr] = $attribute_factory->newAttribute($attr,array('values'=>array()),$this->getServerID()); + + return $results; + } + + private function getAjaxRef($dn) { + return preg_replace('/=/','.',base64_encode($dn)); + } + + private function drawBaseTabs() { + # Setup the Javascript to show/hide our DIVs. + echo ''; + echo "\n\n"; + + echo ''; + echo ''; + $counter = 0; + foreach ($this->template->results as $base => $results) { + if (! $show = get_request('show','REQUEST')) + $show = ($counter++ === 0 ? $this->getAjaxRef($base) : null); + + printf('', + $this->getAjaxRef($base), + $this->getAjaxRef($base), + ($show == $this->getAjaxRef($base) ? '#F0F0F0' : '#E0E0E0'), + $base); + } + echo ''; + echo '
%s
'; + echo "\n\n"; + } + + private function drawResultsTable($base,$results) { + $server = $this->getServer(); + + echo ''; + + echo ''; + printf('',_('Entries found'), + number_format($results),$this->template->resultsdata[$base]['time'],_('seconds')); + + if ($_SESSION[APPCONFIG]->isCommandAvailable('export')) { + $href = htmlspecialchars(sprintf('cmd.php?cmd=export_form&server_id=%s&scope=%s&dn=%s&filter=%s&attributes=%s', + $server->getIndex(),$this->template->resultsdata[$base]['scope'], + $base,rawurlencode($this->template->resultsdata[$base]['filter']), + rawurlencode(implode(', ',$this->template->resultsdata[$base]['attrs'])))); + + printf(''; + echo ''; + echo '
%s: %s

(%s %s)
[ Save %s ]', + $href,IMGDIR,_('export results')); + } + + printf('[ rename %s:',IMGDIR,_('Format')); + + foreach (array('list','table') as $f) { + echo ' '; + + if (get_request('format','REQUEST') == $f) { + printf('%s',_($f)); + + } else { + $query_string = array_to_query_string($_GET,array('format','cmd')); + $query_string .= sprintf('&format=%s&show=%s',$f,$this->getAjaxRef($base)); + printf('%s',htmlspecialchars($query_string),_($f)); + } + } + + echo ' ]'; + + echo '
'; + printf('%s: %s',_('Base DN'),$base); + + echo '
'; + printf('%s: %s',_('Filter performed'),htmlspecialchars($this->template->resultsdata[$base]['filter'])); + + echo '
'; + } +} +?> diff --git a/lib/RandomPasswordAttribute.php b/lib/RandomPasswordAttribute.php index 0b7dba1..817f563 100644 --- a/lib/RandomPasswordAttribute.php +++ b/lib/RandomPasswordAttribute.php @@ -1,13 +1,19 @@ diff --git a/lib/SambaPasswordAttribute.php b/lib/SambaPasswordAttribute.php index 66ca244..04ce01e 100644 --- a/lib/SambaPasswordAttribute.php +++ b/lib/SambaPasswordAttribute.php @@ -1,11 +1,18 @@ selection = array(); - $this->multiple = false; + # Our values are set by parent(). If we do have values, and the source was XML, move them to our selection. + if ($this->source == 'XML' && $this->values) { + $this->selection = $this->values; + $this->values = array(); + } + + if (isset($values['type']) && $values['type'] == 'multiselect') + $this->multiple = true; + else + $this->multiple = false; } - public function addOption($value, $description) { - $this->selection["$value"] = $description; + public function addOption($value,$description) { + $this->selection[$value] = $description; } public function getOptionCount() { @@ -30,6 +47,14 @@ class SelectionAttribute extends Attribute { return $this->selection; } + public function autoValue($value) { + $this->selection = $value; + } + + public function getDefault() { + return $this->default; + } + public function isMultiple() { return $this->multiple; } diff --git a/lib/ShadowAttribute.php b/lib/ShadowAttribute.php index 45bf2d3..32c5146 100644 --- a/lib/ShadowAttribute.php +++ b/lib/ShadowAttribute.php @@ -1,11 +1,18 @@ attributes as $key => $value) + $this->attributes[$key] = clone $value; + } + + /** + * Main processing to store the template. + * + * @param xmldata Parsed xmldata from xml2array object + */ + protected function storeTemplate($xmldata) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',5,__FILE__,__LINE__,__METHOD__,$xmldata); + + $server = $this->getServer(); + $objectclasses = array(); + + foreach ($xmldata['template'] as $xml_key => $xml_value) { + if (DEBUG_ENABLED) + debug_log('Foreach loop Key [%s] Value [%s]',4,__FILE__,__LINE__,__METHOD__,$xml_key,is_array($xml_value)); + + switch ($xml_key) { + # Build our object Classes from the DN and Template. + case ('objectclasses'): + if (DEBUG_ENABLED) + debug_log('Case [%s]',4,__FILE__,__LINE__,__METHOD__,$xml_key); + + if (isset($xmldata['template'][$xml_key]['objectclass'])) + if (is_array($xmldata['template'][$xml_key]['objectclass'])) { + foreach ($xmldata['template'][$xml_key]['objectclass'] as $index => $details) { + + # XML files with only 1 objectClass dont have a numeric index. + $soc = $server->getSchemaObjectClass(strtolower($details)); + + # If we havent recorded this objectclass already, do so now. + if (is_object($soc) && ! in_array($soc->getName(),$objectclasses)) + array_push($objectclasses,$soc->getName(false)); + + elseif (! is_object($soc)) + system_message(array( + 'title'=>_('Automatically removed objectClass from template'), + 'body'=>sprintf('%s: %s %s',$this->getTitle(),$details,_('removed from template as it is not defined in the schema')), + 'type'=>'warn')); + } + + } else { + # XML files with only 1 objectClass dont have a numeric index. + $soc = $server->getSchemaObjectClass(strtolower($xmldata['template'][$xml_key]['objectclass'])); + + # If we havent recorded this objectclass already, do so now. + if (is_object($soc) && ! in_array($soc->getName(),$objectclasses)) + array_push($objectclasses,$soc->getName(false)); + } + + break; + + # Build our attribute list from the DN and Template. + case ('attributes'): + if (DEBUG_ENABLED) + debug_log('Case [%s]',4,__FILE__,__LINE__,__METHOD__,$xml_key); + + if (is_array($xmldata['template'][$xml_key])) { + foreach ($xmldata['template'][$xml_key] as $tattrs) + foreach ($tattrs as $index => $details) { + if (DEBUG_ENABLED) + debug_log('Foreach tattrs Key [%s] Value [%s]',4,__FILE__,__LINE__,__METHOD__, + $index,$details); + + # If there is no schema definition for the attribute, it will be ignored. + if ($sattr = $server->getSchemaAttribute($index)) + if (is_null($this->getAttribute($sattr->getName()))) + $this->addAttribute($sattr->getName(),$details,'XML'); + } + + masort($this->attributes,'order'); + } + + break; + + default: + if (DEBUG_ENABLED) + debug_log('Case [%s]',4,__FILE__,__LINE__,__METHOD__,$xml_key); + + # Some key definitions need to be an array, some must not be: + $allowed_arrays = array('rdn'); + $storelower = array('rdn'); + $storearray = array('rdn'); + + # Items that must be stored lowercase + if (in_array($xml_key,$storelower)) + if (is_array($xml_value)) + foreach ($xml_value as $index => $value) + $xml_value[$index] = strtolower($value); + else + $xml_value = strtolower($xml_value); + + # Items that must be stored as arrays + if (in_array($xml_key,$storearray) && ! is_array($xml_value)) + $xml_value = array($xml_value); + + # Items that should not be an array + if (! in_array($xml_key,$allowed_arrays) && is_array($xml_value)) { + debug_dump(array(__METHOD__,'key'=>$xml_key,'value'=>$xml_value)); + error(sprintf(_('In the XML file (%s), [%s] is an array, it must be a string.'), + $this->filename,$xml_key),'error'); + } + + $this->$xml_key = $xml_value; + + if ($xml_key == 'invalid' && $xml_value) + $this->invalid_reason = _('Disabled by XML configuration'); + } + } + + if (! count($objectclasses)) { + $this->setInvalid(_('ObjectClasses in XML dont exist in LDAP server.')); + return; + + } else { + $attribute = $this->addAttribute('objectClass',array('values'=>$objectclasses)); + $attribute->justModified(); + $attribute->setRequired(); + } + + $this->rebuildTemplateAttrs(); + + # Check we have some manditory items. + foreach (array('rdn','structural_oclass','visible') as $key) { + if (! isset($this->$key) + || (! is_array($this->$key) && ! trim($this->$key))) { + + $this->setInvalid(sprintf(_('Missing %s in the XML file.'),$key)); + break; + } + } + + # Mark our RDN attributes as RDN + $counter = 1; + foreach ($this->rdn as $key) { + if ((is_null($attribute = $this->getAttribute($key))) && (in_array_ignore_case('extensibleobject',$this->getObjectClasses()))) { + $attribute = $this->addAttribute($key,array('values'=>array())); + $attribute->show(); + } + + if (! is_null($attribute)) + $attribute->setRDN($counter++); + elseif ($this->isType('creation')) + $this->setInvalid(sprintf(_('Missing RDN attribute %s in the XML file.'),$key)); + } + } + + /** + * Is default templates enabled? + * This will disable the default template from the engine. + * + * @return boolean + */ + protected function hasDefaultTemplate() { + if ($_SESSION[APPCONFIG]->getValue('appearance','disable_default_template')) + return false; + else + return true; + } + + /** + * Return the templates of type (creation/modification) + * + * @param $string type - creation/modification + * @return array - Array of templates of that type + */ + protected function readTemplates($type) { + if (DEBUG_ENABLED) + debug_log('Entered with ()',1,__FILE__,__LINE__,__METHOD__); + + $template_xml = new Templates($this->server_id); + return $template_xml->getTemplates($type); + } + + /** + * This function will perform the following intialisation steps: + * + If a DN is set, query the ldap and load the object + * + Read our $_REQUEST variable and set the values + * After this action, the template should self describe as to whether it is an update, create + * or delete. + * (OLD values are IGNORED, we will have got them when we build this object from the LDAP server DN.) + */ + public function accept($makeVisible=false) { + $server = $this->getServer(); + + # If a DN is set, then query the LDAP server for the details. + if ($this->dn) { + if (! $server->dnExists($this->dn)) + system_message(array( + 'title'=>__METHOD__, + 'body'=>sprintf('DN (%s) didnt exist in LDAP?',$this->dn), + 'type'=>'info')); + + $rdnarray = rdn_explode(strtolower(get_rdn(dn_escape($this->dn)))); + + $counter = 1; + foreach ($server->getDNAttrValues($this->dn,null,LDAP_DEREF_NEVER,array_merge(array('*'),$server->getValue('server','custom_attrs'))) as $attr => $values) { + # We ignore DNs. + if ($attr == 'dn') + continue; + + $attribute = $this->getAttribute($attr); + + if (is_null($attribute)) + $attribute = $this->addAttribute($attr,array('values'=>$values)); + else + if ($attribute->getValues()) + $attribute->setValue(array_values($values)); + else + $attribute->initValue(array_values($values)); + + # Work out the RDN attributes + foreach ($attribute->getValues() as $index => $value) + if (in_array(sprintf('%s=%s', + $attribute->getName(),strtolower($attribute->getValue($index))),$rdnarray)) + $attribute->setRDN($counter++); + + if ($makeVisible) + $attribute->show(); + } + + # Get the Internal Attributes + foreach ($server->getDNAttrValues($this->dn,null,LDAP_DEREF_NEVER,array_merge(array('+'),$server->getValue('server','custom_sys_attrs'))) as $attr => $values) { + $attribute = $this->getAttribute($attr); + + if (is_null($attribute)) + $attribute = $this->addAttribute($attr,array('values'=>$values)); + else + if ($attribute->getValues()) + $attribute->setValue(array_values($values)); + else + $attribute->initValue(array_values($values)); + + if (! in_array_ignore_case($attribute->getName(),$server->getValue('server','custom_attrs'))) + $attribute->setInternal(); + } + + # If this is the default template, and our $_REQUEST has defined our objectclass, then query the schema to get the attributes + } elseif ($this->container) { + if ($this->isType('default') && ! count($this->getAttributes(true)) && isset($_REQUEST['new_values']['objectclass'])) { + $attribute = $this->addAttribute('objectclass',array('values'=>$_REQUEST['new_values']['objectclass'])); + $attribute->justModified(); + $this->rebuildTemplateAttrs(); + unset($_REQUEST['new_values']['objectclass']); + } + + } else { + debug_dump_backtrace('No DN or CONTAINER?',1); + } + + # Read in our new values. + foreach (array('new_values') as $key) { + if (isset($_REQUEST[$key])) + foreach ($_REQUEST[$key] as $attr => $values) { + # If it isnt an array, silently ignore it. + if (! is_array($values)) + continue; + + # If _REQUEST['skip_array'] with this attr set, we'll ignore this new_value + if (isset($_REQUEST['skip_array'][$attr])) + continue; + + # Prune out entries with a blank value. + foreach ($values as $index => $value) + if (! strlen(trim($value))) + unset($values[$index]); + + $attribute = $this->getAttribute($attr); + # If the attribute is null, then no attribute exists, silently ignore it (unless this is the default template) + if (is_null($attribute) && (! $this->isType('default') && ! $this->isType(null))) + continue; + + # If it is a binary attribute, the post should have base64 encoded the value, we'll need to reverse that + if ($server->isAttrBinary($attr)) + foreach ($values as $index => $value) + $values[$index] = base64_decode($value); + + if (is_null($attribute)) { + $attribute = $this->addAttribute($attr,array('values'=>$values)); + + if (count($values)) + $attribute->justModified(); + + } else + $attribute->setValue(array_values($values)); + } + + # Read in our new binary values + if (isset($_FILES[$key]['name'])) + foreach ($_FILES[$key]['name'] as $attr => $values) { + $new_values = array(); + + foreach ($values as $index => $details) { + # Ignore empty files + if (! $_FILES[$key]['size'][$attr][$index]) + continue; + + if (! is_uploaded_file($_FILES[$key]['tmp_name'][$attr][$index])) { + if (isset($_FILES[$key]['error'][$attr][$index])) + switch($_FILES[$key]['error'][$attr][$index]) { + + # No error; possible file attack! + case 0: + $msg = _('Security error: The file being uploaded may be malicious.'); + break; + + # Uploaded file exceeds the upload_max_filesize directive in php.ini + case 1: + $msg = _('The file you uploaded is too large. Please check php.ini, upload_max_size setting'); + break; + + # Uploaded file exceeds the MAX_FILE_SIZE directive specified in the html form + case 2: + $msg = _('The file you uploaded is too large. Please check php.ini, upload_max_size setting'); + break; + + # Uploaded file was only partially uploaded + case 3: + $msg = _('The file you selected was only partially uploaded, likley due to a network error.'); + break; + + # No file was uploaded + case 4: + $msg = _('You left the attribute value blank. Please go back and try again.'); + break; + + # A default error, just in case! :) + default: + $msg = _('Security error: The file being uploaded may be malicious.'); + break; + } + + else + $msg = _('Security error: The file being uploaded may be malicious.'); + + system_message(array( + 'title'=>_('Upload Binary Attribute Error'),'body'=>$msg,'type'=>'warn')); + + } else { + $binaryfile = array(); + $binaryfile['name'] = $_FILES[$key]['tmp_name'][$attr][$index]; + $binaryfile['handle'] = fopen($binaryfile['name'],'r'); + $binaryfile['data'] = fread($binaryfile['handle'],filesize($binaryfile['name'])); + fclose($binaryfile['handle']); + + $new_values[$index] = $binaryfile['data']; + } + } + + if (count($new_values)) { + $attribute = $this->getAttribute($attr); + + if (is_null($attribute)) + $attribute = $this->addAttribute($attr,array('values'=>$new_values)); + else + foreach ($new_values as $value) + $attribute->addValue($value); + + $attribute->justModified(); + } + } + } + + # If there are any single item additions (from the add_attr form for example) + if (isset($_REQUEST['single_item_attr'])) { + if (isset($_REQUEST['single_item_value'])) { + if (! is_array($_REQUEST['single_item_value'])) + $values = array($_REQUEST['single_item_value']); + else + $values = $_REQUEST['single_item_value']; + + } elseif (isset($_REQUEST['binary'])) { + /* Special case for binary attributes (like jpegPhoto and userCertificate): + * we must go read the data from the file and override $_REQUEST['single_item_value'] with the + * binary data. Secondly, we must check if the ";binary" option has to be appended to the name + * of the attribute. */ + + if ($_FILES['single_item_value']['size'] === 0) + system_message(array( + 'title'=>_('Upload Binary Attribute Error'), + 'body'=>sprintf('%s %s',_('The file you chose is either empty or does not exist.'),_('Please go back and try again.')), + 'type'=>'warn')); + + else { + if (! is_uploaded_file($_FILES['single_item_value']['tmp_name'])) { + if (isset($_FILES['single_item_value']['error'])) + switch($_FILES['single_item_value']['error']) { + + # No error; possible file attack! + case 0: + $msg = _('Security error: The file being uploaded may be malicious.'); + break; + + # Uploaded file exceeds the upload_max_filesize directive in php.ini + case 1: + $msg = _('The file you uploaded is too large. Please check php.ini, upload_max_size setting'); + break; + + # Uploaded file exceeds the MAX_FILE_SIZE directive specified in the html form + case 2: + $msg = _('The file you uploaded is too large. Please check php.ini, upload_max_size setting'); + break; + + # Uploaded file was only partially uploaded + case 3: + $msg = _('The file you selected was only partially uploaded, likley due to a network error.'); + break; + + # No file was uploaded + case 4: + $msg = _('You left the attribute value blank. Please go back and try again.'); + break; + + # A default error, just in case! :) + default: + $msg = _('Security error: The file being uploaded may be malicious.'); + break; + } + + else + $msg = _('Security error: The file being uploaded may be malicious.'); + + system_message(array( + 'title'=>_('Upload Binary Attribute Error'),'body'=>$msg,'type'=>'warn'),'index.php'); + } + + $binaryfile = array(); + $binaryfile['name'] = $_FILES['single_item_value']['tmp_name']; + $binaryfile['handle'] = fopen($binaryfile['name'],'r'); + $binaryfile['data'] = fread($binaryfile['handle'],filesize($binaryfile['name'])); + fclose($binaryfile['handle']); + + $values = array($binaryfile['data']); + } + } + + if (count($values)) { + $attribute = $this->getAttribute($_REQUEST['single_item_attr']); + + if (is_null($attribute)) + $attribute = $this->addAttribute($_REQUEST['single_item_attr'],array('values'=>$values)); + else + $attribute->setValue(array_values($values)); + + $attribute->justModified(); + } + } + + # If this is the default creation template, we need to set some additional values + if ($this->isType('default') && $this->getContext() == 'create') { + # Load our schema, based on the objectclasses that may have already been defined. + $this->rebuildTemplateAttrs(); + + # Set the RDN attribute + $counter = 1; + foreach (get_request('rdn_attribute','REQUEST',false,array()) as $key => $value) { + $attribute = $this->getAttribute($value); + + if (! is_null($attribute)) + $attribute->setRDN($counter++); + + else { + system_message(array( + 'title'=>_('No RDN attribute'), + 'body'=>_('No RDN attribute was selected'), + 'type'=>'warn'),'index.php'); + + die(); + } + } + } + } + + /** + * Set the DN for this template, if we are editing entries + * + * @param dn The DN of the entry + */ + public function setDN($dn) { + if (isset($this->container)) + system_message(array( + 'title'=>__METHOD__, + 'body'=>'CONTAINER set while setting DN', + 'type'=>'info')); + + $this->dn = $dn; + } + + /** + * Set the RDN attributes + * Given an RDN, mark the attributes as RDN attributes. If there is no defined attribute, + * then the remaining RDNs will be returned. + * + * @param RDN + * @return RDN attributes not processed + */ + public function setRDNAttributes($rdn) { + # Setup to work out our RDN. + $rdnarray = rdn_explode($rdn); + + $counter = 1; + foreach ($this->getAttributes(true) as $attribute) + foreach ($rdnarray as $index => $rdnattr) { + list($attr,$value) = explode('=',$rdnattr); + + if (strtolower($attr) == $attribute->getName()) { + $attribute->setRDN($counter++); + unset($rdnarray[$index]); + } + } + + return $rdnarray; + } + + /** + * Display the DN for this template entry. If the DN is not set (creating a new entry), then + * a generated DN will be produced, taken from the RDN and the CONTAINER details. + * + * @return dn + */ + public function getDN() { + if ($this->dn) + return $this->dn; + + # If DN is not set, our DN will be made from our RDN and Container. + elseif ($this->getRDN() && $this->getContainer()) + return sprintf('%s,%s',$this->getRDN(),$this->GetContainer()); + } + + /** + * Set the container for this template, if we are creating entries + * + * @param dn The DN of the container + * @todo Trigger a query to the LDAP server and generate an error if the container doesnt exist + */ + public function setContainer($container) { + if (isset($this->dn)) + system_message(array( + 'title'=>__METHOD__, + 'body'=>'DN set while setting CONTAINER', + 'type'=>'info')); + + $this->container = $container; + } + + /** + * Get the DN of the container for this entry + * + * @return dn DN of the container + */ + public function getContainer() { + return $this->container; + } + + /** + * Copy a DN + */ + public function copy($template,$rdn) { + $rdnarray = rdn_explode($rdn); + + $counter = 1; + foreach ($template->getAttributes(true) as $sattribute) { + $attribute = $this->addAttribute($sattribute->getName(false),array('values'=>$sattribute->getValues())); + + # Set our new RDN, and its values + if (is_null($attribute)) { + debug_dump_backtrace('Attribute is null, it probably doesnt exist in the destination server?'); + + } else { + + # Mark our internal attributes. + if ($sattribute->isInternal()) + $attribute->setInternal(); + + $modified = false; + foreach ($rdnarray as $index => $rdnattr) { + list($attr,$value) = explode('=',$rdnattr); + if (strtolower($attr) == $attribute->getName()) { + + # If this is already marked as an RDN, then this multivalue RDN was updated on a previous loop + if (! $modified) { + $attribute->setValue(array($value)); + $attribute->setRDN($counter++); + $modified = true; + + } else { + $attribute->addValue($value); + } + + # This attribute has been taken care of, we'll drop it from our list. + unset($rdnarray[$index]); + } + } + } + } + + # If we have any RDN values left over, there werent in the original entry and need to be added. + foreach ($rdnarray as $rdnattr) { + list($attr,$value) = explode('=',$rdnattr); + + $attribute = $this->addAttribute($attr,array('values'=>array($value))); + + if (is_null($attribute)) + debug_dump_backtrace('Attribute is null, it probably doesnt exist in the destination server?'); + else + $attribute->setRDN($counter++); + } + } + + /** + * Get Attributes by LDAP type + * This function will return a list of attributes by LDAP type (MUST,MAY). + * + * @return array Array of attributes. + */ + function getAttrbyLdapType($type) { + $result = array(); + + foreach ($this->attributes as $index => $attribute) { + if ($attribute->getLDAPtype() == strtolower($type)) + array_push($result,$attribute->getName()); + } + + return $result; + } + + /** + * Return true if this is a MUST,MAY attribute + */ + function isAttrType($attr,$type) { + if (in_array(strtolower($attr),$this->getAttrbyLdapType($type))) + return true; + else + return false; + } + + /** + * Return the attributes that comprise the RDN. + * + * @return array Array of RDN objects + */ + private function getRDNObjects() { + $return = array(); + + foreach ($this->attributes as $attribute) + if ($attribute->isRDN()) + array_push($return,$attribute); + + masort($return,'rdn'); + return $return; + } + + /** + * Get all the RDNs for this template, in RDN order. + * + * @return array RDNs in order. + */ + public function getRDNAttrs() { + $return = array(); + + foreach ($this->getRDNObjects() as $attribute) { + # We'll test if two RDN's have the same number (we cant test anywhere else) + if (isset($return[$attribute->isRDN()]) && $this->getType() == 'creation') + system_message(array( + 'title'=>_('RDN attribute sequence already defined'), + 'body'=>sprintf('%s %s', + sprintf(_('There is a problem in template [%s].'),$this->getName()), + sprintf(_('RDN attribute sequence [%s] is already used by attribute [%s] and cant be used by attribute [%s] also.'), + $attribute->isRDN(),$return[$attribute->isRDN()],$attribute->getName())), + 'type'=>'error'),'index.php'); + + $return[$attribute->isRDN()] = $attribute->getName(); + } + + return $return; + } + + /** + * Return the RDN for this template. If the DN is already defined, then the RDN will be calculated from it. + * If the DN is not set, then the RDN will be calcuated from the template attribute definitions + * + * @return rdn RDN for this template + */ + public function getRDN() { + # If the DN is set, then the RDN will be calculated from it. + if ($this->dn) + return get_rdn($this->dn); + + $rdn = ''; + + foreach ($this->getRDNObjects() as $attribute) { + $vals = $attribute->getValues(); + + # If an RDN attribute has no values, return with an empty string. The calling script should handle this. + if (! count($vals)) + return ''; + + foreach ($vals as $val) + $rdn .= sprintf('%s=%s+',$attribute->getName(),$val); + } + + # Chop the last plus sign off when returning + return preg_replace('/\+$/','',$rdn); + } + + /** + * Return the attribute name part of the RDN + */ + public function getRDNAttributeName() { + $attr = array(); + + if ($this->getDN()) { + $i = strpos($this->getDN(),','); + if ($i !== false) { + $attrs = explode('\+',substr($this->getDN(),0,$i)); + foreach ($attrs as $id => $attr) { + list ($name,$value) = explode('=',$attr); + $attrs[$id] = $name; + } + + $attr = array_unique($attrs); + } + } + + return $attr; + } + + /** + * Determine the type of template this is + */ + public function getContext() { + if ($this->getContainer()) + return 'create'; + elseif ($this->getDN()) + return 'edit'; + else + return 'unknown'; + } + + /** + * Test if the template is visible + * + * @return boolean + */ + public function isVisible() { + return $this->visible; + } + + public function getRegExp() { + return $this->regexp; + } + + /** + * Test if this template has been marked as a read-only template + */ + public function isReadOnly() { + if ((($this->getContext() == 'edit') && $this->readonly) || $this->getServer()->isReadOnly()) + return true; + else + return false; + } + + /** + * Get the attribute entries + * + * @param boolean Include the optional attributes + * @return array Array of attributes + */ + public function getAttributes($optional=false) { + if ($optional) + return $this->attributes; + + $result = array(); + foreach ($this->attributes as $attribute) { + if (! $attribute->isRequired()) + continue; + + array_push($result,$attribute); + } + + return $result; + } + + /** + * Return a list of attributes that should be shown + */ + public function getAttributesShown() { + $result = array(); + + foreach ($this->attributes as $attribute) + if ($attribute->isVisible()) + array_push($result,$attribute); + + return $result; + } + + /** + * Return a list of the internal attributes + */ + public function getAttributesInternal() { + $result = array(); + + foreach ($this->attributes as $attribute) + if ($attribute->isInternal()) + array_push($result,$attribute); + + return $result; + } + + /** + * Return the objectclasses defined in this template + * + * @return array Array of Objects + */ + public function getObjectClasses() { + $attribute = $this->getAttribute('objectclass'); + if ($attribute) + return $attribute->getValues(); + else + return array(); + } + + /** + * Get template icon + */ + public function getIcon() { + return isset($this->icon) ? $this->icon : ''; + } + + /** + * Return the template description + * + * @return string Description + */ + public function getDescription() { + return $this->description; + } + + /** + * Set a template as invalid + * + * @param string Message indicating the reason the template has been invalidated + */ + private function setInvalid($msg) { + $this->invalid = true; + $this->invalid_reason = $msg; + } + + /** + * Get the template validity or the reason it is invalid + * + * @return string Invalid reason, or false if not invalid + */ + public function isInValid() { + if ($this->invalid) + return $this->invalid_reason; + else + return false; + } + + /** + * Set the minimum number of values for an attribute + * + * @param object Attribute + * @param int + */ + private function setMinValueCount($attr,$value) { + $attribute = $this->getAttribute($attr); + + if (! is_null($attribute)) + $attribute->setMinValueCount($value); + } + + /** + * Set the LDAP type property for an attribute + * + * @param object Attribute + * @param string (MUST,MAY,OPTIONAL) + */ + private function setAttrLDAPtype($attr,$value) { + $attribute = $this->getAttribute($attr); + + if (is_null($attribute)) + $attribute = $this->addAttribute($attr,array('values'=>array())); + + $attribute->setLDAPtype($value); + } + + /** + * OnChangeAdd javascript processing + */ + public function OnChangeAdd($origin,$value) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s)',5,__FILE__,__LINE__,__METHOD__,$origin,$value); + + $attribute = $this->getAttribute($origin); + + if (preg_match('/^=(\w+)\((.*)\)$/',$value,$matches)) { + $command = $matches[1]; + $arg = $matches[2]; + } else + return; + + switch ($command) { + /* + autoFill:string + string is a literal string, and may contain many fields like %attr|start-end/flags% + to substitute values read from other fields. + |start-end is optional, but must be present if the k flag is used. + /flags is optional. + + flags may be: + T: Read display text from selection item (drop-down list), otherwise, read the value of the field + For fields that aren't selection items, /T shouldn't be used, and the field value will always be read. + k: Tokenize: + If the "k" flag is not given: + A |start-end instruction will perform a sub-string operation upon + the value of the attr, passing character positions start-end through. + start can be 0 for first character, or any other integer. + end can be 0 for last character, or any other integer for a specific position. + If the "k" flag is given: + The string read will be split into fields, using : as a delimiter + "start" indicates which field number to pass through. + K: The string read will be split into fields, using ' ' as a delimiter "start" indicates which field number to pass through. + l: Make the result lower case. + U: Make the result upper case. + */ + case 'autoFill': + list($attr,$string) = preg_split('(([^,]+);(.*))',$arg,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); + preg_match_all('/%(\w+)(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?%/U',$string,$matchall); + //print"
";print_r($matchall); //0 = highlevel match, 1 = attr, 2 = subst, 3 = mod
+
+				if (! isset($attribute->js['autoFill']))
+					$attribute->js['autoFill'] = '';
+
+				$formula = $string;
+				$formula = preg_replace('/^([^%])/','\'$1',$formula);
+				$formula = preg_replace('/([^%])$/','$1\'',$formula);
+
+				# Check that our attributes match our schema attributes.
+				foreach ($matchall[1] as $index => $checkattr) {
+					$sattr = $this->getServer()->getSchemaAttribute($checkattr);
+
+					# If the attribute is the same as in the XML file, then dont need to do anything.
+					if (! strcasecmp($sattr->getName(),$checkattr))
+						continue;
+
+					$formula = preg_replace("/$checkattr/",$sattr->getName(),$formula);
+					$matchall[1][$index] = $sattr->getName();
+				}
+
+				$elem_id = 0;
+
+				foreach ($matchall[0] as $index => $null) {
+					$match_attr = strtolower($matchall[1][$index]);
+					$match_subst = $matchall[2][$index];
+					$match_mod = $matchall[3][$index];
+
+					$substrarray = array();
+
+					if (! isset($varcount[$match_attr]))
+						$varcount[$match_attr] = 0;
+					else
+						$varcount[$match_attr]++;
+
+					$js_match_attr = $match_attr;
+					$match_attr = $js_match_attr.'xx'.$varcount[$match_attr];
+
+					$formula = preg_replace('/%'.$js_match_attr.'([|\/%])/i','%'.$match_attr.'$1',$formula,1);
+
+					$attribute->js['autoFill'] .= sprintf("  var %s;\n",$match_attr);
+					$attribute->js['autoFill'] .= sprintf(
+							"  var elem$elem_id = document.getElementById(pre+'%s'+suf);\n".
+							"  if (!elem$elem_id) return;\n", $js_match_attr);
+
+					if (strstr($match_mod,'T')) {
+						$attribute->js['autoFill'] .= sprintf("  %s = elem$elem_id.options[elem$elem_id.selectedIndex].text;\n",
+							$match_attr);
+					} else {
+						$attribute->js['autoFill'] .= sprintf("  %s = elem$elem_id.value;\n",$match_attr);
+					}
+
+					$elem_id++;
+
+					if (strstr($match_mod,'k')) {
+						preg_match_all('/([0-9]+)/',trim($match_subst),$substrarray);
+						if (isset($substrarray[1][0])) {
+							$tok_idx = $substrarray[1][0];
+						} else {
+							$tok_idx = '0';
+						}
+						$attribute->js['autoFill'] .= sprintf("   %s = %s.split(':')[%s];\n",$match_attr,$match_attr,$tok_idx);
+
+					} elseif (strstr($match_mod,'K')) {
+						preg_match_all('/([0-9]+)/',trim($match_subst),$substrarray); 
+						if (isset($substrarray[1][0])) { 
+							$tok_idx = $substrarray[1][0]; 
+						} else { 
+							$tok_idx = '0'; 
+						} 
+						$attribute->js['autoFill'] .= sprintf("   %s = %s.split(' ')[%s];\n",$match_attr,$match_attr,$tok_idx); 
+
+					} else {
+						preg_match_all('/([0-9]*)-([0-9]*)/',trim($match_subst),$substrarray);
+						if ((isset($substrarray[1][0]) && $substrarray[1][0]) || (isset($substrarray[2][0]) && $substrarray[2][0])) {
+							$attribute->js['autoFill'] .= sprintf("   %s = %s.substr(%s,%s);\n",
+								$match_attr,$match_attr,
+								$substrarray[1][0] ? $substrarray[1][0] : '0',
+								$substrarray[2][0] ? $substrarray[2][0] : sprintf('%s.length',$match_attr));
+						}
+					}
+
+					if (strstr($match_mod,'l')) {
+						$attribute->js['autoFill'] .= sprintf("   %s = %s.toLowerCase();\n",$match_attr,$match_attr);
+					}
+					if (strstr($match_mod,'U')) {
+						$attribute->js['autoFill'] .= sprintf("   %s = %s.toUpperCase();\n",$match_attr,$match_attr);
+					}
+					if (strstr($match_mod,'A')) {
+						$attribute->js['autoFill'] .= sprintf("   %s = toAscii(%s);\n",$match_attr,$match_attr);
+					}
+
+					# Matchfor only entry without modifiers.
+					$formula = preg_replace('/^%('.$match_attr.')%$/U','$1 + \'\'',$formula);
+					# Matchfor only entry with modifiers.
+					$formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?%$/U','$1 + \'\'',$formula);
+					# Matchfor begining entry.
+					$formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?%/U','$1 + \'',$formula);
+					# Matchfor ending entry.
+					$formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[KklTUA]+)?%$/U','\' + $1 ',$formula);
+					# Match for entries not at begin/end.
+					$formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[:lTUA]+)?%/U','\' + $1 + \'',$formula);
+					$attribute->js['autoFill'] .= "\n";
+				}
+
+				$attribute->js['autoFill'] .= sprintf(" fillRec(pre+'%s'+suf, %s); // %s\n",strtolower($attr),$formula,$string);
+				$attribute->js['autoFill'] .= "\n";
+				break;
+
+			default: $return = '';
+		}
+	}
+
+	/**
+	 * This functions main purpose is to discover our MUST attributes based on objectclass
+	 * definitions in the template file and to discover which of the objectclasses are
+	 * STRUCTURAL - without one, creating an entry will just product an LDAP error.
+	 */
+	private function rebuildTemplateAttrs() {
+		$server = $this->getServer();
+
+		# Collect our structural, MUST & MAY attributes.
+		$oclass_processed = array();
+		$superclasslist = array();
+		$allattrs = array();
+
+		foreach ($this->getObjectClasses() as $oclass) {
+			# If we get some superclasses - then we'll need to go through them too.
+			$supclass = true;
+			$inherited = false;
+
+			while ($supclass) {
+				$soc = $server->getSchemaObjectClass($oclass);
+
+				if ($soc->getType() == 'structural' && (! $inherited))
+					array_push($this->structural_oclass,$oclass);
+
+				# Make sure our MUST attributes are marked as such for this template.
+				if ($soc->getMustAttrs())
+					foreach ($soc->getMustAttrs() as $index => $details) {
+						$objectclassattr = $details->getName();
+
+						# We add the 'objectClass' attribute, only if it's explicitly in the template attribute list
+						if ((strcasecmp('objectClass',$objectclassattr) != 0) ||
+								((strcasecmp('objectClass',$objectclassattr) == 0) && (! is_null($this->getAttribute($objectclassattr))))) {
+
+							# Go through the aliases, and ignore any that are already defined.
+							$ignore = false;
+							$sattr = $server->getSchemaAttribute($objectclassattr);
+							foreach ($sattr->getAliases() as $alias) {
+								if ($this->isAttrType($alias,'must')) {
+									$ignore = true;
+									break;
+								}
+							}
+
+							if ($ignore)
+								continue;
+
+							$this->setAttrLDAPtype($sattr->getName(),'must');
+							$this->setMinValueCount($sattr->getName(),1);
+
+							# We need to mark the attributes as show, except for the objectclass attribute.
+							if (strcasecmp('objectClass',$objectclassattr) != 0) {
+								$attribute = $this->getAttribute($sattr->getName());
+								$attribute->show();
+							}
+						}
+
+						if (! in_array($objectclassattr,$allattrs))
+							array_push($allattrs,$objectclassattr);
+					}
+
+				if ($soc->getMayAttrs())
+					foreach ($soc->getMayAttrs() as $index => $details) {
+						$objectclassattr = $details->getName();
+						$sattr = $server->getSchemaAttribute($objectclassattr);
+
+						# If it is a MUST attribute, skip to the next one.
+						if ($this->isAttrType($objectclassattr,'must'))
+							continue;
+
+						if (! $this->isAttrType($objectclassattr,'may'))
+							$this->setAttrLDAPtype($sattr->getName(false),'optional');
+
+						if (! in_array($objectclassattr,$allattrs))
+							array_push($allattrs,$objectclassattr);
+					}
+
+				# Keep a list to objectclasses we have processed, so we dont get into a loop.
+				array_push($oclass_processed,$oclass);
+				$supoclasses = $soc->getSupClasses();
+
+				if (count($supoclasses) || count($superclasslist)) {
+					foreach ($supoclasses as $supoclass) {
+						if (! in_array($supoclass,$oclass_processed))
+							$superclasslist[] = $supoclass;
+					}
+
+					$oclass = array_shift($superclasslist);
+					if ($oclass)
+						$inherited = true;
+					else
+						$supclass = false;
+
+				} else {
+					$supclass = false;
+				}
+			}
+		}
+
+		# Check that attributes are defined by an ObjectClass
+		foreach ($this->getAttributes(true) as $index => $attribute)
+			if (! in_array($attribute->getName(),$allattrs) && (! array_intersect($attribute->getAliases(),$allattrs))
+				&& (! in_array_ignore_case('extensibleobject',$this->getObjectClasses()))) {
+				unset($this->attributes[$index]);
+
+				system_message(array(
+					'title'=>_('Automatically removed attribute from template'),
+					'body'=>sprintf('%s: %s %s',$this->getTitle(),$attribute->getName(false),_('removed from template as it is not defined by an ObjectClass')),
+					'type'=>'warn'));
+			}
+	}
+
+	/**
+	 * Return an array, that can be passed to ldap_add().
+	 * Attributes with empty values will be excluded.
+	 */
+	public function getLDAPadd($attrsOnly=false) {
+		$return = array();
+		$returnattrs = array();
+
+		if ($attrsOnly && count($returnattrs))
+			return $returnattrs;
+
+		foreach ($this->getAttributes(true) as $attribute)
+			if (! $attribute->isInternal() && count($attribute->getValues())) {
+				$return[$attribute->getName()] = $attribute->getValues();
+				$returnattrs[$attribute->getName()] = $attribute;
+			}
+
+		# Ensure that our objectclasses has "top".
+		if (isset($return['objectclass']) && ! in_array('top',$return['objectclass']))
+			array_push($return['objectclass'],'top');
+
+		if ($attrsOnly)
+			return $returnattrs;
+
+		return $return;
+	}
+
+	/**
+	 * Return an array, that can be passed to ldap_mod_replace().
+	 * Only attributes that have changed their value will be returned.
+	 *
+	 * This function will cache its results, so that it can be called with count() to see
+	 * if there are changes, and if they are, the 2nd call will just return the results
+	 *
+	 * @param boolean Return the attribute objects (useful for a confirmation process), or the modification array for ldap_modify()
+	 */
+	public function getLDAPmodify($attrsOnly=false) {
+		static $return = array();
+		static $returnattrs = array();
+
+		if ($attrsOnly && count($returnattrs))
+			return $returnattrs;
+
+		# If an objectclass is being modified, we need to remove all the orphan attributes that would result.
+		if ($this->getAttribute('objectclass')->hasBeenModified()) {
+			$attr_to_keep = array();
+			$server = $this->getServer();
+
+			# Make sure that there will be a structural object class remaining.
+			$haveStructural = false;
+			foreach ($this->getAttribute('objectclass')->getValues() as $value) {
+				$soc = $server->getSchemaObjectClass($value);
+
+				if ($soc) {
+					if ($soc->isStructural())
+						$haveStructural = true;
+
+					# While we are looping, workout which attributes these objectclasses define.
+					foreach ($soc->getMustAttrs(true) as $value)
+						if (! in_array($value->getName(),$attr_to_keep))
+							array_push($attr_to_keep,$value->getName());
+
+					foreach ($soc->getMayAttrs(true) as $value)
+						if (! in_array($value->getName(),$attr_to_keep))
+							array_push($attr_to_keep,$value->getName());
+				}
+			}
+
+			if (! $haveStructural)
+				error(_('An entry should have one structural objectClass.'),'error','index.php');
+
+			# Work out the attributes to delete.
+			foreach ($this->getAttribute('objectclass')->getRemovedValues() as $value) {
+				$soc = $server->getSchemaObjectClass($value);
+
+				foreach ($soc->getMustAttrs() as $value) {
+					$attribute = $this->getAttribute($value->getName());
+
+					if ($attribute && (! in_array($value->getName(),$attr_to_keep)) && ($value->getName() != 'objectclass'))
+						#array_push($attr_to_delete,$value->getName(false));
+						$attribute->setForceDelete();
+				}
+
+				foreach ($soc->getMayAttrs() as $value) {
+					$attribute = $this->getAttribute($value->getName());
+
+					if ($attribute && (! in_array($value->getName(),$attr_to_keep)) && ($value->getName() != 'objectclass'))
+						$attribute->setForceDelete();
+				}
+			}
+		}
+
+		foreach ($this->getAttributes(true) as $attribute)
+			if ($attribute->hasBeenModified()
+				&& (count(array_diff($attribute->getValues(),$attribute->getOldValues())) || ! count($attribute->getValues())
+					|| $attribute->isForceDelete() || (count($attribute->getValues()) != count($attribute->getOldValues()))))
+				$returnattrs[$attribute->getName()] = $attribute;
+
+		if ($attrsOnly)
+			return $returnattrs;
+
+		foreach ($returnattrs as $attribute)
+			$return[$attribute->getName()] = $attribute->getValues();
+
+		return $return;
+	}
+
+	/**
+	 * Get the attributes that are marked as force delete
+	 * We'll cache this result in the event of multiple calls.
+	 */
+	public function getForceDeleteAttrs() {
+		static $result = array();
+
+		if (count($result))
+			return $result;
+
+		foreach ($this->attributes as $attribute)
+			if ($attribute->isForceDelete())
+				array_push($result,$attribute);
+
+		return $result;
+	}
+
+	/**
+	 * Get available attributes
+	 */
+	public function getAvailAttrs() {
+		$attributes = array();
+		$server = $this->getServer();
+
+		# Initialise the Attribute Factory.
+		$attribute_factory = new AttributeFactory();
+
+		if (in_array_ignore_case('extensibleobject',$this->getObjectClasses())) {
+			foreach ($server->SchemaAttributes() as $sattr) {
+				$attribute = $attribute_factory->newAttribute($sattr->getName(),array('values'=>array()),$server->getIndex(),null);
+				array_push($attributes,$attribute);
+			}
+
+		} else {
+			$attrs = array();
+
+			foreach ($this->getObjectClasses() as $oc) {
+				$soc = $server->getSchemaObjectClass($oc);
+				$attrs = array_merge($attrs,$soc->getMustAttrNames(),$soc->getMayAttrNames());
+				$attrs = array_unique($attrs);
+			}
+
+			foreach ($attrs as $attr)
+				if (is_null($this->getAttribute($attr))) {
+					$attribute = $attribute_factory->newAttribute($attr,array('values'=>array()),$server->getIndex(),null);
+					array_push($attributes,$attribute);
+				}
+		}
+
+		masort($attributes,'name');
+		return $attributes;
+	}
+}
+?>
diff --git a/lib/TemplateCreatingEntry.php b/lib/TemplateCreatingEntry.php
deleted file mode 100644
index bbe461f..0000000
--- a/lib/TemplateCreatingEntry.php
+++ /dev/null
@@ -1,342 +0,0 @@
-templates = array();
-		$this->default_template = true;
-		$this->selected_template = '';
-	}
-
-	protected function readCreationTemplates() {
-		global $ldapserver;
-
-		if ($this->templates) return;
-		if (DEBUG_ENABLED)
-			debug_log('Entered',1,__FILE__,__LINE__,__METHOD__,1);
-
-		$this->templates = array();
-
-		# read the available templates
-		$template_xml = new Templates($ldapserver->server_id);
-		$all_templates = $template_xml->getCreationTemplates();
-		if (!$all_templates) $all_templates = array();
-
-		foreach ($all_templates as $template_name => $template_attrs) {
-			# don't select hidden templates
-			if (isset($template_attrs['visible']) && (! $template_attrs['visible'])) {
-				if (DEBUG_ENABLED)
-					debug_log('The template %s is not visible.',1,__FILE__,__LINE__,__METHOD__,1,$template_name);
-				continue;
-			}
-			# don't select invalid templates
-			if (isset($template_attrs['invalid']) && $template_attrs['invalid']) {
-				if (DEBUG_ENABLED)
-					debug_log('The template %s is invalid [%s].',1,__FILE__,__LINE__,__METHOD__,1,
-						$template_name,isset($template_attrs['invalid_reason']) ? $template_attrs['invalid_reason'] : '');
-				continue;
-			}
-			# finally add the template to the list
-			if (DEBUG_ENABLED)
-				debug_log('The template %s is available for the entry.',1,__FILE__,__LINE__,__METHOD__,1,
-					$template_name);
-			$this->templates[$template_name] = $template_attrs;
-		}
-	}
-
-	public function addDefaultTemplate() {
-		$this->default_template = true;
-	}
-
-	public function delDefaultTemplate() {
-		$this->default_template = false;
-	}
-
-	public function hasDefaultTemplate() {
-		if ($_SESSION[APPCONFIG]->GetValue('appearance','disable_default_template'))
-			return false;
-		else
-			return $this->default_template;
-	}
-
-	public function getAttributes() {
-		global $ldapserver;
-
-		# we can use a static variable if there is only one instance of this class
-		static $attrs = null;
-		static $tmpl = '';
-
-		if (DEBUG_ENABLED)
-			debug_log('Entered',1,__FILE__,__LINE__,__METHOD__,1);
-
-		if (!$this->selected_template) {
-			return parent::getAttributes();
-		} elseif (!$attrs || ($this->selected_template != $tmpl)) {
-			$attrs = array();
-			$tmpl = $this->selected_template;
-
-			# The selected template
-			$selected_tmpl = isset($this->templates[$this->selected_template])
-				? $this->templates[$this->selected_template]
-				: array();
-
-			# The objectclasses of the entry to create
-		 	if (isset($selected_tmpl['objectclass'])) {
-				$ocs = $selected_tmpl['objectclass'];
-				if (is_string($ocs) && (strlen($ocs) > 0)) $ocs = array($ocs);
-				elseif (!$ocs) $ocs = array();
-
-				foreach ($ocs as $oc) $this->addObjectClass($oc);
-			}
-
-			$template_attrs = isset($selected_tmpl['empty_attrs'])
-				? $selected_tmpl['empty_attrs']
-				: array();
-			masort($template_attrs,'page,order',1);
-
-			$attributefactoryclass = $_SESSION[APPCONFIG]->GetValue('appearance','attribute_factory');
-			eval('$attribute_factory = new '.$attributefactoryclass.'();');
-
-			if ($this->objectClasses) {
-				$attribute = $attribute_factory->newAttribute('objectClass',$this->objectClasses);
-				$attribute->setEntry($this);
-				$attribute->setRequired();
-				$attribute->hide();
-				$attrs[] = $attribute;
-			}
-
-			# Template attributes
-			foreach ($template_attrs as $attr => $params) {
-				if ($attr == 'objectClass') continue;
-				if (! is_array($params)) continue;
-				$vals = array();
-
-				if (isset($params['value'])) {
-					if (! is_array($params['value']))
-						$params['value'] = array($params['value']);
-					$arr1 = array();
-					foreach ($params['value'] as $id_parval => $parval) {
-						$arr2 = Templates::EvaluateDefault($ldapserver,$parval,
-							$this->getContainer(),null,null);
-						if (is_array($arr2)) $arr1 = array_merge($arr1,$arr2);
-						else $arr1[$id_parval] = $arr2;
-					}
-					$params['value'] = $arr1;
-					foreach ($arr1 as $default_value) {
-						$vals[] = $default_value;
-					}
-				}
-
-				if (isset($params['option'])
-					|| ( isset($params['type']) && (($params['type'] == 'select') || ($params['type'] == 'multiselect')) )) {
-
-					if (! isset($params['option'])) $params['option'] = array();
-					elseif (! is_array($params['option'])) $params['option'] = array($params['option']);
-					$arr1 = array();
-					foreach ($params['option'] as $id_parval => $parval) {
-						$arr2 = Templates::EvaluateDefault($ldapserver,$parval,
-							$this->getContainer(),null,null);
-
-						if (is_array($arr2)) $arr1 = array_merge($arr1,$arr2);
-						else $arr1[$id_parval] = $arr2;
-					}
-					$params['option'] = $arr1;
-				}
-
-				if (!isset($params['type'])) $params['type'] = 'text';
-
-				if ($params['type'] != 'text' && $params['type'] != 'password' && $params['type'] != 'textarea'
-					&& $params['type'] != 'multiselect' && $params['type'] != 'select') {
-
-					eval('$attribute = $attribute_factory->new'.$params['type'].'Attribute($attr,$vals);');
-
-				} else if ($params['type'] == 'password') {
-					$attribute = $attribute_factory->newPasswordAttribute($attr,$vals);
-
-				} elseif ($params['type'] == 'textarea') {
-					$attribute = $attribute_factory->newMultiLineAttribute($attr,$vals);
-					if (isset($params['rows']) && $params['rows']) {
-						$attribute->setRows($params['rows']);
-					}
-					if (isset($params['cols']) && $params['cols']) {
-						$attribute->setCols($params['cols']);
-					}
-
-				} elseif (isset($params['option']) && is_array($params['option'])) {
-					$attribute = $attribute_factory->newSelectionAttribute($attr,$vals);
-					if ($params['type'] == 'multiselect') {
-						$attribute->setMultiple();
-					}
-					foreach ($params['option'] as $key => $value) {
-						if (preg_match('/^_KEY:/',$key)) {
-							$key = preg_replace('/^_KEY:/','',$key);
-						} else {
-							$key = $value;
-						}
-						$attribute->addOption($key,$value);
-					}
-
-				} else {
-					$attribute = $attribute_factory->newAttribute($attr,$vals);
-				}
-
-				$attribute->setEntry($this);
-
-				foreach ($params as $param_name => $param_value) {
-					switch ($param_name) {
-						case 'minvalnb':
-							$attribute->setMinValueCount($param_value);
-							break;
-						case 'maxvalnb':
-							$attribute->setMaxValueCount($param_value);
-							break;
-						case 'icon':
-							if ($param_value) $attribute->setIcon($param_value);
-							break;
-						case 'description':
-							if ($param_value) $attribute->setDescription($param_value);
-							break;
-						case 'display':
-							if ($param_value) $attribute->setFriendlyName($param_value);
-							break;
-						case 'hint':
-							if ($param_value) $attribute->setHint($param_value);
-							break;
-						case 'size':
-							if ($param_value) $attribute->setSize($param_value);
-							break;
-						case 'maxlength':
-							if ($param_value) $attribute->setMaxLength($param_value);
-							break;
-						case 'option':
-						case 'type':
-						case 'rows':
-						case 'cols':
-						case 'readonly':
-						case 'disable':
-						case 'hidden':
-							break;
-						default:
-							// page, post, spacer, onchange
-							$attribute->setProperty($param_name, $param_value);
-							break;
-					}
-				}
-
-				if ($this->isReadOnly()
-					|| (isset($params['readonly']) && $params['readonly'])
-					|| (!isset($params['readonly']) && $ldapserver->isAttrReadOnly($attr))) {
-
-					$attribute->setReadOnly();
-				}
-
-				# has the config.php or the template specified
-				# that this attribute is to be hidden or shown ?
-				if ((isset($params['disable']) && $params['disable'])
-					|| (isset($params['hidden']) && $params['hidden'])
-					|| (!isset($params['hidden']) && $ldapserver->isAttrHidden($attr))) {
-
-					$attribute->hide();
-				}
-
-				if (isset($this->mustattrs[$attr])) {
-					$attribute->setRequired();
-				}
-
-				$attrs[] = $attribute;
-			}
-
-			// hide attributes not in template
-			foreach ($this->mustattrs as $attr_name => $objectclasses) {
-				if (isset($template_attrs[$attr_name])) continue;
-				if ($attr_name == 'objectClass') continue;
-				$vals = array();
-
-				$attribute = $attribute_factory->newAttribute($attr_name,$vals);
-				$attribute->setEntry($this);
-				$attribute->setReadOnly();
-				$attribute->setRequired();
-				$attribute->hide(); // should not be hidden because it is required
-				$attrs[] = $attribute;
-			}
-			foreach ($this->mayattrs as $attr_name => $objectclasses) {
-				if (isset($template_attrs[$attr_name])) continue;
-				if ($attr_name == 'objectClass') continue;
-				$vals = array();
-
-				$attribute = $attribute_factory->newAttribute($attr_name,$vals);
-				$attribute->setEntry($this);
-				$attribute->setReadOnly();
-				$attribute->hide();
-				$attrs[] = $attribute;
-			}
-		}
-
-		return $attrs;
-	}
-
-	public function &getTemplates() {
-		$this->readCreationTemplates();
-		return $this->templates;
-	}
-
-	public function getTemplatesCount() {
-		$this->readCreationTemplates();
-		return count($this->templates);
-	}
-
-	public function setSelectedTemplateName($name) {
-		$this->readCreationTemplates();
-		$this->setLeaf(false);
-		if (!$name || isset($this->templates[$name])) {
-			$this->selected_template = $name;
-			if (isset($this->templates[$name]['leaf']) && $this->templates[$name]['leaf'])
-				$this->setLeaf(true);
-			if (isset($this->templates[$name]['rdn']) && $this->templates[$name]['rdn'])
-				$this->setRdnAttributeName($this->templates[$name]['rdn']);
-			if (isset($this->templates[$name]['handler']) && $this->templates[$name]['handler'])
-				$this->setProperty('handler',$this->templates[$name]['handler']);
-			if (isset($this->templates[$name]['action']) && $this->templates[$name]['action'])
-				$this->setProperty('action',$this->templates[$name]['action']);
-			if (isset($this->templates[$name]['description']) && $this->templates[$name]['description'])
-				$this->setProperty('description',$this->templates[$name]['description']);
-			if (isset($this->templates[$name]['destinationcontainer']))
-				$this->setContainer($this->templates[$name]['destinationcontainer']);
-		}
-	}
-
-	public function getSelectedTemplateName() {
-		return $this->selected_template;
-	}
-
-	public function setContainer($dn) {
-		parent::setContainer($dn);
-
-		$this->readCreationTemplates();
-		foreach ($this->templates as $template_name => $template_attrs) {
-			# check the template filter
-			if (isset($template_attrs['regexp'])) {
-				if (! @preg_match('/'.$template_attrs['regexp'].'/i',$dn)) {
-					if (DEBUG_ENABLED)
-						debug_log('The container %s doesn\'t match the template %s regexp',1,__FILE__,__LINE__,__METHOD__,
-							$dn,$template_name);
-					$this->templates[$template_name]['invalid'] = true;
-				}
-			}
-		}
-	}
-}
-?>
diff --git a/lib/TemplateEditingEntry.php b/lib/TemplateEditingEntry.php
deleted file mode 100644
index 8fb8a9a..0000000
--- a/lib/TemplateEditingEntry.php
+++ /dev/null
@@ -1,335 +0,0 @@
-templates = array();
-		$this->valid = false;
-		$this->default_template = true;
-		$this->selected_template = '';
-	}
-
-	protected function readEditingTemplates() {
-		global $ldapserver;
-
-		if (DEBUG_ENABLED)
-			debug_log('Entered with ()',1,__FILE__,__LINE__,__METHOD__);
-
-		if ($this->valid) {
-			if (DEBUG_ENABLED)
-				debug_log('All templates [%s] are valid',1,__FILE__,__LINE__,__METHOD__,count($this->templates));
-			return;
-		}
-
-		$this->templates = array();
-		$this->valid = true;
-
-		# read the available templates
-		$template_xml = new Templates($ldapserver->server_id);
-		$all_templates = $template_xml->getEditingTemplates();
-		if (!$all_templates) $all_templates = array();
-
-		foreach ($all_templates as $template_name => $template_attrs) {
-			# don't select hidden templates
-			if (isset($template_attrs['visible']) && (! $template_attrs['visible'])) {
-				if (DEBUG_ENABLED)
-					debug_log('The template %s is not visible',1,__FILE__,__LINE__,__METHOD__,$template_name);
-				continue;
-			}
-			# don't select invalid templates
-			if (isset($template_attrs['invalid']) && $template_attrs['invalid']) {
-				if (DEBUG_ENABLED)
-					debug_log('The template %s is invalid [%s]',1,__FILE__,__LINE__,__METHOD__,$template_name,isset($template_attrs['invalid_reason']) ? $template_attrs['invalid_reason'] : '');
-				$this->valid = false;
-				continue;
-			}
-			# check the template filter
-			if (isset($template_attrs['regexp'])) {
-				if (! @preg_match('/'.$template_attrs['regexp'].'/i',$this->getDn())) {
-					if (DEBUG_ENABLED)
-						debug_log('The entry dn doesn\'t match the template %s regexp',1,__FILE__,__LINE__,__METHOD__,$template_name);
-					continue;
-				}
-			}
-			# finally add the template to the list
-			if (DEBUG_ENABLED)
-				debug_log('The template %s is available for the entry',1,__FILE__,__LINE__,__METHOD__,$template_name);
-			$this->templates[$template_name] = $template_attrs;
-		}
-	}
-
-	public function addDefaultTemplate() {
-		$this->default_template = true;
-	}
-
-	public function delDefaultTemplate() {
-		$this->default_template = false;
-	}
-
-	public function hasDefaultTemplate() {
-        if ($_SESSION[APPCONFIG]->GetValue('appearance','disable_default_template'))
-			return false;
-		else
-			return $this->default_template;
-	}
-
-	public function getAttributes() {
-		global $ldapserver;
-
-		static $tmpl = array();
-		static $attrs = array();
-		$dn = $this->getDn();
-
-		if (DEBUG_ENABLED)
-			debug_log('Entered with () for dn [%s]',1,__FILE__,__LINE__,__METHOD__,$dn);
-
-		if (!$this->selected_template) {
-			return parent::getAttributes();
-		} elseif (!isset($attrs[$dn]) || !isset($tmpl[$dn]) || ($this->selected_template != $tmpl[$dn])) {
-			$attrs[$dn] = array();
-			$tmpl[$dn] = $this->selected_template;
-
-			$attributefactoryclass = $_SESSION[APPCONFIG]->GetValue('appearance','attribute_factory');
-			eval('$attribute_factory = new '.$attributefactoryclass.'();');
-
-			$int_attrs_vals = $ldapserver->getDNSysAttrs($this->getDn());
-			if (! $int_attrs_vals) $attrs_vals = array();
-			elseif (! is_array($int_attrs_vals)) $int_attrs_vals = array($int_attrs_vals);
-
-			$custom_int_attrs_vals = $ldapserver->getCustomDNSysAttrs($this->getDn());
-			if (! $custom_int_attrs_vals) $attrs_vals = array();
-			elseif (! is_array($custom_int_attrs_vals)) $custom_int_attrs_vals = array($custom_int_attrs_vals);
-
-			$attrs_vals = $ldapserver->getDNAttrs($this->getDn(),false,$_SESSION[APPCONFIG]->GetValue('deref','view'));
-			if (! $attrs_vals) $attrs_vals = array();
-			elseif (! is_array($attrs_vals)) $attrs_vals = array($attrs_vals);
-
-			$custom_attrs_vals = $ldapserver->getCustomDNAttrs($this->getDn(),false,$_SESSION[APPCONFIG]->GetValue('deref','view'));
-			if (! $custom_attrs_vals) $attrs_vals = array();
-			elseif (! is_array($custom_attrs_vals)) $custom_attrs_vals = array($custom_attrs_vals);
-
-			$int_attrs_vals = array_merge($int_attrs_vals,$custom_int_attrs_vals);
-			$attrs_vals = array_merge($attrs_vals,$custom_attrs_vals);
-			$attrs_vals = array_merge($attrs_vals,$int_attrs_vals);
-
-			$selected_tmpl = isset($this->templates[$this->selected_template])
-					? $this->templates[$this->selected_template]
-					: array();
-			$template_attrs = isset($selected_tmpl['empty_attrs'])
-					? $selected_tmpl['empty_attrs']
-					: array();
-			masort($template_attrs,'page,order',1);
-
-			$objectclasses = null;
-
-			// template attributes
-			foreach ($template_attrs as $attr => $params) {
-				$vals = (isset($attrs_vals[$attr]) && $attrs_vals[$attr]) ? $attrs_vals[$attr] : array();
-				if (! is_array($vals)) $vals = array($vals);
-
-				if (isset($params['option'])
-					|| ( isset($params['type']) && (($params['type'] == 'select') || ($params['type'] == 'multiselect')) )) {
-
-					if (! isset($params['option'])) $params['option'] = array();
-					elseif (! is_array($params['option'])) $params['option'] = array($params['option']);
-
-					$arr1 = array();
-					foreach ($params['option'] as $id_parval => $parval) {
-						$arr2 = Templates::EvaluateDefault($ldapserver,$parval,$this->getDn(),null,null);
-						if (is_array($arr2)) $arr1 = array_merge($arr1,$arr2);
-						else $arr1[$id_parval] = $arr2;
-					}
-					$params['option'] = $arr1;
-				}
-
-				if (!isset($params['type'])) $params['type'] = 'text';
-
-				if ($params['type'] != 'text' && $params['type'] != 'password' && $params['type'] != 'textarea'
-					&& $params['type'] != 'multiselect' && $params['type'] != 'select') {
-
-					eval('$attribute = $attribute_factory->new'.$params['type'].'Attribute($attr,$vals);');
-
-				} else if ($params['type'] == 'password') {
-					$attribute = $attribute_factory->newPasswordAttribute($attr,$vals);
-
-				} elseif ($params['type'] == 'textarea') {
-					$attribute = $attribute_factory->newMultiLineAttribute($attr,$vals);
-
-					if (isset($params['rows']) && $params['rows']) {
-						$attribute->setRows($params['rows']);
-					}
-
-					if (isset($params['cols']) && $params['cols']) {
-						$attribute->setCols($params['cols']);
-					}
-
-				} elseif (isset($params['option']) && is_array($params['option'])) {
-					$attribute = $attribute_factory->newSelectionAttribute($attr,$vals);
-
-					if ($params['type'] == 'multiselect') {
-						$attribute->setMultiple();
-					}
-
-					foreach ($params['option'] as $key => $value) {
-						if (preg_match('/^_KEY:/',$key)) {
-							$key = preg_replace('/^_KEY:/','',$key);
-						} else {
-							$key = $value;
-						}
-						$attribute->addOption($key,$value);
-					}
-
-				} else {
-					$attribute = $attribute_factory->newAttribute($attr,$vals);
-				}
-
-				if ($attr == 'objectClass') $objectclasses = $attribute->getValues();
-				$attribute->setEntry($this);
-
-				if (isset($int_attrs_vals[$attr])) {
-					$attribute->setInternal();
-				}
-
-				foreach ($params as $param_name => $param_value) {
-					switch ($param_name) {
-						case 'minvalnb':
-							$attribute->setMinValueCount($param_value);
-							break;
-						case 'maxvalnb':
-							$attribute->setMaxValueCount($param_value);
-							break;
-						case 'icon':
-							if ($param_value) $attribute->setIcon($param_value);
-							break;
-						case 'description':
-							if ($param_value) $attribute->setDescription($param_value);
-							break;
-						case 'display':
-							if ($param_value) $attribute->setFriendlyName($param_value);
-							break;
-						case 'hint':
-							if ($param_value) $attribute->setHint($param_value);
-							break;
-						case 'size':
-							if ($param_value) $attribute->setSize($param_value);
-							break;
-						case 'maxlength':
-							if ($param_value) $attribute->setMaxLength($param_value);
-							break;
-						case 'option':
-						case 'type':
-						case 'rows':
-						case 'cols':
-						case 'readonly':
-						case 'disable':
-						case 'hidden':
-							break;
-						default:
-							# page, post, spacer, onchange
-							$attribute->setProperty($param_name,$param_value);
-							break;
-					}
-				}
-
-				if ($this->isReadOnly()
-					|| (isset($params['readonly']) && $params['readonly'])
-					|| (!isset($params['readonly']) && $ldapserver->isAttrReadOnly($attr))) {
-					$attribute->setReadOnly();
-				}
-
-				# has the config.php or the template specified
-				# that this attribute is to be hidden or shown ?
-				if ((isset($params['disable']) && $params['disable'])
-					|| (isset($params['hidden']) && $params['hidden'])
-					|| (!isset($params['hidden']) && $ldapserver->isAttrHidden($attr))) {
-					$attribute->hide();
-				}
-
-				$attrs[$dn][] = $attribute;
-			}
-
-			# Hidden attributes
-			foreach ($attrs_vals as $attr => $vals) {
-				if (isset($template_attrs[$attr])) continue;
-
-				$attribute = $attribute_factory->newAttribute($attr,$vals);
-				$attribute->setEntry($this);
-
-				if (isset($int_attrs_vals[$attr])) {
-					$attribute->setInternal();
-				}
-				if ($attr == 'objectClass') {
-					$objectclasses = $attribute->getValues();
-				}
-
-				$attribute->setReadOnly();
-				if (!$attribute->isInternal()) { # internal attributes are visible by default
-					$attribute->hide();
-				}
-				$attrs[$dn][] = $attribute;
-			}
-
-			# Required attributes
-			if ($objectclasses) {
-				$schema_oclasses = $ldapserver->SchemaObjectClasses();
-				foreach ($objectclasses as $oclass) {
-					$schema_oclass = $ldapserver->getSchemaObjectClass($oclass);
-					assert($schema_oclass);
-
-					$mustattrs = $schema_oclass->getMustAttrs($schema_oclasses);
-					if (!$mustattrs) $mustattrs = array();
-					if (!is_array($mustattrs)) $mustattrs = array($mustattrs);
-
-					foreach ($mustattrs as $mustattr) {
-						foreach ($attrs[$dn] as $attr) {
-							if ($attr->getName() == $mustattr->getName()) {
-								$attr->setRequired();
-								break;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		return $attrs[$dn];
-	}
-
-	public function &getTemplates() {
-		$this->readEditingTemplates();
-		return $this->templates;
-	}
-
-	public function getTemplatesCount() {
-		$this->readEditingTemplates();
-		return count($this->templates);
-	}
-
-	public function setSelectedTemplateName($name) {
-		$this->readEditingTemplates();
-		$this->setLeaf(false);
-		if (!$name || isset($this->templates[$name])) {
-			$this->selected_template = $name;
-			if (isset($this->templates[$name]['leaf']) && $this->templates[$name]['leaf']) $this->setLeaf(true);
-		}
-	}
-
-	public function getSelectedTemplateName() {
-		return $this->selected_template;
-	}
-}
-?>
diff --git a/lib/TemplateEntryFactory.php b/lib/TemplateEntryFactory.php
deleted file mode 100644
index 9f961be..0000000
--- a/lib/TemplateEntryFactory.php
+++ /dev/null
@@ -1,19 +0,0 @@
-
diff --git a/lib/TemplateRender.php b/lib/TemplateRender.php
new file mode 100644
index 0000000..adc2e6e
--- /dev/null
+++ b/lib/TemplateRender.php
@@ -0,0 +1,2421 @@
+%s:%s
',time(),__METHOD__); + if (DEBUGTMP||DEBUGTMPSUB) printf('* %s [Visit-Start:%s]
',__METHOD__,get_class($this)); + + $tree = get_cached_item($this->server_id,'tree'); + if (! $tree) + $tree = Tree::getInstance($this->server_id); + + $treeitem = $tree->getEntry($this->dn); + + # If we have a DN, and no template_id, see if the tree has one from last time + if ($this->dn && is_null($this->template_id) && $treeitem && $treeitem->getTemplate()) + $this->template_id = $treeitem->getTemplate(); + + # Check that we have a valid template, or present a selection + # @todo change this so that the modification templates rendered are the ones for the objectclass of the dn. + if (! $this->template_id) + $this->template_id = $this->getTemplateChoice(); + + if ($treeitem) + $treeitem->setTemplate($this->template_id); + + $this->page = get_request('page','REQUEST',false,1); + + if ($this->template_id) { + parent::accept(); + + $this->url_base = sprintf('server_id=%s&dn=%s', + $this->getServerID(),rawurlencode($this->template->getDN())); + $this->layout['hint'] = sprintf('%s%%s', + IMGDIR,_('Hint')); + $this->layout['action'] = '%s%s'; + $this->layout['actionajax'] = '%s%s'; + + # If we dont want to render this template automatically, we'll return here. + if ($norender) + return; + + $this->visitStart(); + + foreach ($this->template->getAttributes(true) as $attribute) { + # Evaluate our defaults + if ($attribute->getAutoValue()) + $this->get('Default',$attribute, + $this->template->getContainer() ? $this->template->getContainer() : $this->getServer()->getContainerPath($this->template->getDN()), + 'autovalue'); + + # If this is the default template, we should mark all our attributes to show(). + if (($this->template->getID() == 'none') && (! $attribute->isInternal()) + && (($this->template->getContext() == 'edit' && $this->template->getID() == 'none') + || ($this->template->getContext() == 'create' && $attribute->getName() != 'objectclass'))) + $attribute->show(); + } + + if (DEBUGTMP||DEBUGTMPSUB) printf('* %s [Visit-End:%s]
',__METHOD__,get_class($this)); + + $this->visitEnd(); + } + } + + protected function getDefaultAttribute($attribute,$container,$type) { + switch ($type) { + case 'autovalue': + $autovalue = $attribute->getAutoValue(); + + break; + + case 'helpervalue': + $autovalue = $attribute->getHelperValue(); + + break; + + default: + system_message(array( + 'title'=>_('Unknown Default Attribute context'), + 'body'=>sprintf('%s (%s)',_('A call was made to getDefaultAttribute() with an unkown context'),$type), + 'type'=>'warn')); + + return; + } + + $args = explode(';',$autovalue['args']); + $server = $this->getServer(); + $vals = ''; + + switch ($autovalue['function']) { + /** + * Function enables normal PHP functions to be called to evaluate a value. + * eg: =php.Function(date;dmY) + * + * All arguments will be passed to the function, and its value returned. + * If this used used in a POST context, the attribute values can be used as arguments. + * + * Mandatory Arguments: + * * arg 0 + * - php Function to call + * + * Additional arguments will be passed to the function. + */ + case 'Function': + $function = array_shift($args); + + if (count($args) && count($args) > 1) { + system_message(array( + 'title'=>_('Too many arguments'), + 'body'=>sprintf('%s (%s)',_('Function() only takes two arguments and more than two were specified'),count($args)), + 'type'=>'warn')); + + return; + } + + $function_args = explode(',',$args[0]); + + if (function_exists($function)) + $vals = call_user_func_array($function,$function_args); + + else + system_message(array( + 'title'=>_('Function doesnt exist'), + 'body'=>sprintf('%s (%s)',_('An attempt was made to call a function that doesnt exist'),$function), + 'type'=>'warn')); + + break; + + /** + * GetNextNumber will query the LDAP server and calculate the next number based on the query + * eg: + * + * Mandatory Arguments: + * * arg 0 + * - "$" => 'auto_number','search_base' in config file + * - "/",".",".." => get container parent as usual + * + * * arg 1 + * - attribute to query for + * + * Optional Arguments: + * * arg 2 (pool mechanism only) + * - "true" increments attribute by 1 + * - "false" do nothing + * + * * arg 3 (pool mechanism only) + * - ldap filter (must match one entry only in container) + * + * * arg 4 + * - calculus on number, eg: + * - *2,+1000 => number = (2*number) + 1000 + */ + case 'GetNextNumber': + # If the attribute already has values, we'll return + if ($type == 'autovalue' && $attribute->getValues()) + return; + + if ($args[0] == '$') + $args[0] = $server->getValue($this->server_id,'auto_number','search_base'); + + $container = $server->getContainerPath($container,$args[0]); + + $vals = get_next_number($container,$args[1], + (! empty($args[2]) && ($args[2] == 'false')) ? false : true, + (! empty($args[3])) ? $args[3] : false); + + # Operate calculus on next number. + if (! empty($args[4])) { + $mod = explode(',',$args[4]); + $next_number = $vals; + + foreach ($mod as $calc) { + $operand = $calc{0}; + $operator = substr ($calc,1); + + switch ($operand) { + case '*': + $next_number = $next_number * $operator; + break; + + case '+': + $next_number = $next_number + $operator; + break; + + case '-': + $next_number = $next_number - $operator; + break; + + case '/': + $next_number = $next_number / $operator; + break; + } + } + + $vals = $next_number; + } + + break; + + /** + * MultiList will query the LDAP server and provide a multi select list of values + * eg: =php.MultiList(/;(objectClass=posixAccount);uid)]]> + * + * eg: cn=root;nobody => cn=nobody;gidNumber;10;(gidNuber=%gidNumber%);uid)]]> + * + * Mandatory Arguments: + * * arg 0 + * - container, to query from current position + * - "/",".",".." => get container parent as usual + * + * * arg 1 + * - LDAP filter. May include '%attr%', it will be expanded. + * + * * arg2 + * - list attribute key + * + * Optional Arguments: + * * arg3 + * - select display (plus modifier /C: Capitalize) + * - replaced by %arg 2% if not given + * + * * arg 4 + * - the value furnished in output - must be attribute id. replaced by arg 2 if not given + * + * * arg 5 + * - container override + * + * * arg 6 + * - csv list (, separator) of added values. syntax: key => display_attribute=value; key... + * + * * arg 7 + * - csv list (, separator) of sort attributes (less to more important) + * + * * arg 8 + * - size of displayed list (default: 10 lines) + * + * * arg 9 + * - preselected values filter. see arg 1. + * + * * arg 10 + * - key of preselected values. replaced by arg 4 if not given. replaced by arg 2 if both are not given. + * + * * arg 11 + * - base dn override for preselected values + * + * @todo This could probably be merged with PickList + */ + case 'MultiList': + # arg5 overrides our container + if (empty($args[5])) + $container = $server->getContainerPath($container,$args[0]); + else + $container = $args[5]; + + # Process filter (arg 1), eventually replace %attr% by it's value setted in a previous page. + preg_match_all('/%(\w+)(\|.+)?(\/[lUC])?%/U',$args[1],$filtermatchall); + + # @todo this section needs to be validated/tested + if (isset($_REQUEST['form'])) { + $formvalues = array_change_key_case($_REQUEST['form']); + + foreach ($filtermatchall[1] as $arg) { + $value = $formvalues[strtolower($arg)]; + $args[1] = preg_replace("/%($arg)(\|.+)?(\/[lU])?%/U",$value,$args[1]); + } + } + + $args[3] = ! empty($args[3]) ? $args[3] : "%{$args[2]}%"; + + preg_match_all('/%(\w+)(\|.+)?(\/[lUC])?%/U',$args[3],$matchall); + //print_r($matchall); // -1 = highlevel match, 1 = attr, 2 = subst, 3 = mod + + $attrs = array_unique(array_merge($matchall[1],array($args[2]))); + + # arg7 is sort attributes + if (isset($args[7])) { + $sort_attrs = explode(',',$args[7]); + $attrs = array_merge($attrs,$sort_attrs); + } + + $picklistvalues = return_ldap_hash($container,$args[1],$args[2],$attrs,(isset($args[7]) && ($args[7])) ? $sort_attrs : false); + + # arg6 is a set of fixed values to add to search result + if (isset($args[6])) { + $fixedvalues = explode(',',$args[6]); + + foreach ($fixedvalues as $fixedvalue) { + if (empty($fixedvalue)) + continue; + + $fixedvalue = preg_split('/=\>/',$fixedvalue); + $displayvalue = explode('=',$fixedvalue[1]); + + $newvalue[trim($fixedvalue[0])] = array($args[2]=>trim($fixedvalue[0]), + trim($displayvalue[0])=>trim($displayvalue[1])); + + $picklistvalues = array_merge($picklistvalues,$newvalue); + } + } + + /* arg 9 is the search filter for already selected values, with criteriai eventually + coming from previous pages (eg: %uid%) */ + if (isset($args[9])) { + preg_match_all('/%(\w+)(\|.+)?(\/[lUC])?%/U',$args[9],$matchallinlist); + + foreach ($matchallinlist[1] as $arg) { + $value=$formvalues[strtolower($arg)]; + + $args[9] = preg_replace('/%('.$arg.')(\|.+)?(\/[lU])?%/U',$value,$args[9]); + } + + # arg11 overrides container dn for selected values + if (! empty($args[11])) + $container = $args[11]; + + $inpicklistvalues = return_ldap_hash($container,$args[9],$args[2],$attrs); + } + + $vals = array(); + + foreach ($picklistvalues as $key => $values) { + $display = $args[3]; + + foreach ($matchall[1] as $key => $arg) { + if (isset($values[$arg])) + $disp_val = $values[$arg]; + else + $disp_val = ''; + + if (is_array($disp_val)) + $disp_val = $disp_val[0]; + + if ($matchall[3][$key]) + switch ($matchall[3][$key]) { + case '/l': + # lowercase + if (function_exists('mb_convert_case')) + $disp_val = mb_convert_case($disp_val,MB_CASE_LOWER,'utf-8'); + else + $disp_val = strtolower($disp_val); + + break; + + case '/U': + # uppercase + if (function_exists('mb_convert_case')) + $disp_val = mb_convert_case($disp_val,MB_CASE_UPPER,'utf-8'); + else + $disp_val = strtoupper($disp_val); + + break; + + case '/C': + # capitalize + if (function_exists('mb_convert_case')) + $disp_val = mb_convert_case($disp_val,MB_CASE_TITLE,'utf-8'); + else + $disp_val = ucfirst($disp_val); + + break; + + default: + break; + } + + # make value a substring of + preg_match_all('/^\|([0-9]*)-([0-9]*)$/',trim($matchall[2][$key]),$substrarray); + + if ((isset($substrarray[1][0]) && $substrarray[1][0]) || (isset($substrarray[2][0]) && $substrarray[2][0])) { + $begin = $substrarray[1][0] ? $substrarray[1][0] : '0'; + $end = $substrarray[2][0] ? $substrarray[2][0] : strlen($disp_val); + + if (function_exists('mb_substr')) + $disp_val = mb_substr($disp_val,$begin,$end,'utf-8'); + else + $disp_val = substr($disp_val,$begin,$end); + } + + $display = preg_replace("/%($arg)(\|.+)?(\/[lUC])?%/U",$disp_val,$display); + } + + if (! isset($picklist[$values[$args[2]]])) { + $vals[$values[$args[2]]] = $display; + $picklist[$values[$args[2]]] = true; + } + } + + break; + + /** + * PasswordEncryptionTypes will return a list of our support password encryption types + * eg: =php.PasswordEncryptionTypes() + * + * This function doesnt use any arguments + */ + case 'PasswordEncryptionTypes': + $vals = password_types(); + + break; + + /** + * PickList will query the LDAP server and provide a select list of values + * eg: + * + * eg: cn=Administrators,S-1-5-XX-YYY => cn=Users,S-1-5-XX-YYY => cn=Guests,S-1-5-XX-YYY => cn=power users|cn)]]> + * + * Mandatory Arguments: + * * arg 0 + * - container, to query from current position + * - "/",".",".." => get container parent as usual + * + * * arg 1 + * - LDAP filter. + * + * * arg2 + * - list attribute key + * + * * arg3 + * - select display + * + * Optional Arguments: + * * arg4 + * - output attribute + * + * * arg5 + * - container override + * + * * arg6 + * - csv list (, separator) of added values. syntax: key => display_attribute=value; key... + * + * * arg7 + * - csv list (, separator) of sort attributes (less to more important) + */ + case 'PickList': + # arg5 overrides our container + if (empty($args[5])) + $container = $server->getContainerPath($container,$args[0]); + else + $container = $args[5]; + + # Extract the attributes to use in the display + preg_match_all('/%(\w+)(\|.+)?(\/[lU])?%/U',$args[3],$matchall); + //print_r($matchall); // -1 = highlevel match, 1 = attr, 2 = subst, 3 = mod + + $attrs = array_unique(array_merge($matchall[1],array($args[2]))); + + # The query results are sorted by arg7 + if (! empty($args[7])) { + $sort_attrs = explode(',',$args[7]); + $attrs = array_merge($attrs,$sort_attrs); + } + + $picklistvalues = return_ldap_hash($container,$args[1],$args[2],$attrs,(isset($args[7]) && ($args[7])) ? $sort_attrs : false); + + if (! empty($args[6])) { + $fixedvalues = explode(',',$args[6]); + + foreach ($fixedvalues as $fixedvalue) { + $fixedvalue = preg_split('/=\>/',$fixedvalue); + $displayvalue = explode('=',$fixedvalue[1]); + + $newvalue[trim($fixedvalue[0])] = array($args[2]=>trim($fixedvalue[0]), + trim($displayvalue[0])=>trim($displayvalue[1])); + + $picklistvalues = array_merge($picklistvalues,$newvalue); + } + } + + $vals = array(); + + foreach ($picklistvalues as $key => $values) { + $display = $args[3]; + + foreach ($matchall[1] as $arg) + if (isset($values[$arg])) + $display = preg_replace("/%($arg)(\|.+)?(\/[lU])?%/U",$values[$arg],$display); + else + $display = preg_replace("/%($arg)(\|.+)?(\/[lU])?%/U",'',$display); + + if (! isset($picklist[$values[$args[2]]])) { + $vals[$values[$args[2]]] = $display; + $picklist[$display] = true; + } + } + + break; + + /** + * RandomPassword will create a random password for the value. + * eg: =php.RandomPassword() + * + * When calling the attribute Javascript it will generate a random password. + * + * This function doesnt use any arguments + */ + case 'RandomPassword': + break; + } + + switch ($type) { + case 'autovalue': + if (! is_array($vals)) + $attribute->autoValue(array($vals)); + else + $attribute->autoValue($vals); + + break; + + case 'helpervalue': + return $vals; + } + } + + /** + * Set the mode of the TemplateRender + * Applicable modes are "create" or "edit" + */ + protected function getMode() { + if ($this->dn) + return 'modification'; + elseif ($this->container) + return 'creation'; + else + debug_dump_backtrace(sprintf('Unknown mode for %s',__METHOD__),1); + } + + /** + * Is the default template enabled? + */ + protected function haveDefaultTemplate() { + if ($_SESSION[APPCONFIG]->getValue('appearance','disable_default_template')) + return false; + else + return true; + } + + /** + * Present a list of available templates for creating and editing LDAP entries + */ + protected function drawTemplateChoice() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $this->drawTitle(); + $this->drawSubTitle(); + echo "\n"; + + switch ($this->getMode()) { + case 'creation': + $msg = _('Select a template for the creation process'); + break; + + case 'modification': + $msg = _('Select a template to edit the entry'); + break; + } + + $avail_templates = $this->getTemplates(); + $templates = $avail_templates->getTemplates($this->getMode()); + printf('

%s

',$msg); + + $href_parms = array_to_query_string($_GET,array('meth')); + printf('
',htmlspecialchars($href_parms)); + echo "\n\n"; + + foreach ($_POST as $p => $v) + printf('',$p,$v); + echo "\n\n"; + + echo ''; + echo ''; + printf('',_('Templates')); + echo ''; + + echo '
%s:'; + echo ''; + + $i = -1; + $nb_templates = count($templates); + + if ($this->haveDefaultTemplate()) + $nb_templates++; + + foreach ($templates as $name => $details) { + $i++; + + $isInValid = $details->isInValid(); + + if (($regexp = $details->getRegExp()) + && (($this->getMode() == 'creation' && ! @preg_match('/'.$regexp.'/i',$this->container)) + || ($this->getMode() == 'modification' && ! @preg_match('/'.$regexp.'/i',$this->dn)))) + $isInValid = _('This template is not valid in this container'); + + # Balance the columns properly + if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || + ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { + echo '
'; + } + + echo "\n"; + echo ''; + + if ($isInValid) + printf('',IMGDIR); + + else { + if (isAjaxEnabled()) + printf('', + htmlspecialchars($details->getID()),htmlspecialchars($details->getID()),htmlspecialchars($href_parms),$details->getID(),_('Retieving DN')); + else + printf('', + htmlspecialchars($details->getID()),htmlspecialchars($details->getID())); + } + + printf('', + htmlspecialchars($details->getID()),$details->getIcon()); + printf(''; + echo ''; + } + echo "\n"; + + # Default template + if ($this->haveDefaultTemplate()) { + $i++; + + # Balance the columns properly + if (($nb_templates % 2 == 0 && $i == intval($nb_templates / 2)) || + ($nb_templates % 2 == 1 && $i == intval($nb_templates / 2) + 1)) { + echo '
Error
'; + } + + echo ''; + if (isAjaxEnabled()) + printf('', + htmlspecialchars($href_parms),'none',_('Retieving DN')); + else + echo ''; + + printf('',IMGDIR); + printf('',_('Default')); + echo ''; + } + + echo '
'; + echo '
'; + echo '
'; + } + + /** VISIT METHODS **/ + + /** + * This function will setup our template object (read LDAP for current values, read $_REQUEST for new values, etc) + * so that it can be rendered. + */ + private function visitStart() { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUG_ENABLED) + debug_log('Entered',1,__FILE__,__LINE__,__METHOD__); + + # If we have a DN, then we are an editing template + if ($this->dn) + $this->template->setDN(get_request('dn','REQUEST')); + + # Else if we have a container, we are a creating template + elseif ($this->container) + $this->template->setContainer(get_request('container','REQUEST')); + + else + debug_dump_backtrace('Dont know what type of template we are - no DN or CONTAINER?',1); + + # Header + $this->drawHeader(); + } + + private function visitEnd() { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$this->template->getDN()); + + foreach ($this->template->getAttributesShown() as $attribute) + if ($attribute->getPage() > $this->pagelast) + $this->pagelast = $attribute->getPage(); + echo "\n\n"; + + if ($this->template->getContext() == 'create') { + $this->drawStepTitle($this->page); + $this->drawStepFormStart($this->page); + $this->drawStepForm($this->page); + $this->drawStepFormEnd(); + + } else { + # Draw internal attributes + if (get_request('show_internal_attrs','REQUEST')) { + echo ''; + $this->drawInternalAttributes(); + echo '

'; + echo "\n"; + } + + $this->drawFormStart(); + + # To support our AJAX add Attribute + printf('
','none'); + + $this->drawForm(); + $this->drawStepFormEnd(); + } + } + + /** PAGE DRAWING METHODS **/ + + private function drawHeader() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + # Title + $this->drawTitle(); + $this->drawSubTitle(); + echo "\n"; + + # Menu + $this->drawMenu(); + } + + public function drawTitle($title=null) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (is_null($title)) + switch ($this->getMode()) { + case 'creation': + $title = _('Create Object'); + break; + + case 'modification': + $title = get_rdn($this->dn); + break; + + default: + $title = 'Title'; + } + + parent::drawTitle($title); + } + + public function drawSubTitle($subtitle=null) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $subtitle = ''; + + switch ($this->getMode()) { + case 'creation': + $subtitle .= sprintf('%s: %s   %s: %s', + _('Server'),$this->getServer()->getName(), + _('Container'),$this->container); + + if ($this->template_id) { + $subtitle .= '
'; + $subtitle .= sprintf('%s: %s',('Template'),$this->template->getID() != 'none' ? $this->template->getTitle() : _('Default')); + if ($this->template->getName()) + $subtitle .= sprintf(' (%s)',$this->template->getName(false)); + } + + break; + + case 'modification': + $subtitle = sprintf('%s: %s   %s: %s', + _('Server'),$this->getServer()->getName(), + _('Distinguished Name'),$this->dn); + + if ($this->template_id) { + $subtitle .= '
'; + $subtitle .= sprintf('%s: %s',('Template'),$this->template->getID() != 'none' ? $this->template->getTitle() : _('Default')); + if ($this->template->getName()) + $subtitle .= sprintf(' (%s)',$this->template->getName(false)); + } + + break; + } + + parent::drawSubTitle($subtitle); + } + + /** PAGE ENTRY MENU **/ + + private function drawMenu() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + # We only have a menu for editing entries. + if ($this->template->getContext() == 'edit') { + + echo ''; + echo ''; + $menuitem_number = 0; + + foreach (array('entryrefresh','showinternal','switchtemplate','entryexport','entrycopy','entrydelete','entryrename','entrycompare','childcreate','addattr','msgdel','childview','childexport','msgschema','msgro','msgmodattr') as $item) { + $item = $this->getMenuItem($item); + + if ($item) { + $endofrow = false; + $start = true; + $it = ''; // menu item + $ms = ''; // item message + + if (is_array($item) && count($item) > 0) { + $it = $item[0]; + + if (count($item) > 1) + $ms = $item[1]; + + } else { + $it = $item; + } + + if ($it) { + $menuitem_number++; + echo $it; + + if ($ms) { + if (($menuitem_number % 2) == 1) { + $menuitem_number++; + echo ''; + $endofrow = false; + $start = false; + } + + if ($endofrow) + print $ms; + else + echo "$ms"; + + echo ''; + $endofrow = true; + $start = false; + + } else { + if ($menuitem_number > 1 && ($menuitem_number % 2) == 0) { + echo ''; + $endofrow = true; + $start = false; + } + } + + } elseif ($ms) { + if (($menuitem_number % 2) == 1) { + $menuitem_number++; + echo ''; + $endofrow = false; + $start = false; + } + + if ($endofrow || $start) + print $ms; + else + echo "$ms"; + + echo ''; + $endofrow = true; + $start = false; + } + + echo "\n"; + } + } + + if (($menuitem_number % 2) == 1) + echo ''; + else + echo ''; + + echo ''; + echo ''; + } + } + + /** PAGE ENTRY MENU ITEMS **/ + + private function getMenuItem($i) { + if (DEBUGTMP) printf('%s (%s)
',__METHOD__,$i); + + switch ($i) { + case 'entryrefresh': + if ($_SESSION[APPCONFIG]->isCommandAvailable('entry_refresh')) + return $this->getMenuItemRefresh(); + else + return ''; + + case 'switchtemplate': + return $this->getMenuItemSwitchTemplate(); + + case 'entryexport': + if ($_SESSION[APPCONFIG]->isCommandAvailable('script','export_form')) + return $this->getMenuItemExportBase(); + else + return ''; + + case 'entrycopy': + if ($_SESSION[APPCONFIG]->isCommandAvailable('script','copy_form') && ! $this->template->isReadOnly()) + return $this->getMenuItemMove(); + else + return ''; + + case 'showinternal': + if ($_SESSION[APPCONFIG]->isCommandAvailable('entry_internal_attributes_show')) + return $this->getMenuItemInternalAttributes(); + else + return ''; + + case 'entrydelete': + if ($_SESSION[APPCONFIG]->isCommandAvailable('script','delete_form') && ! $this->template->isReadOnly()) + return $this->getMenuItemDelete(); + else + return ''; + + case 'entryrename': + if ($_SESSION[APPCONFIG]->isCommandAvailable('entry_rename') && ! $this->template->isReadOnly()) { + + # Check if any of the RDN's are read only. + $rdnro = false; + foreach ($this->template->getRDNAttributeName() as $attr) { + $attribute = $this->template->getAttribute($attr); + + if ($attribute && $attribute->isVisible() && ! $attribute->isReadOnly()) { + $rdnro = true; + break; + } + } + + if (! $rdnro) + return $this->getMenuItemRename(); + } + + return ''; + + case 'msgdel': + if ($_SESSION[APPCONFIG]->getValue('appearance','show_hints') + && $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete') && ! $this->template->isReadOnly()) + return array('',$this->getDeleteAttributeMessage()); + else + return ''; + + case 'entrycompare': + if ($_SESSION[APPCONFIG]->isCommandAvailable('entry_compare') && ! $this->template->isReadOnly()) + return $this->getMenuItemCompare(); + else + return ''; + + case 'childcreate': + if ($_SESSION[APPCONFIG]->isCommandAvailable('entry_create') && ! $this->template->isReadOnly()) + return $this->getMenuItemCreate(); + else + return ''; + + case 'addattr': + if ($_SESSION[APPCONFIG]->isCommandAvailable('attribute_add') && ! $this->template->isReadOnly()) + return $this->getMenuItemAddAttribute(); + else + return ''; + + case 'childview': + case 'childexport': + static $children_count = false; + static $more_children = false; + + $tree = get_cached_item($this->getServerID(),'tree'); + $tree_item = $tree->getEntry($this->template->getDN()); + + if (! $tree_item) { + $tree->addEntry($this->template->getDN()); + $tree_item = $tree->getEntry($this->template->getDN()); + } + + if ($children_count === false) { + # Visible children in the tree + $children_count = count($tree_item->getChildren()); + # Is there filtered children ? + $more_children = $tree_item->isSizeLimited(); + + if (! $children_count || ! $more_children) { + # All children in ldap + $all_children = $this->getServer()->getContainerContents( + $this->template->getDN(),null,$children_count+1,'(objectClass=*)',$_SESSION[APPCONFIG]->getValue('deref','view'),null); + + $more_children = (count($all_children) > $children_count); + } + } + + if ($children_count > 0 || $more_children) { + if ($children_count <= 0) + $children_count = ''; + if ($more_children) + $children_count .= '+'; + + if ($i == 'childview') + return $this->getMenuItemShowChildren($children_count); + elseif ($i == 'childexport' && $_SESSION[APPCONFIG]->isCommandAvailable('export')) + return $this->getMenuItemExportSub(); + else + return ''; + + } else + return ''; + + case 'msgschema': + if ($_SESSION[APPCONFIG]->getValue('appearance','show_hints') && $_SESSION[APPCONFIG]->isCommandAvailable('schema')) + return array('',$this->getViewSchemaMessage()); + else + return array(); + + case 'msgro': + if ($this->template->isReadOnly()) + return array('',$this->getReadOnlyMessage()); + else + return array(); + + case 'msgmodattr': + $modified_attrs = array(); + $modified = get_request('modified_attrs','REQUEST',false,array()); + + foreach ($this->template->getAttributes(true) as $attribute) + if (in_array($attribute->getName(),$modified)) + array_push($modified_attrs,$attribute->getFriendlyName()); + + if (count($modified_attrs)) + return array('',$this->getModifiedAttributesMessage($modified_attrs)); + else + return array(); + + default: + return false; + } + } + + protected function getDeleteAttributeMessage() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if ($_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete_value') && ! $this->template->isReadOnly()) + return sprintf($this->layout['hint'],_('Hint: To delete an attribute, empty the text field and click save.')); + else + return ''; + } + + protected function getModifiedAttributesMessage(&$modified_attributes) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + return sprintf($this->layout['hint'], + (count($modified_attributes) == 1) ? + sprintf(_('An attribute (%s) was modified and is highlighted below.'),implode('',$modified_attributes)) : + sprintf(_('Some attributes (%s) were modified and are highlighted below.'),implode(', ',$modified_attributes))); + } + + protected function getReadOnlyMessage() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + return sprintf($this->layout['hint'],_('Viewing entry in read-only mode.')); + } + + protected function getViewSchemaMessage() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + return sprintf($this->layout['hint'],_('Hint: To view the schema for an attribute, click the attribute name.')); + } + + /** PAGE ENTRY MENU ITEMS DETAILS **/ + + private function getMenuItemRefresh() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=template_engine&%s&junk=%s',$this->url_base,random_junk()); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'refresh.png',_('Refresh'), + htmlspecialchars($href),_('Refresh this entry'),htmlspecialchars($href),_('Reloading'),_('Refresh')); + else + return sprintf($this->layout['action'],IMGDIR,'refresh.png',_('Refresh'), + htmlspecialchars($href),_('Refresh this entry'),_('Refresh')); + } + + protected function getMenuItemSwitchTemplate() { + $href = sprintf('cmd=template_engine&%s&template=',$this->url_base); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'catalog.png',_('Switch Template'), + htmlspecialchars($href),_('Change to another template'),htmlspecialchars($href),_('Loading'),_('Switch Template')); + else + return sprintf($this->layout['action'],IMGDIR,'catalog.png',_('Switch Template'), + htmlspecialchars($href),_('Change to another template'),_('Switch Template')); + } + + protected function getMenuItemExportBase() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=export_form&%s&scope=base',$this->url_base); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'save.png',_('Export'), + htmlspecialchars($href),_('Save a dump of this object'),htmlspecialchars($href),_('Loading'),_('Export')); + else + return sprintf($this->layout['action'],IMGDIR,'save.png',_('Export'), + htmlspecialchars($href),_('Save a dump of this object'),_('Export')); + } + + private function getMenuItemMove() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=copy_form&%s',$this->url_base); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'cut.png',_('Cut'), + htmlspecialchars($href),_('Copy this object to another location, a new DN, or another server'), + htmlspecialchars($href),_('Loading'),_('Copy or move this entry')); + else + return sprintf($this->layout['action'],IMGDIR,'cut.png',_('Cut'), + htmlspecialchars($href),_('Copy this object to another location, a new DN, or another server'), + _('Copy or move this entry')); + } + + protected function getMenuItemInternalAttributes() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (get_request('show_internal_attrs','REQUEST')) { + $href = sprintf('cmd=template_engine&%s&junk=',$this->url_base,random_junk()); + + return sprintf($this->layout['action'],IMGDIR,'tools-no.png',_('Hide'), + htmlspecialchars($href),'',_('Hide internal attributes')); + + } else { + $href = sprintf('cmd=template_engine&show_internal_attrs=true&%s',$this->url_base); + + return sprintf($this->layout['action'],IMGDIR,'tools.png',_('Show'), + htmlspecialchars($href),'',_('Show internal attributes')); + } + } + + private function getMenuItemDelete() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=delete_form&%s',$this->url_base); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'trash.png',_('Trash'), + htmlspecialchars($href),_('You will be prompted to confirm this decision'), + htmlspecialchars($href),_('Loading'),_('Delete this entry')); + else + return sprintf($this->layout['action'],IMGDIR,'trash.png',_('Trash'), + htmlspecialchars($href),_('You will be prompted to confirm this decision'),_('Delete this entry')); + } + + protected function getMenuItemRename() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=rename_form&%s&template=%s',$this->url_base,$this->template->getID()); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'rename.png',_('Rename'), + htmlspecialchars($href),_('Rename this entry'),htmlspecialchars($href),_('Loading'),_('Rename')); + else + return sprintf($this->layout['action'],IMGDIR,'rename.png',_('Rename'), + htmlspecialchars($href),_('Rename this entry'),_('Rename')); + } + + protected function getMenuItemCompare() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=compare_form&%s',$this->url_base); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'compare.png',_('Compare'), + htmlspecialchars($href),_('Compare this entry with another'), + htmlspecialchars($href),_('Loading'),_('Compare with another entry')); + else + return sprintf($this->layout['action'],IMGDIR,'compare.png',_('Compare'), + htmlspecialchars($href),_('Compare this entry with another'),_('Compare with another entry')); + } + + protected function getMenuItemCreate() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=template_engine&server_id=%s&container=%s',$this->getServerID(),rawurlencode($this->template->getDN())); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'star.png',_('Create'), + htmlspecialchars($href),_('Create a child entry'), + htmlspecialchars($href),_('Loading'),_('Create a child entry')); + else + return sprintf($this->layout['action'],IMGDIR,'star.png',_('Create'), + htmlspecialchars($href),_('Create a child entry'),_('Create a child entry')); + } + + protected function getMenuItemAddAttribute() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (! $this->template->getAvailAttrs()) + return ''; + + $href = sprintf('cmd=add_attr_form&%s',$this->url_base); + $layout = '%s%s'; + + if (isAjaxEnabled()) + return sprintf($layout,IMGDIR,'add.png',_('Add'), + htmlspecialchars($href),_('Add new attribute to this object'), + htmlspecialchars($href),_('Add new attribute'),_('Add new attribute')); + else + return sprintf($this->layout['action'],IMGDIR,'add.png',_('Add'), + htmlspecialchars($href),_('Add new attribute to this object'),_('Add new attribute')); + } + + protected function getMenuItemShowChildren($children_count) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=query_engine&server_id=%s&filter=%s&base=%s&scope=one&query=none', + $this->getServerID(),rawurlencode('objectClass=*'),rawurlencode($this->template->getDN())); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'children.png',_('Children'), + htmlspecialchars($href),_('View the children of this object'), + htmlspecialchars($href),_('Loading'), + ($children_count == 1) ? _('View 1 child') : sprintf(_('View %s children'),$children_count)); + else + return sprintf($this->layout['action'],IMGDIR,'children.png',_('Children'), + htmlspecialchars($href),_('View the children of this object'), + ($children_count == 1) ? _('View 1 child') : sprintf(_('View %s children'),$children_count)); + } + + protected function getMenuItemExportSub() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=export_form&%s&scope=%s',$this->url_base,'sub'); + + if (isAjaxEnabled()) + return sprintf($this->layout['actionajax'],IMGDIR,'save.png',_('Save'), + htmlspecialchars($href),_('Save a dump of this object and all of its children'), + htmlspecialchars($href),_('Loading'),_('Export subtree')); + else + return sprintf($this->layout['action'],IMGDIR,'save.png',_('Save'), + htmlspecialchars($href),_('Save a dump of this object and all of its children'),_('Export subtree')); + } + + /** CHOOSERS **/ + + /** + * RDN Chooser + */ + protected function drawRDNChooser() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (! count($this->template->getRDNAttrs())) { + printf('%s','RDN'); + + echo '
'; + + } else { + echo ''; + foreach ($this->template->getRDNAttrs() as $rdn) + printf('',htmlspecialchars($rdn)); + echo ''; + } + } + + /** + * Container Chooser + */ + protected function drawContainerChooser($default_container) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + echo ''; + printf('%s',_('Container')); + printf('',htmlspecialchars($default_container)); + draw_chooser_link('entry_form.container'); + echo ''; + echo ''; + } + + /** + * Object Class Chooser + */ + protected function drawObjectClassChooser() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $socs = $this->getServer()->SchemaObjectClasses(); + if (! $socs) + $socs = array(); + + echo ''; + printf('%s',_('ObjectClasses')); + echo ''; + echo ''; + echo ''; + + if ($_SESSION[APPCONFIG]->getValue('appearance','show_hints')) { + printf(' Hint',IMGDIR); + echo _('Hint: You must choose exactly one structural objectClass (shown in bold above)'); + echo '
'; + } + } + + /** INTERNAL ATTRIBUTES **/ + + protected function drawInternalAttributes() { + if ($this->template->getAttributesInternal()) + foreach ($this->template->getAttributesInternal() as $attribute) + $this->draw('Internal',$attribute); + else + printf('(%s)
',_('No internal attributes')); + + echo "\n"; + } + + protected function drawInternalAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $this->draw('Template',$attribute); + } + + /** FORM METHODS **/ + + public function drawFormStart() { + echo '
'; + + if ($_SESSION[APPCONFIG]->getValue('confirm','update')) + echo ''; + else + echo ''; + } + + protected function drawForm() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + printf('',$this->getServerID()); + printf('',htmlspecialchars($this->template->getDN())); + printf('',$this->template->getID()); + + echo ''; + + $this->drawShownAttributes(); + $this->drawFormSubmitButton(); + + echo '
'; + + $this->drawHiddenAttributes(); + } + + public function drawFormEnd() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + echo '
'; + + # Javascript + $this->drawJavascript(); + + # For debugging, show the template object. + if (! $_SESSION[APPCONFIG]->getValue('appearance','hide_debug_info') && get_request('debug','GET')) { + echo "\n\n"; + printf('Plus',IMGDIR); + echo ''; + } + } + + public function drawFormSubmitButton() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (! $this->template->isReadOnly()) + printf('
',_('Update Object')); + } + + /** STEP FORM METHODS **/ + + private function drawStepTitle($page) { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUGTMP||DEBUGTMPSUB) printf('* %s [templateNAME:%s]
',__METHOD__,$this->template->getName()); + + # The default template needs to ask the user for objectClasses. + if ($this->template->isType('default')) { + # The default template only uses 2 pages + $this->pagelast = 2; + + echo '

'; + printf('%s: ',sprintf(_('Step %s of %s'),$page,$this->pagelast)); + + if ($page == 1) + echo _('Container and ObjectClass(es)'); + else + echo _('Specify attributes and values'); + + echo '

'; + + } elseif ($this->template->getDescription()) + printf('

%s (%s)

', + _($this->template->getDescription()), + sprintf(_('Step %s of %s'),$page,$this->pagelast)); + } + + private function drawStepFormStart($page) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (($this->template->isType('default') && $this->template->getContext() == 'create' && $page == 1) || $page < $this->pagelast) { + echo '
'; + + } else { + echo ''; + + if ($_SESSION[APPCONFIG]->getValue('confirm','create')) + echo ''; + else + echo ''; + } + } + + protected function drawStepForm($page) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + printf('',$this->getServerID()); + printf('',$this->template->getID()); + printf('',$page+1); + + $this->drawHiddenAttributes(); + + if ($this->template->isType('default') && $page == 1) { + echo ''; + + $this->drawContainerChooser($this->template->getContainer()); + $this->drawObjectClassChooser(); + + } else { + printf('',htmlspecialchars($this->template->getContainer())); + + echo '
'; + + $this->drawRDNChooser(); + + if ($this->template->isType('default') && $this->template->getContext() == 'create') + $this->drawStepFormDefaultAttributes(); + else + $this->drawShownAttributes(); + } + + $this->drawStepFormSubmitButton($page); + + echo '
'; + } + + private function drawStepFormEnd() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $this->drawFormEnd(); + } + + private function drawStepFormSubmitButton($page) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + echo ''; + if ($page < $this->pagelast) + printf(' ',_('Proceed >>')); + else + printf('
',_('Create Object')); + echo ''; + } + + /** + * Given our known objectClass in the template, this will render the required MAY and optional MUST attributes + */ + private function drawStepFormDefaultAttributes() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + # Put required attributes first + $attrs = array(); + $attrs['required'] = array(); + $attrs['optional'] = array(); + foreach ($this->template->getAttributes(true) as $attribute) { + # Skip the objectclass attribute, we already know it in a default creation form. + if ($attribute->getName() == 'objectclass') + continue; + + if ($attribute->isRequired()) + array_push($attrs['required'],$attribute); + + elseif (! $attribute->getValues()) + array_push($attrs['optional'],$attribute); + } + + printf('%s',_('Required Attributes')); + if (count($attrs['required'])) + foreach ($attrs['required'] as $attribute) + $this->draw('Template',$attribute); + + else + printf('
(%s)
',_('none')); + + printf('%s',_('Optional Attributes')); + if (count($attrs['optional'])) + foreach ($attrs['optional'] as $attribute) + $this->draw('Template',$attribute); + + else + printf('
(%s)
',_('none')); + + echo "\n"; + } + + /** DRAW ATTRIBUTES **/ + + private function drawShownAttributes() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + foreach ($this->template->getAttributesShown() as $attribute) + if (($attribute->getPage() == $this->page) && ($attribute->isRequired() || $attribute->isMay())) { + $this->draw('Template',$attribute); + echo "\n"; + } + } + + /** DRAW PAGE JAVACRIPT */ + + protected function drawJavascript() { + if (DEBUGTMP) printf('%s
',__METHOD__); + + echo "\n"; + printf('',__METHOD__); + echo "\n"; + + printf('',JSDIR); + echo "\n"; + + printf('',__METHOD__); + echo ' +'; + echo "\n"; + printf('',__METHOD__); + echo "\n"; + + $this->drawTemplateJavascript(); + + # If we have a DateAttribute, we need to set some defaults for the js_calendar. + if (isset($_SESSION[APPCONFIG])) { + foreach ($this->template->getAttributesShown() as $attribute) { + if (array_key_exists($attribute->getName(),array_change_key_case($_SESSION[APPCONFIG]->getValue('appearance','date_attrs')))) { + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo "\n"; + + break; + } + } + } + + foreach ($this->template->getAttributesShown() as $attribute) + $this->draw('Javascript',$attribute); + + echo ''."\n"; + printf('',__METHOD__); + echo "\n"; + } + + /** + * Javascript Functions + */ + private function drawTemplateJavascript() { + printf('',__METHOD__); + echo "\n"; + foreach ($this->template->getAttributes(true) as $attribute) + if ($onchange = $attribute->getOnChange()) + if (is_array($onchange)) + foreach ($onchange as $value) + $this->template->OnChangeAdd($attribute->getName(),$value); + else + $this->template->OnChangeAdd($attribute->getName(),$onchange); + printf('',__METHOD__); + echo "\n"; + + printf('',__METHOD__); + + echo ' +'; + echo "\n"; + printf('',__METHOD__); + echo "\n"; + } + + /** ATTRIBUTE TITLE **/ + + protected function drawTitleAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (($this->template->getContext() == 'edit') + && ($attribute->hasBeenModified() || in_array($attribute->getName(),get_request('modified_attrs','REQUEST',false,array())))) + echo ''; + else + echo ''; + + echo ''; + $this->draw('Name',$attribute); + echo ''; + + echo ''; + + # Setup the $attr_note, which will be displayed to the right of the attr name (if any) + if ($_SESSION[APPCONFIG]->getValue('appearance','show_attribute_notes')) + $this->draw('Notes',$attribute); + + echo ''; + echo ''; + } + + /** ATTRIBUTE LINE **/ + + protected function drawStartValueLineAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (($this->template->getContext() == 'edit') + && ($attribute->hasBeenModified() || in_array($attribute->getName(),get_request('modified_attrs','REQUEST',false,array())))) + echo ''; + else + echo ''; + + echo ''; + } + + protected function drawEndValueLineAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + echo ''; + echo ''; + + if ($attribute->getSpacer()) + echo ' '; + + if (($this->template->getContext() == 'edit') + && ($attribute->hasBeenModified() || in_array($attribute->getName(),get_request('modified_attrs','REQUEST',false,array())))) + echo ''; + } + + protected function drawTemplateAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $this->draw('Title',$attribute); + $this->draw('TemplateValues',$attribute); + } + + protected function drawTemplateValuesAttribute($attribute) { + if (DEBUGTMP) printf('%s:%s
',time(),__METHOD__); + + $this->draw('StartValueLine',$attribute); + + # Draws values + $value_count = $attribute->getValueCount(); + for ($i=0;$i<$value_count;$i++) + $this->draw('Value',$attribute,$i); + + if (! $attribute->isInternal()) { + $blankvalue_count = $attribute->getMaxValueCount(); + if ($blankvalue_count < 0) + $blankvalue_count = 1; + + $blankvalue_count -= $value_count; + + for ($j=0;$j<$blankvalue_count;$j++) + $this->draw('Value',$attribute,$i+$j); + + if (($value_count == $blankvalue_count) || ($value_count && $blankvalue_count < 1)) + $this->draw('Menu',$attribute); + } + + $this->draw('EndValueLine',$attribute); + echo "\n"; + } + + /** DRAW ICONS FOR ATTRIBUTES VALUES **/ + + protected function drawIconAttribute($attribute,$val) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (is_dn_string($val) || $this->getServer()->isDNAttr($attribute->getName())) + $this->draw('DnValueIcon',$attribute,$val); + elseif (is_mail_string($val)) + $this->draw('MailValueIcon',$attribute,$val); + elseif (is_url_string($val)) + $this->draw('UrlValueIcon',$attribute,$val); + + else { + $icon = $attribute->getIcon(); + + if ($icon) + printf('Icon ',$icon); + } + } + + protected function drawDnValueIconAttribute($attribute,$val) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (strlen($val) <= 0) + printf('Go ',IMGDIR); + elseif ($this->getServer()->dnExists($val)) + printf('Go ', + $this->getServerID(),rawurlencode($val),_('Go to'),$val,IMGDIR); + else + printf('Go ',_('DN not available'),$val,IMGDIR); + } + + protected function drawMailValueIconAttribute($attribute,$val) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $img = sprintf('%s',IMGDIR,_('Mail')); + if (strlen($val) <= 0) + echo $img; + else + printf('%s',htmlspecialchars($val),$img); + echo ' '; + } + + protected function drawUrlValueIconAttribute($attribute,$val) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $img = sprintf('%s',IMGDIR,_('URL')); + $url = explode(' +',$val,2); + + if (strlen($val) <= 0) + echo $img; + else + printf('%s',htmlspecialchars($url[0]),$img); + echo ' '; + } + + /** DEFAULT ATTRIBUTE RENDERING **/ + + /** javacript */ + + protected function drawJavascriptAttribute($attribute) { + if (! $attribute->needJS()) { + printf('',$attribute->getName()); + echo "\n"; + return; + } + + printf('',__METHOD__,$attribute->getName()); + echo "\n"; + + echo ''."\n"; + + printf('',__METHOD__,$attribute->getName()); + echo "\n"; + } + + protected function getFocusJavascriptAttribute($attribute,$component) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + return ''; + } + + protected function getBlurJavascriptAttribute($attribute,$component) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $j = "\t".'fill('.$component.'.id,pla_getComponentValue('.$component.'));'."\n"; + $j .= "\t".'validate_'.$attribute->getName().'('.$component.',false);'."\n"; + + return $j; + } + + protected function drawFocusJavascriptAttribute($attribute,$component) { + echo $this->get('FocusJavascript',$attribute,$component); + } + + protected function drawBlurJavascriptAttribute($attribute,$component) { + echo $this->get('BlurJavascript',$attribute,$component); + } + + protected function drawFillJavascriptAttribute($attribute,$component_id,$component_value) { + if ($attribute->needJS('validate')) + printf("\tvalidate_%s(pla_getComponentById(%s),false);\n",$attribute->getName(),$component_id); + } + + protected function drawValidateJavascriptAttribute($attribute,$component,$silence,$var_valid) { + printf('var vals = getAttributeValues("new","%s");',$attribute->getName()); + echo 'if (vals.length <= 0) {'; + printf('%s = false;',$var_valid); + printf('alertError("%s: %s",%s);',_('This attribute is required'),$attribute->getFriendlyName(),$silence); + echo '}'; + echo "\n"; + + printf('var comp = getAttributeComponents("new","%s");',$attribute->getName()); + echo 'for (var i = 0; i < comp.length; i++) {'; + printf('comp[i].style.backgroundColor = "%s";',$var_valid ? 'white' : '#FFFFA0'); + echo '}'; + } + + /** ATTRIBUTE MENU **/ + + protected function drawMenuAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $item = ''; + + echo ''; + echo ''; + echo '
 '; + foreach (array('add','modify','rename') as $action) + if ($item = $this->get('MenuItem',$attribute,$action)) + printf('
%s
',$item); + echo '
'; + } + + protected function getMenuItemAttribute($attribute,$action) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + # If there is no DN, then this is a creating entry. + if (($this->template->getContext() == 'create') || $this->template->isReadOnly()) + return false; + + switch ($action) { + case 'add': + if ($attribute->isVisible() && ! $attribute->isReadOnly() + && $_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value')) { + + if ($attribute->haveMoreValues()) + return $this->get('AddValueMenuItem',$attribute); + } + + return ''; + + case 'modify': + if (in_array($attribute->getName(),arrayLower($_SESSION[APPCONFIG]->getValue('modify_member','groupattr')))) { + if ($attribute->isVisible() && ! $attribute->isReadOnly() && ! $attribute->isRDN() + && ($_SESSION[APPCONFIG]->isCommandAvailable('attribute_add_value') + || $_SESSION[APPCONFIG]->isCommandAvailable('attribute_delete_value'))) + return $this->get('ModifyMemberMenuItem',$attribute); + } + + return ''; + + case 'rename': + if ($attribute->isVisible() && $attribute->isRDN() && ! $attribute->isReadOnly() + && $_SESSION[APPCONFIG]->isCommandAvailable('entry_rename')) + return $this->get('RenameMenuItem',$attribute); + + return ''; + + default: + return false; + } + } + + protected function getAddValueMenuItemAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href_parm = htmlspecialchars(sprintf('cmd=add_value_form&server_id=%s&dn=%s&attr=%s', + $this->getServerID(),rawurlencode($this->template->getDN()),rawurlencode($attribute->getName(false)))); + + if (isAjaxEnabled()) + return sprintf('(%s)', + $href_parm,_('Add an additional value to attribute'),$attribute->getName(false),$attribute->getName(), + $href_parm,_('Add Value to Attribute'),_('add value')); + else + return sprintf('(%s)', + $href_parm,_('Add an additional value to attribute'),$attribute->getName(false),_('add value')); + } + + protected function getModifyMemberMenuItemAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd=modify_member_form&server_id=%s&dn=%s&attr=%s', + $this->getServerID(),rawurlencode($this->template->getDN()),rawurlencode($attribute->getName())); + + if (isAjaxEnabled()) + return sprintf('(%s)', + htmlspecialchars($href),_('Modify members for'),$this->template->getDN(), + htmlspecialchars($href),_('Modify group membership'), + _('modify group members')); + else + return sprintf('(%s)', + htmlspecialchars($href),_('Modify members for'),$this->template->getDN(),_('modify group members')); + } + + protected function getRenameMenuItemAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $href = sprintf('cmd.php?cmd=rename_form&server_id=%s&dn=%s&template=%s', + $this->getServerID(),rawurlencode($this->template->getDN()),$this->template->getID()); + + return sprintf('(%s)',htmlspecialchars($href),_('rename')); + } + + /** values **/ + + protected function drawValueAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%d)',1,__FILE__,__LINE__,__METHOD__,$attribute->getName(),$i); + + $val = $attribute->getValue($i); + + if ($attribute->isVisible()) { + echo ''; + + echo ''; + + echo '
'; + $this->draw('Icon',$attribute,$val); + echo ''; + } + + if ($attribute->isInternal()) + $this->draw('FormReadOnlyValue',$attribute,$i); + else + $this->draw('FormValue',$attribute,$i); + + if ($attribute->isVisible()) { + echo ''; + $this->draw('RequiredSymbol',$attribute); + echo '
'; + } + echo "\n"; + } + + # @todo for userPasswords, we need to capture the default value of select lists, without specifying + protected function drawHelperAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $params = $attribute->getHelper(); + + # We take the first only + $id = isset($params['id']) ? $params['id'] : ''; + if (is_array($id)) { + system_message(array( + 'title'=>_('Too many arguments'), + 'body'=>sprintf('%s (%s)',_('Helper attribute has too many ID values, only the first one is used'),count($id)), + 'type'=>'warn')); + + $id = $id[0]; + } + + # We take the first only + $display = isset($params['display']) ? $params['display'] : ''; + if (is_array($display)) { + system_message(array( + 'title'=>_('Too many arguments'), + 'body'=>sprintf('%s (%s)',_('Helper attribute has too many DISPLAY values, only the first one is used'),count($display)), + 'type'=>'warn')); + + $display = $display[0]; + } + + # We take the first only + $default = isset($params['default']) ? $params['default'] : ''; + if (is_array($default)) { + system_message(array( + 'title'=>_('Too many arguments'), + 'body'=>sprintf('%s (%s)',_('Helper attribute has too many DISPLAY values, only the first one is used'),count($default)), + 'type'=>'warn')); + + $default = $default[0]; + } + + if ($attribute->getHelperValue()) + $vals = $this->get('Default',$attribute, + $this->template->getContainer() ? $this->template->getContainer() : $this->getServer()->getContainerPath($this->template->getDN()), + 'helpervalue'); + else + $vals = isset($params['value']) ? $params['value'] : ''; + + if ($this->template->getContext() == 'create') + $dn = $this->template->getContainer(); + else + $dn = $this->template->getDN(); + + if (is_array($vals) && count($vals) > 0) { + $found = false; + + printf(''; + + } else { + # Vals must be an empty array. + if (is_array($vals)) + $vals = ''; + + printf('', + $id,htmlspecialchars($attribute->getName()),$i, + $id,htmlspecialchars($attribute->getName()),$i, + htmlspecialchars($vals)); + } + + if ($display) { + echo '
'; + printf('%s',$display); + echo '
'; + } + } + + protected function drawRequiredSymbolAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if ($attribute->isRequired() && ! $attribute->isReadOnly()) + echo '*'; + } + + /** BINARY ATTRIBUTE RENDERING **/ + + #@todo do we need a $this->drawJavascriptAttribute($attribute) here too ? + protected function drawJavascriptBinaryAttribute($attribute) { + # If there are no values, then this javascript doesnt need to be drawn. + if (! $attribute->getValues()) + return; + + static $drawn = false; + + # This JS may have been rendered by multiple Binary attributes + if ($drawn) + return; + else + $drawn = true; + + printf('',__METHOD__,$attribute->getName()); + echo "\n"; + + echo ''; + echo ''; + printf('',$this->getServerID()); + printf('',htmlspecialchars($this->template->getDN())); + printf('',$this->template->getID()); + echo ''; + echo ''; + echo ''; + + echo ' +'; + echo "\n"; + + printf('',__METHOD__,$attribute->getName()); + echo "\n"; + } + + /** DATE ATTRIBUTE RENDERING **/ + + protected function drawJavaScriptDateAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + printf('',__METHOD__,$attribute->getName()); + echo "\n"; + + $this->drawJavaScriptAttribute($attribute); + + static $drawn = false; + + # This JS may have been rendered by multiple Date attributes + if (! $drawn) { + printf('',JSDIR); + printf('',JSDIR); + printf('',JSDIR); + + $drawn = true; + } + + $config = array(); + $config['date'] = array_change_key_case($_SESSION[APPCONFIG]->getValue('appearance','date_attrs')); + $config['time'] = array_change_key_case($_SESSION[APPCONFIG]->getValue('appearance','date_attrs_showtime')); + $config['format'] = $_SESSION[APPCONFIG]->getValue('appearance','date'); + + if (isset($config['date'][$attribute->getName()])) + $config['format'] = $config['date'][$attribute->getName()]; + + for ($i=0;$i<=$attribute->getValueCount();$i++) { + printf('',$attribute->getName(),$i,$config['format']); + + if (in_array_ignore_case($attribute->getName(),array_keys($config['time'])) && ($config['time'][$attribute->getName()])) + printf('',$attribute->getName(),$i,'true'); + + echo "\n"; + } + + printf('',__METHOD__,$attribute->getName()); + echo "\n"; + } + + /** + * Draws an HTML date selector button which, when clicked, pops up a date selector dialog. + */ + protected function drawSelectorPopupDateAttribute($attribute,$i) { + printf('Calendar', + $attribute->getName(),$i,_('Click to popup a dialog to select a date graphically'),IMGDIR,$attribute->getName(),$i); + } + + /** DN ATTRIBUTES **/ + + protected function drawIconDnAttribute($attribute,$val) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + $this->draw('DnValueIcon',$attribute,$val); + } + + /** OBJECT CLASS ATTRIBUTE **/ + + protected function drawIconObjectClassAttribute($attribute,$val) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (strlen($val) > 0) { + $href = sprintf('cmd.php?cmd=schema&server_id=%s&view=objectclasses&viewvalue=%s', + $this->getServerID(),$val); + printf('Info ', + htmlspecialchars($href),_('View the schema description for this objectClass'),IMGDIR); + } + } + + /** PASSWORD ATTRIBUTES **/ + + protected function drawJavascriptPasswordAttribute($attribute) { + static $drawn = false; + + # This JS may have been rendered by multiple Binary attributes + if ($drawn) + return; + else + $drawn = true; + + printf('',__METHOD__,$attribute->getName()); + echo "\n"; + + $this->drawJavascriptAttribute($attribute); + + # Add the javascript so we can call check password later. + echo ' +'; + echo "\n"; + + printf('',__METHOD__,$attribute->getName()); + echo "\n"; + } + + protected function drawCheckLinkPasswordAttribute($attribute,$component_id) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + printf('%s...
', + $component_id,_('Check password')); + } + + /** RANDOM PASSWORD **/ + + /** + * This will draw the javascript that displays to the user the random password generated + * + * @todo This function doesnt work well if there are more than 1 RandomPasswordAttributes on the form for the same attribute (unlikely situation) + */ + protected function drawJavascriptRandomPasswordAttribute($attribute) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + printf("\n\n",__METHOD__); + $this->drawJavascriptPasswordAttribute($attribute); + + $pwd = password_generate(); + $pwd = str_replace("\\","\\\\",$pwd); + $pwd = str_replace("'","\\'",$pwd); + + printf("\n\n",__METHOD__); + echo ''; + printf("\n\n",__METHOD__); + } + + protected function drawDefaultHelperPasswordAttribute($attribute,$i) { + $id = 'enc'; + + if ($val = $attribute->getValue($i)) + $default = get_enc_type($val); + else + $default = $this->getServer()->getValue('appearance','password_hash'); + + if (! $attribute->getPostValue()) + printf('',$attribute->getName(),$i); + + printf(''; + } + + /** SELECTION ATTRIBUTE RENDERING **/ + + protected function drawIconSelectionAttribute($attribute,$val) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + if (! $attribute->isMultiple() || $attribute->isReadOnly()) + $this->drawIconAttribute($attribute,$val); + } + + protected function getMenuItemSelectionAttribute($attribute,$i) { + if (DEBUGTMP) printf('%s
',__METHOD__); + + switch ($i) { + case 'add': + if (! $attribute->isMultiple()) + return $this->getMenuItemAttribute($attribute,$i); + else + return ''; + + case 'modify': + return ''; + + default: + return $this->getMenuItemAttribute($attribute,$i); + } + } +} +?> diff --git a/lib/Tree.php b/lib/Tree.php index 08a1237..c5af3d2 100644 --- a/lib/Tree.php +++ b/lib/Tree.php @@ -1,51 +1,99 @@ Entry + # Server that this tree represents + private $server_id = null; + # List of entries in the tree view cache protected $entries = array(); - // list of entries which are not visible in the tree view - // array : dn -> (true|false) - protected $misses = array(); - - // ldap server id represented by this tree - protected $server_id = -1; + /** + * Displays the LDAP tree + */ + abstract public function draw(); protected function __construct($server_id) { $this->server_id = $server_id; } + /** + * Create an instance of the tree - this is used when we call this class directly + * Tree::getInstance($index) + * + * @return object Tree + */ static public function getInstance($server_id) { $tree = get_cached_item($server_id,'tree'); - if (!$tree) { - $ldapserver = $_SESSION[APPCONFIG]->ldapservers->Instance($server_id); - if (!$ldapserver) return null; - $treeclass = $_SESSION[APPCONFIG]->GetValue('appearance','tree'); + if (! $tree) { + $server = $_SESSION[APPCONFIG]->getServer($server_id); + + if (! $server) + return null; + + $treeclass = $_SESSION[APPCONFIG]->getValue('appearance','tree'); eval('$tree = new '.$treeclass.'($server_id);'); - foreach ($ldapserver->getBaseDN() as $baseDn) - if ($baseDn) - $tree->addEntry($baseDn); + # If we are not logged in, just return the empty tree. + if (is_null($server->getLogin(null))) + return $tree; + + foreach ($server->getBaseDN(null) as $base) + if ($base) + $tree->addEntry($base); set_cached_item($server_id,'tree','null',$tree); } + return $tree; } - public function getLdapServer() { - return $_SESSION[APPCONFIG]->ldapservers->Instance($this->server_id); + /** + * Get the Server ID for this tree + * + * @return int Server ID that this tree is for + */ + protected function getServerID() { + return $this->server_id; + } + + /** + * Get the server Object for this tree + * + * @return object Server Object for this tree + */ + protected function getServer() { + return $_SESSION[APPCONFIG]->getServer($this->server_id); + } + + /** + * Get the entries that are BaseDN entries. + * + * @return array Base DN entries + */ + public function getBaseEntries() { + $return = array(); + + foreach ($this->entries as $details) + if ($details->isBaseDN()) + array_push($return,$details); + + return $return; } /** @@ -56,9 +104,12 @@ abstract class Tree { * uid=User A,ou=People,c=AU and * uid=User B, ou=PeOpLe, c=au * are infact in the same branch, but PLA will show them inconsistently. + * + * @param dn DN to clean + * @return dn Lowercase clean DN */ - public function indexDN($dn) { - $index = strtolower(join(',',pla_explode_dn($dn))); + private function indexDN($dn) { + $index = strtolower(implode(',',pla_explode_dn($dn))); if (DEBUG_ENABLED) debug_log('Entered with (%s), Result (%s)',1,__FILE__,__LINE__,__METHOD__,$dn,$index); @@ -67,122 +118,11 @@ abstract class Tree { } /** - * Add an entry in the tree view ; the entry is added in the - * children array of its parent + * Get a tree entry * - * The added entry is created using the factory class defined - * in $_SESSION[APPCONFIG]->custom->appearance['entry_factory'] - * - * @param $dn the dn of the entry to create + * @param dn DN to retrieve + * @return object Tree DN object */ - public function addEntry($dn) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); - - $ldapserver = $_SESSION[APPCONFIG]->ldapservers->Instance($this->server_id); - - # We need to convert the DN to lower case, to avoid any case problems and strip any unnessary spaces after commas. - $dnlower = $this->indexDN($dn); - - # If the parent entry is not in the tree, we add it - $bases = $ldapserver->getBaseDN(); - - if (! $bases) - $bases = array(''); - elseif (! is_array($bases)) - $bases = array($bases); - - if (DEBUG_ENABLED) - debug_log('Got BaseDNs (%s)',64,__FILE__,__LINE__,__METHOD__,$bases); - - $parent_entry = null; - if (! in_array_ignore_case($dn,$bases)) { - $parent_dn = get_container($dn); - - if (DEBUG_ENABLED) - debug_log('Parent DNs (%s)',64,__FILE__,__LINE__,__METHOD__,$parent_dn); - - if ($parent_dn) { - $parent_entry = $this->getEntry($parent_dn); - if (! $parent_entry) { - $this->addEntry($parent_dn); - $parent_entry = $this->getEntry($parent_dn); - } - } else { - if (DEBUG_ENABLED) - debug_log('NO parent, entry (%s) ignored.',64,__FILE__,__LINE__,__METHOD__,$dn); - } - } - - if (isset($this->entries[$dnlower])) - unset($this->entries[$dnlower]); - - # If this DN is in our miss list, we can remove it now. - if (isset($this->misses[$dnlower])) - unset($this->misses[$dnlower]); - - $entryfactoryclass = $_SESSION[APPCONFIG]->GetValue('appearance','entry_factory'); - eval('$entry_factory = new '.$entryfactoryclass.'();'); - if (DEBUG_ENABLED) - debug_log('New ENTRY (%s) for (%s).',64,__FILE__,__LINE__,__METHOD__,$dnlower,$dn); - $this->entries[$dnlower] = $entry_factory->newEditingEntry($dn); - - $this->entries[$dnlower]->setTree($ldapserver->server_id); - if ($ldapserver->isReadOnly()) - $this->entries[$dnlower]->setReadOnly(); - - # Update this DN's parent's children list as well. - if ($parent_entry) - $parent_entry->addChild($dn); - - if (DEBUG_ENABLED) - debug_log('Leaving (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); - } - - /** - * Delete an entry from the tree view ; the entry is deleted from the - * children array of its parent - */ - public function delEntry($dn) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); - - $dnlower = $this->indexDN($dn); - if (isset($this->entries[$dnlower])) unset($this->entries[$dnlower]); - - # Delete entry from parent's children as well. - $parent_dn = get_container($dn); - $parent_entry = $this->getEntry($parent_dn); - if ($parent_entry) $parent_entry->delChild($dn); - - # Might be worthwhile adding it to our miss list, while we are here. - $this->misses[$dnlower] = true; - } - - public function renameEntry($oldDn, $newDn) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__,$oldDn,$newDn); - - $olddnlower = $this->indexDN($oldDn); - $newdnlower = $this->indexDN($newDn); - - $this->entries[$newdnlower] = $this->entries[$olddnlower]; - unset($this->entries[$olddnlower]); - $this->entries[$newdnlower]->rename($newDn); - - # Might be worthwhile adding it to our miss list, while we are here. - $this->misses[$olddnlower] = true; - if (isset($this->misses[$newdnlower])) unset($this->misses[$newdnlower]); - - # Update the parent's children - $parent_dn = get_container($newDn); - $parent_entry = $this->getEntry($parent_dn); - if ($parent_entry) { - $parent_entry->delChild($oldDn); - $parent_entry->addChild($newDn); - } - } - public function getEntry($dn) { $dnlower = $this->indexDN($dn); @@ -192,15 +132,188 @@ abstract class Tree { return null; } - public function isMissed($dn) { + /** + * Add an entry in the tree view ; the entry is added in the + * children array of its parent + * + * @param dn DN to add + * @param string $dn the dn of the entry to create + */ + public function addEntry($dn) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); + + $server = $this->getServer(); $dnlower = $this->indexDN($dn); - return isset($this->misses[$dnlower]) && $this->misses[$dnlower]; + if (! ($dn = $server->dnExists($dn))) + return; + + if (isset($this->entries[$dnlower])) + debug_dump_backtrace('Calling add entry to an entry that ALREADY exists?',1); + + if (DEBUG_ENABLED) + debug_log('New ENTRY (%s).',64,__FILE__,__LINE__,__METHOD__,$dn); + + $tree_factory = new TreeItem($server->getIndex(),$dn); + $tree_factory->setObjectClasses($server->getDNAttrValue($dn,'objectClass')); + + $this->entries[$dnlower] = $tree_factory; + + # Is this entry in a base entry? + if (in_array_ignore_case($dn,$server->getBaseDN(null))) { + $this->entries[$dnlower]->setBase(); + + # If the parent entry is not in the tree, we add it. This routine will in itself + # recall this method until we get to the top of the tree (the base). + } else { + $parent_dn = $server->getContainer($dn); + + if (DEBUG_ENABLED) + debug_log('Parent DNs (%s)',64,__FILE__,__LINE__,__METHOD__,$parent_dn); + + if ($parent_dn) { + $parent_entry = $this->getEntry($parent_dn); + + if (! $parent_entry) { + $this->addEntry($parent_dn); + $parent_entry = $this->getEntry($parent_dn); + } + + # Update this DN's parent's children list as well. + $parent_entry->addChild($dn); + } + } } /** - * Displays the LDAP tree + * Delete an entry from the tree view ; the entry is deleted from the + * children array of its parent + * + * @param dn DN to remote */ - abstract public function draw(); + public function delEntry($dn) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); + + $server = $this->getServer(); + $dnlower = $this->indexDN($dn); + + if (isset($this->entries[$dnlower])) + unset($this->entries[$dnlower]); + + # Delete entry from parent's children as well. + $parent_dn = $server->getContainer($dn); + $parent_entry = $this->getEntry($parent_dn); + + if ($parent_entry) + $parent_entry->delChild($dn); + } + + /** + * Rename an entry in the tree + * + * @param dn Old DN + * @param dn New DN + */ + public function renameEntry($dnOLD,$dnNEW) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__,$dnOLD,$dnNEW); + + $server = $this->getServer(); + $dnlowerOLD = $this->indexDN($dnOLD); + $dnlowerNEW = $this->indexDN($dnNEW); + + $this->entries[$dnlowerNEW] = $this->entries[$dnlowerOLD]; + unset($this->entries[$dnlowerOLD]); + $this->entries[$dnlowerNEW]->rename($dnNEW); + + # Update the parent's children + $parentNEW = $server->getContainer($dnNEW); + $parentOLD = $server->getContainer($dnOLD); + + $parent_entry = $this->getEntry($parentNEW); + if ($parent_entry) + $parent_entry->addChild($dnNEW); + + $parent_entry = $this->getEntry($parentOLD); + if ($parent_entry) + $parent_entry->delChild($dnOLD); + } + + /** + * Read the children of a tree entry + * + * @param dn DN of the entry + * @param boolean LDAP Size Limit + */ + public function readChildren($dn,$nolimit=false) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__,$dn,$nolimit); + + $server = $this->getServer(); + $dnlower = $this->indexDN($dn); + + if (! isset($this->entries[$dnlower])) + debug_dump_backtrace('Reading children on an entry that isnt set? '.$dnlower,true); + + $ldap['child_limit'] = $nolimit ? 0 : $_SESSION[APPCONFIG]->getValue('search','size_limit'); + $ldap['filter'] = $_SESSION[APPCONFIG]->getValue('appearance','tree_filter'); + $ldap['deref'] = $_SESSION[APPCONFIG]->getValue('deref','tree'); + + # Perform the query to get the children. + $ldap['children'] = $server->getContainerContents($dn,null,$ldap['child_limit'],$ldap['filter'],$ldap['deref']); + + if (! count($ldap['children'])) { + $this->entries[$dnlower]->unsetSizeLimited(); + + return; + } + + if (DEBUG_ENABLED) + debug_log('Children of (%s) are (%s)',64,__FILE__,__LINE__,__METHOD__,$dn,$ldap['children']); + + # Relax our execution time, it might take some time to load this + if ($nolimit) + @set_time_limit($_SESSION[APPCONFIG]->getValue('search','time_limit')); + + foreach ($ldap['children'] as $child) { + if (DEBUG_ENABLED) + debug_log('Adding (%s)',64,__FILE__,__LINE__,__METHOD__,$child); + + if (! in_array($child,$this->entries[$dnlower]->getChildren())) + $this->entries[$dnlower]->addChild($child); + } + + if (count($this->entries[$dnlower]->getChildren()) == $ldap['child_limit']) + $this->entries[$dnlower]->setSizeLimited(); + else + $this->entries[$dnlower]->unsetSizeLimited(); + + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s), Returning ()',1,__FILE__,__LINE__,__METHOD__,$dn,$nolimit); + } + + /** + * Return the number of children an entry has. Optionally autoread the child entry. + * + * @param dn DN of the entry + * @param boolean LDAP Size Limit + */ + protected function readChildrenNumber($dn,$nolimit=false) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__,$dn,$nolimit); + + $dnlower = $this->indexDN($dn); + + if (! isset($this->entries[$dnlower])) + debug_dump_backtrace('Reading children on an entry that isnt set?',true); + + # Read the entry if we havent got it yet. + if (! $this->entries[$dnlower]->isLeaf() && ! $this->entries[$dnlower]->getChildren()) + $this->readChildren($dn,$nolimit); + + return count($this->entries[$dnlower]->getChildren()); + } } ?> diff --git a/lib/TreeItem.php b/lib/TreeItem.php new file mode 100644 index 0000000..68d608b --- /dev/null +++ b/lib/TreeItem.php @@ -0,0 +1,217 @@ +server_id = $server_id; + $this->dn = $dn; + } + + /** + * Get the DN of this tree item. + * + * @return DN The DN of this item. + */ + public function getDN() { + return $this->dn; + } + + /** + * Get the RDN of this tree items DN. + * + * @return RDN The RDN of this items DN. + */ + public function getRDN() { + return get_rdn($this->getDn(),0,true); + } + + /** + * Set this item as a LDAP base DN item. + */ + public function setBase() { + $this->base_entry = true; + } + + /** + * Return if this item is a base DN item. + */ + public function isBaseDN() { + return $this->base_entry; + } + + public function setObjectClasses($oc) { + $this->objectclasses = $oc; + } + + public function getObjectClasses() { + return $this->objectclasses; + } + + public function isInLDAP() { + return count($this->objectclasses) ? true : false; + } + + /** + * Returns null if the children have never be defined + * or an array of the dn of the children + */ + public function getChildren() { + return $this->children; + } + + /** + * Add a child to this DN entry. + * + * @param DN The DN to add. + */ + public function addChild($dn) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); + + if (in_array($dn,$this->children)) + return; + + array_push($this->children,$dn); + usort($this->children,'pla_compare_dns'); + + if (DEBUG_ENABLED) + debug_log('Entered with (%s), Leaving ()',1,__FILE__,__LINE__,__METHOD__,$dn); + } + + /** + * Delete a child from this DN entry. + * + * @param DN The DN to add. + */ + public function delChild($dn) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); + + if ($this->children) { + # If the parent hasnt been opened in the tree, then there wont be any children. + $index = array_search($dn,$this->children); + + if ($index !== false) + unset($this->children[$index]); + } + } + + /** + * Rename this DN. + * + * @param DN The DN to rename to. + */ + public function rename($dn) { + $this->dn = $dn; + } + + /** + * Return if this item has been opened. + */ + public function isOpened() { + return $this->open; + } + + /** + * Mark this node as closed. + */ + public function close() { + $this->open = false; + } + + /** + * Opens the node ; the children of the node must have been defined + */ + public function open() { + $this->open = true; + } + + /** + * Mark this node as a leaf. + */ + public function setLeaf() { + $this->leaf = true; + } + + /** + * Return if this node is a leaf. + */ + public function isLeaf() { + return $this->leaf; + } + + /** + * Returns the path of the icon file used to represent this node ; + * If the icon hasnt been set, it will call get_icon() + */ + public function getIcon() { + if (! $this->icon) + $this->icon = get_icon($this->server_id,$this->dn,$this->objectclasses); + + return $this->icon; + } + + /** + * Mark this node as a size limited (it wont have all its children). + */ + public function setSizeLimited() { + $this->size_limited = true; + } + + /** + * Clear the size limited flag. + */ + public function unsetSizeLimited() { + $this->size_limited = false; + } + + /** + * Return if this node has hit an LDAP size limit (and thus doesnt have all its children). + */ + public function isSizeLimited() { + return $this->size_limited; + } + + public function setTemplate($template) { + $this->template = $template; + } + + public function getTemplate() { + return $this->template; + } +} +?> diff --git a/lib/Visitor.php b/lib/Visitor.php index 0571ab8..806ba92 100644 --- a/lib/Visitor.php +++ b/lib/Visitor.php @@ -2,78 +2,104 @@ // $Header /** - * @package phpLDAPadmin - * @author The phpLDAPadmin development team - * @author Xavier Bruyet + * Classes and functions for the template engines. * - * Visit an entry and its attributes and perform a treatment - * @see EntryReader - * @see EntryWriter + * @author The phpLDAPadmin development team + * @package phpLDAPadmin */ -class Visitor { + +/**/ +# To make it easier to debug this script, define these constants, which will add some __METHOD__ location displays to the rendered text. +define('DEBUGTMP',0); +define('DEBUGTMPSUB',0); + +/** + * Abstract Visitor class + * + * @package phpLDAPadmin + * @subpackage Templates + */ +abstract class Visitor { + # The server that was used to configure the templates + protected $server_id; + public function __call($method,$args) { + if (! in_array($method,array('get','visit','draw'))) + debug_dump_backtrace(sprintf('Incorrect use of method loading [%s]',$method),1); + $methods = array(); - $class = ''; - $fnct = ''; - $a0 = isset($args[0]) ? $args[0] : ''; - for ($i = 0; $i < strlen($a0); $i++) { - if ($class) { - if ($a0[$i] != ':') $fnct .= $a0[$i]; + $fnct = array_shift($args); - } else { - if ($a0[$i] != ':') { - $fnct .= $a0[$i]; - } else { - $class = $fnct; - $fnct = ''; - } - } - } + $object = $args[0]; + $class = get_class($object); - $obj = isset($args[1]) ? $args[1] : null; - if (! $obj) { - if (DEBUG_ENABLED) - debug_log('null param (%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__,$method,$class,$fnct); - return; - } + $call = "$method$fnct$class"; - if (! $class) - $class = get_class($obj); - - if (DEBUG_ENABLED) - $c = $class; - - $call = "$method$class$fnct"; array_push($methods,$call); while ($class && ! method_exists($this,$call)) { + if (defined('DEBUGTMP') && DEBUGTMP) + printf('Class (%s): Method doesnt exist (%s,%s)
',$class,get_class($this),$call); + $class = get_parent_class($class); - $call = "$method$class$fnct"; + $call = "$method$fnct$class"; array_push($methods,$call); } - if (defined('TMPDEBUG') && TMPDEBUG) - printf('Calling Methods: %s
',join('|',$methods)); + if (defined('DEBUGTMP') && DEBUGTMP) + printf('Calling Methods: %s
',implode('|',$methods)); - if (defined('TMPDEBUG') && TMPDEBUG && method_exists($this,$call)) - printf('Invoking Method: %s::%s
',get_class($this),$call); + if (defined('DEBUGTMP') && DEBUGTMP && method_exists($this,$call)) + printf('Method Exists: %s::%s (%s)
',get_class($this),$call,$args); + + if (method_exists($this,$call)) { + $call .= '('; + + for ($i = 0; $i < count($args); $i++) + if ($i == 0) + $call .= sprintf('$args[%s]',$i); + else + $call .= sprintf(',$args[%s]',$i); - if ($class) { - $call .= '($obj'; - for ($i = 2; $i < count($args); $i++) { - $call .= ',$args['.$i.']'; - } $call .= ');'; + if (defined('DEBUGTMP') && DEBUGTMP) + printf('Invoking Method: $this->%s
',$call); + eval('$r = $this->'.$call); - if (isset($r)) return $r; - else return; + if (isset($r)) + return $r; + else + return; } elseif (DEBUG_ENABLED) { - debug_log('Doesnt exist param (%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__,$method,$c,$fnct); + debug_log('Doesnt exist param (%s,%s)',1,__FILE__,__LINE__,__METHOD__,$method,$fnct); } + + printf('NO Methods: %s
',implode('|',$methods)); + } + + /** + * Return the LDAP server ID + * + * @return int Server ID + */ + public function getServerID() { + if (isset($this->server_id)) + return $this->server_id; + else + return null; + } + + /** + * Return this LDAP Server object + * + * @return object DataStore Server + */ + protected function getServer() { + return $_SESSION[APPCONFIG]->getServer($this->getServerID()); } } ?> diff --git a/lib/blowfish.php b/lib/blowfish.php index 8c48aec..4ea9e68 100644 --- a/lib/blowfish.php +++ b/lib/blowfish.php @@ -1,5 +1,5 @@ - * @version $Revision: 1.4.2.1 $ + * @version $Revision$ * @since Horde 2.2 * @package horde.cipher */ @@ -442,7 +442,7 @@ class Horde_Cipher_blowfish { if (! is_array($unpack)) error( sprintf('BLOWFISH: decryptBock()
We expected unpack to produce an array, but instead it produced [%s]. This function was entered with (%s,%s). If you think that this is a bug, then please tell the PLA developers how you got here. You are using PLA [%s,%s]', - serialize($unpack),rawurlencode($block),$key,pla_version(),phpversion()),'error','index.php'); + serialize($unpack),$block,$key,app_version(),phpversion()),'error','index.php'); list($L, $R) = array_values($unpack); diff --git a/lib/common.php b/lib/common.php index 6ad22a7..edf3d85 100644 --- a/lib/common.php +++ b/lib/common.php @@ -1,5 +1,5 @@ CheckCustom(); } @@ -156,70 +186,74 @@ if (! isset($_SESSION[APPCONFIG])) { if (ini_get('safe_mode') && ! get_request('cmd','GET')) system_message(array( 'title'=>_('PHP Safe Mode'), - 'body'=>_('You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode.'), + 'body'=>_('You have PHP Safe Mode enabled. This application may work unexpectedly in Safe Mode.'), 'type'=>'info')); # Set our timezone, if it is specified in config.php -if ($_SESSION[APPCONFIG]->GetValue('appearance','timezone')) - date_default_timezone_set($_SESSION[APPCONFIG]->GetValue('appearance','timezone')); +if ($_SESSION[APPCONFIG]->getValue('appearance','timezone')) + date_default_timezone_set($_SESSION[APPCONFIG]->getValue('appearance','timezone')); # If we are here, $_SESSION is set - so enabled DEBUGing if it has been configured. -if (($_SESSION[APPCONFIG]->GetValue('debug','syslog') || $_SESSION[APPCONFIG]->GetValue('debug','file')) - && $_SESSION[APPCONFIG]->GetValue('debug','level')) +if (($_SESSION[APPCONFIG]->getValue('debug','syslog') || $_SESSION[APPCONFIG]->getValue('debug','file')) + && $_SESSION[APPCONFIG]->getValue('debug','level')) define('DEBUG_ENABLED',1); else define('DEBUG_ENABLED',0); if (DEBUG_ENABLED) debug_log('Application (%s) initialised and starting with (%s).',1,__FILE__,__LINE__,__METHOD__, - pla_version(),$_REQUEST); + app_version(),$_REQUEST); # Set our PHP timelimit. -if ($_SESSION[APPCONFIG]->GetValue('session','timelimit')) - @set_time_limit($_SESSION[APPCONFIG]->GetValue('session','timelimit')); +if ($_SESSION[APPCONFIG]->getValue('session','timelimit') && ! ini_get('safe_mode')) + set_time_limit($_SESSION[APPCONFIG]->getValue('session','timelimit')); # If debug mode is set, increase the time_limit, since we probably need it. -if (DEBUG_ENABLED && $_SESSION[APPCONFIG]->GetValue('session','timelimit')) - @set_time_limit($_SESSION[APPCONFIG]->GetValue('session','timelimit') * 5); +if (DEBUG_ENABLED && $_SESSION[APPCONFIG]->getValue('session','timelimit') && ! ini_get('safe_mode')) + set_time_limit($_SESSION[APPCONFIG]->getValue('session','timelimit') * 5); /** * Language configuration. Auto or specified? * Shall we attempt to auto-determine the language? */ -$language = $_SESSION[APPCONFIG]->GetValue('appearance','language'); +# If we are in safe mode, and LANG is not in the allowed vars, display an error. +if (ini_get('safe_mode') && ! in_array('LANG',explode(',',ini_get('safe_mode_allowed_env_vars')))) + error('You are running in SAFE_MODE, but LANG is not in the safe_mode_allowed_env_vars. Please add LANG to safe_mode_allowed_env_vars','error',true,false); -if ($language == 'auto') { +$app['language'] = $_SESSION[APPCONFIG]->getValue('appearance','language'); + +if ($app['language'] == 'auto') { # Make sure their browser correctly reports language. If not, skip this. if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { # Get the languages which are spetcified in the HTTP header - $HTTP_LANGS = preg_split ('/[;,]+/',$_SERVER['HTTP_ACCEPT_LANGUAGE']); - foreach ($HTTP_LANGS as $key => $value) { + $app['lang_http'] = preg_split ('/[;,]+/',$_SERVER['HTTP_ACCEPT_LANGUAGE']); + foreach ($app['lang_http'] as $key => $value) { if (substr($value,0,2) == 'q=') { - unset($HTTP_LANGS[$key]); + unset($app['lang_http'][$key]); continue; } $value = preg_split('/[-]+/',$value); if (sizeof($value) == 2) - $HTTP_LANGS[$key] = strtolower($value[0]).'_'.strtoupper($value[1]); + $app['lang_http'][$key] = strtolower($value[0]).'_'.strtoupper($value[1]); else - $HTTP_LANGS[$key] = auto_lang(strtolower($value[0])); + $app['lang_http'][$key] = auto_lang(strtolower($value[0])); } - $HTTP_LANGS = array_unique($HTTP_LANGS); + $app['lang_http'] = array_unique($app['lang_http']); - foreach ($HTTP_LANGS as $HTTP_LANG) { - $language_dir = LANGDIR.$HTTP_LANG; + foreach ($app['lang_http'] as $lang) { + $app['language_dir'] = LANGDIR.$lang; - if ((substr($HTTP_LANG,0,2) == 'en') || - (file_exists($language_dir) && is_readable($language_dir))) { + if ((substr($lang,0,2) == 'en') || + (file_exists($app['language_dir']) && is_readable($app['language_dir']))) { # Set language - @putenv('LANG='.$HTTP_LANG); # e.g. LANG=de_DE - $HTTP_LANG .= '.UTF-8'; - setlocale(LC_ALL,$HTTP_LANG); # set LC_ALL to de_DE + putenv('LANG='.$lang); # e.g. LANG=de_DE + $lang .= '.UTF-8'; + setlocale(LC_ALL,$lang); # set LC_ALL to de_DE bindtextdomain('messages',LANGDIR); bind_textdomain_codeset('messages','UTF-8'); textdomain('messages'); @@ -227,20 +261,20 @@ if ($language == 'auto') { break; } } - #todo: Generate an error if language doesnt exist. + #todo Generate an error if language doesnt exist. } } else { # Grab the language file configured in config.php - #todo: Generate an error if language doesnt exist. - if ($language != null) { - if (strcmp($language,'english') == 0) - $language = 'en_GB'; + #todo Generate an error if language doesnt exist. + if ($app['language'] != null) { + if (strcmp($app['language'],'english') == 0) + $app['language'] = 'en_GB'; # Set language - @putenv('LANG='.$language); # e.g. LANG=de_DE - $language .= '.UTF-8'; - setlocale(LC_ALL,$language); # set LC_ALL to de_DE + putenv('LANG='.$app['language']); # e.g. LANG=de_DE + $app['language'] .= '.UTF-8'; + setlocale(LC_ALL,$app['language']); # set LC_ALL to de_DE bindtextdomain('messages',LANGDIR); bind_textdomain_codeset('messages','UTF-8'); textdomain('messages'); @@ -260,46 +294,27 @@ if (get_magic_quotes_gpc() && (! isset($slashes_stripped) || ! $slashes_stripped $slashes_stripped = true; } -/** - * Create our application repository variable. - */ -if (isset($_REQUEST['server_id'])) { - $ldapserver = $_SESSION[APPCONFIG]->ldapservers->Instance($_REQUEST['server_id']); -} else { - if (isset($_SESSION[APPCONFIG]->ldapservers) && is_object($_SESSION[APPCONFIG]->ldapservers)) - $ldapserver = $_SESSION[APPCONFIG]->ldapservers->Instance(null); -} +# Create our application repository variable. +$app['server'] = $_SESSION[APPCONFIG]->getServer(get_request('server_id','REQUEST')); /** * Look/evaluate our timeout */ -if (isset($ldapserver) && is_object($ldapserver) && method_exists($ldapserver,'haveAuthInfo')) { - if ($ldapserver->haveAuthInfo() && isset($ldapserver->auth_type) && ! in_array($ldapserver->auth_type,array('config','http'))) { - /** - * If time out value has been reached: - * - log out user - * - put $server_id in array of recently timed out servers - */ - if (function_exists('session_timed_out') && session_timed_out($ldapserver)) { +if (! $app['server']->isSessionValid()) { + system_message(array( + 'title'=>_('Session Timed Out'), + 'body'=>sprintf('%s %s %s', + _('Your Session timed out after'),$app['server']->getValue('login','timeout'), + _('min. of inactivity. You have been automatically logged out.')), + 'type'=>'info'),sprintf('index.php?server_id=%s&refresh=SID_%s',$app['server']->getIndex(),$app['server']->getIndex())); - # If $session_timeout not defined, use ( session_cache_expire() - 1 ) - $session_timeout = $ldapserver->session_timeout ? $ldapserver->session_timeout : session_cache_expire()-1; - - system_message(array( - 'title'=>_('Session Timed Out'), - 'body'=>sprintf('%s %s %s', - _('Your Session timed out after'),$session_timeout, - _('min. of inactivity. You have been automatically logged out.')), - 'type'=>'info'),'index.php'); - die(); - } - } - - # Update $_SESSION['activity'] for timeout and automatic logout feature - if ($ldapserver->haveAuthInfo() && function_exists('set_lastactivity')) - set_lastactivity($ldapserver); + die(); } +# If syslog is enabled, we need to include the supporting file. +if ($_SESSION[APPCONFIG]->getValue('debug','syslog')) + require LIBDIR.'syslog.php'; + /** * At this point we have read all our additional function PHP files and our configuration. * If we are using hooks, run the session_init hook. diff --git a/lib/config_default.php b/lib/config_default.php index 7030b88..2a8083b 100644 --- a/lib/config_default.php +++ b/lib/config_default.php @@ -1,43 +1,30 @@ 'Display as read only if user logs in with anonymous bind', 'default'=>true); - /* Anonymous redirect - * Set to true if you want phpLDAPadmin to redirect anonymous - * users to a search form with no tree viewer on the left after - * logging in. - * @todo: With the new no-frames PLA, this code is broken, and needs to be fixed. - */ - $this->default->appearance['anonymous_bind_redirect_no_tree'] = array( - 'desc'=>'Redirect user to search form if anonymous', - 'default'=>false); + $this->default->appearance['attr_display_order'] = array( + 'desc'=>'Custom order to display attributes', + 'default'=>array()); + /* + * @todo Compression is not working, + * purge_cache shows blank, + * tree refresh shows blank - and if view_tree_node is modified to compress output, then previously opened items show up as compressed data. + */ $this->default->appearance['compress'] = array( 'desc'=>'Compress Output', + 'untested'=>true, + 'default'=>false); + + $this->default->appearance['control_icons'] = array( + 'desc'=>'Show the control as icons or text', 'default'=>false); $this->default->appearance['date'] = array( @@ -88,25 +79,53 @@ class Config { 'desc'=>'Disabled the Default Template', 'default'=>false); + $this->default->appearance['friendly_attrs'] = array( + 'desc'=>'Friendly names for attributes', + 'default'=>array()); + + $this->default->appearance['hide_attrs'] = array( + 'desc'=>'Hide attributes from display', + 'default'=>array()); + + $this->default->appearance['hide_attrs_exempt'] = array( + 'desc'=>'Group DN, where membership will exempt the users from hide_attrs', + 'default'=>null); + $this->default->appearance['hide_debug_info'] = array( 'desc'=>'Hide the features that may provide sensitive debugging information to the browser', 'default'=>true); + $this->default->appearance['rdn_all_attrs'] = array( + 'desc'=>'Whether to show all attributes in the RDN chooser, or just the required ones', + 'default'=>true); + + $this->default->appearance['readonly_attrs'] = array( + 'desc'=>'Mark these attributes as readonly', + 'default'=>array()); + + $this->default->appearance['readonly_attrs_exempt'] = array( + 'desc'=>'Group DN, where membership will exempt the users from readonly attrs', + 'default'=>null); + $this->default->appearance['timezone'] = array( 'desc'=>'Define our timezone, if not defined in php.ini', 'default'=>null); /** Language * The language setting. If you set this to 'auto', phpLDAPadmin will - * attempt to determine your language automatically. Otherwise, available - * lanaguages are: 'ct', 'de', 'en', 'es', 'fr', 'it', 'nl', and 'ru' + * attempt to determine your language automatically. Otherwise, set + * this to your applicable language in xx_XX format. * Localization is not complete yet, but most strings have been translated. - * Please help by writing language files. See lang/en.php for an example. + * Please help by writing language files. */ $this->default->appearance['language'] = array( 'desc'=>'Language', 'default'=>'auto'); + $this->default->appearance['max_add_attrs'] = array( + 'desc'=>'Maximum number of attrs to show in the add attr form', + 'default'=>10); + /** * If you want certain attributes to be editable as multi-line, include them in this list * A multi-line textarea will be drawn instead of a single-line text field @@ -173,8 +192,14 @@ class Config { 'default'=>'style.css'); /** Tree display - * A format string used to display enties in the tree viewer (left-hand side) - * You can use special tokens to draw the entries as you wish. You can even mix in HTML to format the string + * An array of format strings used to display enties in the + * tree viewer (left-hand side). The first format string that + * is completely defined (i.e., does not reference attributes + * that are not defined the object). If there is no format + * string that is completely defined, the last one is used. + * + * You can use special tokens to draw the entries as you wish. + * You can even mix in HTML to format the string. * Here are all the tokens you can use: * %rdn - draw the RDN of the entry (ie, "cn=Dave") * %dn - draw the DN of the entry (ie, "cn=Dave,ou=People,dc=example,dc=com" @@ -182,10 +207,12 @@ class Config { * %[attrname]- draw the value (or values) of the specified attribute. * example: %gidNumber * + * Any multivalued attributes will be displayed as a comma separated list. + * * Examples: * * To draw the gidNumber and uidNumber to the right of the RDN in a small, gray font: - * '%rdn ( %gidNumber / %uidNumber )' + * '%rdn ( %gidNumber / %uidNumber )' * To draw the full DN of each entry: * '%dn' * To draw the objectClasses to the right in parenthesis: @@ -195,7 +222,7 @@ class Config { */ $this->default->appearance['tree_display_format'] = array( 'desc'=>'LDAP attribute to show in the tree', - 'default'=>'%rdn'); + 'default'=>array('%rdn')); $this->default->appearance['tree_height'] = array( 'desc'=>'Pixel height of the tree browser', @@ -205,8 +232,7 @@ class Config { 'desc'=>'Pixel width of the tree browser', 'default'=>null); - /** - * Tree display filter + /** Tree display filter * LDAP filter used to search entries for the tree viewer (left-hand side) */ $this->default->appearance['tree_filter'] = array( @@ -217,45 +243,93 @@ class Config { 'desc'=>'Class name which inherits from Tree class and implements the draw() method', 'default'=>'AJAXTree'); - $this->default->appearance['entry_factory'] = array( - 'desc'=>'Class name which inherits from EntryFactory class', - 'default'=>'TemplateEntryFactory'); - - $this->default->appearance['attribute_factory'] = array( - 'desc'=>'Class name which inherits from AttributeFactory class', - 'default'=>'AttributeFactory'); - - $this->default->appearance['entry_reader'] = array( - 'desc'=>'Class name which inherits from EntryReader class', - 'default'=>'EntryReader'); - - $this->default->appearance['entry_writer'] = array( - 'desc'=>'Class name which inherits from EntryWriter class', - 'default'=>'EntryWriter1'); - - /** Caching - */ + ## Caching $this->default->cache['schema'] = array( - 'desc'=>'Cache schema activity', + 'desc'=>'Cache Schema Activity', 'default'=>true); + $this->default->cache['query'] = array( + 'desc'=>'Cache Query Configuration', + 'default'=>true); + + $this->default->cache['query_time'] = array( + 'desc'=>'Cache the query configuration for atleast this amount of time in seconds', + 'default'=>5); + $this->default->cache['template'] = array( - 'desc'=>'Cache Template configuration', + 'desc'=>'Cache Template Configuration', 'default'=>true); + $this->default->cache['template_time'] = array( + 'desc'=>'Cache the template configuration for atleast this amount of time in seconds', + 'default'=>60); + $this->default->cache['tree'] = array( 'desc'=>'Cache Browser Tree', 'default'=>true); - /** + /** Confirm actions + */ + $this->default->confirm['create'] = array( + 'desc'=>'Confirm creation actions', + 'default'=>true); + + $this->default->confirm['update'] = array( + 'desc'=>'Confirm update actions', + 'default'=>true); + + /** Commands * Define command availability ; if the value of a command is true, * the command will be available. */ + $this->default->commands['script'] = array( + 'desc'=>'Define scripts availability', + 'default'=> array( + 'add_attr_form' => true, + 'add_oclass_form' => true, + 'add_value_form' => true, + 'collapse' => true, + 'compare' => true, + 'compare_form' => true, + 'copy' => true, + 'copy_form' => true, + 'create' => true, + 'create_confirm' => true, + 'delete' => true, + 'delete_attr' => true, + 'delete_form' => true, + 'draw_tree_node' => true, + 'expand' => true, + 'export' => true, + 'export_form' => true, + 'import' => true, + 'import_form' => true, + 'login' => true, + 'logout' => true, + 'login_form' => true, + 'modify_member_form' => true, + 'monitor' => true, + 'purge_cache' => true, + 'query_engine' => true, + 'rename' => true, + 'rename_form' => true, + 'rdelete' => true, + 'refresh' => true, + 'schema' => true, + 'server_info' => true, + 'show_cache' => true, + 'template_engine' => true, + 'update_confirm' => true, + 'update' => true, + 'test' => true + )); + $this->default->commands['all'] = array( 'desc'=>'Define command availability', 'default'=> array( 'home' => true, 'external_links' => array('feature' => true, + 'forum' => true, 'bug' => true, 'donation' => true, 'help' => true, @@ -297,6 +371,8 @@ class Config { * object but not during the search. * LDAP_DEREF_ALWAYS - aliases should be dereferenced always (eg, the contents * of the referenced entry is shown and not the aliasing entry) + * We superceed these definitions with @ to suppress the error if php-ldap is + * not installed. */ @$this->default->deref['export'] = array( 'desc'=>'', @@ -335,17 +411,14 @@ class Config { 'desc'=>'Whether to append to the debug file, or create it fresh each time', 'default'=>true); - /** Temp Directories + ## Temp Directories + /** JPEG TMPDir * This directory must be readable and writable by your web server */ $this->default->jpeg['tmpdir'] = array( 'desc'=>'Temporary directory for jpegPhoto data', 'default'=>'/tmp'); - $this->default->jpeg['tmp_keep_time'] = array( - 'desc'=>'Time in seconds to keep jpegPhoto temporary files in the temp directory', - 'default'=>120); - ## Modify members feature /** * Search filter setting for new members. This is used to search possible members that can be added @@ -462,23 +535,6 @@ class Config { 'desc'=>'Limit the size of searchs on the search page', 'default'=>50); - /** - * Which attributes to include in the drop-down menu of the simple search form (comma-separated) - * Change this to suit your needs for convenient searching. Be sure to change the corresponding - * list below ($search_attributes_display) - */ - $this->default->search['attributes'] = array( - 'desc'=>'Attributes to include in the drop down menu of the simple search form (comma separated)', - 'default'=>array('uid','cn','gidNumber','objectClass','telephoneNumber','mail','street')); - - /** - * You can re-arrange the order of the search criteria on the simple search form by modifying this array - * You cannot however change the names of the criteria. Criteria names will be translated at run-time. - */ - $this->default->search['criteria_options'] = array( - 'desc'=>'Rearrange the order of the search criteria', - 'default'=>array('equals','starts with','contains','ends with','sounds like')); - /** * The list of attributes to display in each search result entry. * Note that you can add * to the list to display all attributes @@ -486,40 +542,67 @@ class Config { $this->default->search['result_attributes'] = array( 'desc'=>'List of attributes to display in each search result entry', 'default'=>array('cn','sn','uid','postalAddress','telephoneNumber')); + + $this->default->search['time_limit'] = array( + 'desc'=>'Maximum time to allow unlimited size_limit searches to the ldap server', + 'default'=>120); } + /** + * Access the configuration, taking into account the defaults and the customisations + */ private function getConfigArray($usecache=true) { - global $CACHE; + static $CACHE = array(); - if ($usecache && isset($CACHE[__METHOD__])) - return $CACHE[__METHOD__]; + if ($usecache && count($CACHE)) + return $CACHE; foreach ($this->default as $key => $vals) - $CACHE[__METHOD__][$key] = $vals; + $CACHE[$key] = $vals; foreach ($this->custom as $key => $vals) foreach ($vals as $index => $val) - $CACHE[__METHOD__][$key][$index]['value'] = $val; + $CACHE[$key][$index]['value'] = $val; - return $CACHE[__METHOD__]; + return $CACHE; } /** * Get a configuration value. */ - public function GetValue($key,$index) { + public function getValue($key,$index,$fatal=true) { $config = $this->getConfigArray(); if (! isset($config[$key])) - error(sprintf('A call was made in [%s] to GetValue requesting [%s] that isnt predefined.', - basename($_SERVER['PHP_SELF']),$key),'error',null,true); + if ($fatal) + error(sprintf('A call was made in [%s] to getValue requesting [%s] that isnt predefined.', + basename($_SERVER['PHP_SELF']),$key),'error',null,true); + else + return ''; if (! isset($config[$key][$index])) - error(sprintf('Requesting an index [%s] in key [%s] that isnt predefined.',$index,$key),'error',null,true); + if ($fatal) + error(sprintf('Requesting an index [%s] in key [%s] that isnt predefined.',$index,$key),'error',null,true); + else + return ''; return isset($config[$key][$index]['value']) ? $config[$key][$index]['value'] : $config[$key][$index]['default']; } + /** + * Return the untested config items + */ + public function untested() { + $result = array(); + + foreach ($this->default as $option => $details) + foreach ($details as $param => $values) + if (isset($values['untested']) && $values['untested']) + array_push($result,sprintf('%s.%s',$option,$param)); + + return $result; + } + /** * Function to check and warn about any unusual defined variables. */ @@ -553,21 +636,43 @@ class Config { } /** - * The parameter number is variable. - * For example : isCommandAvailable('search', 'simple_search') + * Get a list of available commands. */ - public function isCommandAvailable() { + public function getCommandList() { + $config = $this->getConfigArray(false); + + masort($config['command'],'summary'); + + if (isset($config['command']) && is_array($config['command'])) + return $config['command']; + else + return array(); + } + + /** + * The parameter number is variable. + * For example : isCommandAvailable('search','simple_search') + */ + public function isCommandAvailable($index='all') { $a = func_get_args(); + + if (! in_array($index,array('all','script'))) + $index = 'all'; + else + array_shift($a); + if (count($a) == 1 && is_array($a[0])) $a = $a[0]; $i = 0; # Command availability list - $cmd = $this->GetValue('commands','all'); + $cmd = $this->getValue('commands',$index); + # Search for the command while ($i < count($a)) { if (! is_array($cmd)) return $cmd; + if (! isset($cmd[$a[$i]])) return false; @@ -589,24 +694,26 @@ class Config { return false; } + public function configDefinition($key,$index,$config) { + if (! is_array($config) || ! array_key_exists('desc',$config) || ! array_key_exists('default',$config)) + return; + + if (isset($this->default->$key)) + $definition = $this->default->$key; + + $definition[$index] = $config; + $this->default->$key = $definition; + } + /** - * Reads the friendly_attrs array as defined in config.php and lower-cases all - * the keys. Will return an empty array if the friendly_attrs array is not defined - * in config.php. This is simply used so we can more easily lookup user-friendly - * attributes configured by the admin. + * Return the friendly attributes names */ - function getFriendlyAttrs($friendly_attrs) { + private function getFriendlyAttrs() { if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) debug_log('Entered with ()',1,__FILE__,__LINE__,__METHOD__); - # If friendly_attrs is not an array, then set to an empty array. - if (! is_array($friendly_attrs)) - $this->friendly_attrs = array(); - - else - foreach ($friendly_attrs as $old_name => $new_name) - $this->friendly_attrs[strtolower($old_name)] = $new_name; - } + return array_change_key_case($this->getValue('appearance','friendly_attrs')); + } /** * This function will return the friendly name of an attribute, if it exists. @@ -616,10 +723,21 @@ class Config { * @return string friendly name|attribute */ public function getFriendlyName($attr) { - if ($this->haveFriendlyName($attr)) - return $this->friendly_attrs[strtolower($attr)]; + static $friendly_attrs; + + if (! $friendly_attrs) + $friendly_attrs = $this->getFriendlyAttrs(); + + if (! is_object($attr)) + if (isset($friendly_attrs[$attr])) + return $friendly_attrs[$attr]; + else + return $attr; + + if (isset($friendly_attrs[$attr->getName()])) + return $friendly_attrs[$attr->getName()]; else - return $attr; + return $attr->getName(false); } /** @@ -630,8 +748,7 @@ class Config { * @return boolean true|false */ public function haveFriendlyName($attr) { - return isset($this->friendly_attrs[strtolower($attr)]); - + return $attr->getName(false) != $this->getFriendlyName($attr); } /** @@ -643,9 +760,25 @@ class Config { public function getFriendlyHTML($attr) { if ($this->haveFriendlyName($attr)) return sprintf('%s', - _('Alias for'),$attr,htmlspecialchars($this->getFriendlyName($attr))); + _('Alias for'),$attr->getName(false),$this->getFriendlyName($attr)); else - return $attr; + return $attr->getName(false); + } + + public function setServers($servers) { + $this->servers = $servers; + } + + public function getServer($index=null) { + return $this->servers->Instance($index); + } + + /** + * Return a list of our servers + * @param boolean $visible - Only return visible servers + */ + public function getServerList($visible=true) { + return $this->servers->getServerList($visible); } } ?> diff --git a/lib/createlm.php b/lib/createlm.php index 645d61d..3dc4bb1 100644 --- a/lib/createlm.php +++ b/lib/createlm.php @@ -1,6 +1,6 @@ permute($rl, $this->perm6, 64); } - function str_to_key($str) { + /** + * str_to_key + * + * @param string $str + * @return string key + */ + private function str_to_key($str) { $key[0] = $this->unsigned_shift_r($str[0], 1); $key[1] = (($str[0]&0x01)<<6) | $this->unsigned_shift_r($str[1], 2); $key[2] = (($str[1]&0x03)<<5) | $this->unsigned_shift_r($str[2], 3); @@ -265,7 +272,15 @@ var $sbox = array(array(array(14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5 return $key; } - function smb_hash($in, $key, $forw){ + /** + * smb_hash + * + * @param unknown_type $in + * @param unknown_type $key + * @param unknown_type $forw + * @return unknown + */ + private function smb_hash($in, $key, $forw){ $key2 = $this->str_to_key($key); for ($i = 0; $i < 64; $i++) { @@ -285,7 +300,13 @@ var $sbox = array(array(array(14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5 return $out; } - function E_P16($in) { + /** + * E_P16 + * + * @param unknown_type $in + * @return unknown + */ + private function E_P16($in) { $p14 = array_values(unpack("C*",$in)); $sp8 = array(0x4b, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25); $p14_1 = array(); @@ -309,7 +330,7 @@ var $sbox = array(array(array(14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5 * @param string $password password * @return string hash value */ - function lmhash($password = "") { + public function lmhash($password = "") { $password = strtoupper($password); $password = substr($password,0,14); $password = str_pad($password, 14, chr(0)); @@ -326,8 +347,14 @@ var $sbox = array(array(array(14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5 * @param string $password password * @return string hash value */ - function nthash($password = "") { - return strtoupper(bin2hex(mhash(MHASH_MD4,iconv('UTF-8','UTF-16LE',$password)))); + public function nthash($password = "") { + if (function_exists('mhash')) + if (defined('MHASH_MD4')) + return strtoupper(bin2hex(mhash(MHASH_MD4,iconv('UTF-8','UTF-16LE',$password)))); + else + return strtoupper(hash('md4', iconv("UTF-8","UTF-16LE",$password))); + else + error(_('Your PHP install does not have the mhash() function. Cannot do hashes.'),'error','index.php'); } /** @@ -335,7 +362,7 @@ var $sbox = array(array(array(14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5 * * PHP 4 only supports signed shifts by default. */ - function unsigned_shift_r($a, $b) { + private function unsigned_shift_r($a, $b) { $z = 0x80000000; if ($z & $a) { $a = ($a >> 1); diff --git a/lib/ds.php b/lib/ds.php new file mode 100644 index 0000000..1c2ff14 --- /dev/null +++ b/lib/ds.php @@ -0,0 +1,505 @@ +', any custom extra connection to ds. + */ + abstract public function login($user=null,$pass=null,$method=null); + + /** + * Query the datasource + */ + abstract public function query($query,$method,$index=null,$debug=false); + + /** + * Return error details from previous operation + */ + abstract protected function getErrorMessage(); + abstract protected function getErrorNum(); + + /** + * Functions that set and verify object configuration details + */ + public function setDefaults($defaults) { + foreach ($defaults as $key => $details) + foreach ($details as $setting => $value) + $this->default->{$key}[$setting] = $value; + } + + public function isDefaultKey($key) { + return isset($this->default->$key); + } + + public function isDefaultSetting($key,$setting) { + return array_key_exists($setting,$this->default->{$key}); + } + + /** + * Return a configuration value + */ + public function getValue($key,$setting) { + if (isset($this->custom->{$key}[$setting])) + return $this->custom->{$key}[$setting]; + + elseif (isset($this->default->{$key}[$setting]) && array_key_exists('default',$this->default->{$key}[$setting])) + return $this->default->{$key}[$setting]['default']; + + else { + debug_dump_backtrace("Error trying to get a non-existant value ($key,$setting)",1); + } + } + + /** + * Set a configuration value + */ + public function setValue($key,$setting,$value) { + if (isset($this->custom->{$key}[$setting])) + system_message(array( + 'title'=>_('Configuration setting already defined.'), + 'body'=>sprintf('A call has been made to reset a configuration value (%s,%s,%s)', + $key,$setting,$value), + 'type'=>'info')); + + $this->custom->{$key}[$setting] = $value; + } + + /** + * Return the untested config items + */ + public function untested() { + $result = array(); + + foreach ($this->default as $option => $details) + foreach ($details as $param => $values) + if (isset($values['untested']) && $values['untested']) + array_push($result,sprintf('%s.%s',$option,$param)); + + return $result; + } + + /** + * Get the name of this datastore + */ + public function getName() { + return $this->getValue('server','name'); + } + + /** + * Functions that enable login and logout of the application + */ + /** + * Return the authentication type for this object + */ + public function getAuthType() { + switch ($this->getValue('login','auth_type')) { + case 'config': + case 'session': + return $this->getValue('login','auth_type'); + + default: + die(sprintf('Error: %s hasnt been configured for auth_type %s',__METHOD__, + $this->getValue('login','auth_type'))); + } + } + + /** + * Get the login name of the user logged into this datastore's connection method + * If this returns null, we are not logged in. + * If this returns '', we are logged in with anonymous + */ + public function getLogin($method=null) { + $method = $this->getMethod($method); + + if ($method == 'unauth') + return ''; + + switch ($this->getAuthType()) { + case 'config': + if (! isset($_SESSION['USER'][$this->index][$method]['name'])) + return $this->getValue('login','bind_id'); + else + return blowfish_decrypt($_SESSION['USER'][$this->index][$method]['name']); + + case 'session': + if (! isset($_SESSION['USER'][$this->index][$method]['name'])) + return null; + else + return blowfish_decrypt($_SESSION['USER'][$this->index][$method]['name']); + + default: + die(sprintf('Error: %s hasnt been configured for auth_type %s',__METHOD__,$this->getAuthType())); + } + } + + /** + * Set the login details of the user logged into this datastore's connection method + */ + protected function setLogin($user,$pass,$method=null) { + $method = $this->getMethod($method); + + switch ($this->getAuthType()) { + case 'config': + case 'session': + $_SESSION['USER'][$this->index][$method]['name'] = blowfish_encrypt($user); + $_SESSION['USER'][$this->index][$method]['pass'] = blowfish_encrypt($pass); + + return true; + + default: + die(sprintf('Error: %s hasnt been configured for auth_type %s',__METHOD__,$this->getAuthType())); + } + } + + /** + * Get the login password of the user logged into this datastore's connection method + */ + protected function getPassword($method=null) { + $method = $this->getMethod($method); + + if ($method == 'unauth') + return ''; + + switch ($this->getAuthType()) { + case 'config': + if (! isset($_SESSION['USER'][$this->index][$method]['pass'])) + return $this->getValue('login','bind_pass'); + else + return blowfish_decrypt($_SESSION['USER'][$this->index][$method]['pass']); + + case 'session': + if (! isset($_SESSION['USER'][$this->index][$method]['pass'])) + return null; + else + return blowfish_decrypt($_SESSION['USER'][$this->index][$method]['pass']); + + default: + die(sprintf('Error: %s hasnt been configured for auth_type %s',__METHOD__,$this->getAuthType())); + } + } + + /** + * Return if this datastore's connection method has been logged into + */ + public function isLoggedIn($method=null) { + $method = $this->getMethod($method); + + return is_null($this->getLogin($method)) ? false : true; + } + + /** + * Logout of this datastore's connection method + */ + public function logout($method=null) { + $method = $this->getMethod($method); + + switch ($this->getAuthType()) { + case 'config': + if (isset($_SESSION['USER'][$this->index][$method])) + unset($_SESSION['USER'][$this->index][$method]); + + return true; + + case 'session': + if (isset($_SESSION['USER'][$this->index][$method])) + unset($_SESSION['USER'][$this->index][$method]); + + return true; + + default: + die(sprintf('Error: %s hasnt been configured for auth_type %s',__METHOD__,$this->getAuthType())); + } + } + + /** + * Functions that return the condition of the datasource + */ + public function isVisible() { + return $this->getValue('server','visible'); + } + + public function isReadOnly() { + if (! trim($this->getLogin(null)) && $_SESSION[APPCONFIG]->getValue('appearance','anonymous_bind_implies_read_only')) + return true; + else + return $this->getValue('server','read_only'); + } + + public function getIndex() { + return $this->index; + } + + /** + * Work out which connection method to use. + * If a method is passed, then it will be passed back. If no method is passed, then we'll + * check to see if the user is logged in. If they are, then 'user' is used, otherwise + * 'anon' is used. + * + * @param int Server ID + * @return string Connection Method + */ + protected function getMethod($method=null) { + # Immediately return if method is set. + if (! is_null($method)) + return $method; + + if ($this->isLoggedIn('user')) + return 'user'; + else + return 'anon'; + } +} + +/** + * The list of database sources + * + * @package phpLDAPadmin + * @subpackage DataStore + */ +class Datastore { + # Out DS index id + private $index; + # List of all the objects + private $objects = array(); + # Default settings + private $default; + + public function __construct() { + $this->default = new StdClass; + + $this->default->server['id'] = array( + 'desc'=>'Server ID', + 'default'=>null); + + $this->default->server['name'] = array( + 'desc'=>'Server name', + 'default'=>null); + + # Connectivity Info + $this->default->server['host'] = array( + 'desc'=>'Host Name', + 'default'=>'127.0.0.1'); + + $this->default->server['port'] = array( + 'desc'=>'Port Number', + 'default'=>null); + + # Read or write only access + $this->default->server['read_only'] = array( + 'desc'=>'Server is in READ ONLY mode', + 'default'=>false); + + $this->default->server['visible'] = array( + 'desc'=>'Whether this server is visible', + 'default'=>true); + + # Authentication Information + $this->default->login['auth_type'] = array( + 'desc'=>'Authentication Type', + 'default'=>'session'); + +/* + /* ID to login to this application, this assumes that there is + * application authentication on top of authentication required to + * access the data source ** + $this->default->login['auth_id'] = array( + 'desc'=>'User Login ID to login to this DS', + 'untested'=>true, + 'default'=>null); + + $this->default->login['auth_pass'] = array( + 'desc'=>'User Login Password to login to this DS', + 'untested'=>true, + 'default'=>null); +*/ + + $this->default->login['auth_text'] = array( + 'desc'=>'Text to show at the login prompt', + 'default'=>null); + + $this->default->login['bind_id'] = array( + 'desc'=>'User Login ID to bind to this DS', + 'default'=>null); + + $this->default->login['bind_pass'] = array( + 'desc'=>'User Login Password to bind to this DS', + 'default'=>null); + + $this->default->login['timeout'] = array( + 'desc'=>'Session timout in seconds', + 'default'=>session_cache_expire()-1); + + # Prefix for custom pages + $this->default->custom['pages_prefix'] = array( + 'desc'=>'Prefix name for custom pages', + 'default'=>'custom_'); + } + + /** + * Create a new database object + */ + public function newServer($type) { + if (class_exists($type)) { + $this->index = count($this->objects)+1; + $this->objects[$this->index] = new $type($this->index); + + $this->objects[$this->index]->setDefaults($this->default); + return $this->index; + + } else { + printf('ERROR: Class [%s] doesnt exist',$type); + die(); + } + } + + /** + * Set values for a database object. + */ + public function setValue($key,$setting,$value) { + if (defined('DEBUG_ENABLED') && (DEBUG_ENABLED)) + debug_log('Entered with (%s,%s,%s)',3,__FILE__,__LINE__,__METHOD__, + $key,$setting,$value); + + if (! $this->objects[$this->index]->isDefaultKey($key)) + error("ERROR: Setting a key [$key] that isnt predefined.",'error',true); + + if (! $this->objects[$this->index]->isDefaultSetting($key,$setting)) + error("ERROR: Setting a index [$key,$setting] that isnt predefined.",'error',true); + + # Test if its should be an array or not. + if (is_array($this->objects[$this->index]->getValue($key,$setting)) && ! is_array($value)) + error("Error in configuration file, {$key}['$setting'] SHOULD be an array of values.",'error',true); + + if (! is_array($this->objects[$this->index]->getValue($key,$setting)) && is_array($value)) + error("Error in configuration file, {$key}['$setting'] should NOT be an array of values.",'error',true); + + # Store the value in the object. + $this->objects[$this->index]->setValue($key,$setting,$value); + } + + /** + * Get a list of all the configured servers. + * + * @param boolean Only show visible servers. + * @return array list of all configured servers. + */ + public function getServerList($isVisible=true) { + static $CACHE; + + if (isset($CACHE[$isVisible])) + return $CACHE[$isVisible]; + + if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) + debug_log('Entered with (%s)',3,__FILE__,__LINE__,__METHOD__,$isVisible); + + $CACHE[$isVisible] = array(); + + # Debugging incase objects is not set. + if (! $this->objects) { + print "
";
+			debug_print_backtrace();
+			die();
+		}
+
+		foreach ($this->objects as $id => $server)
+			if (! $isVisible || ($isVisible && $server->getValue('server','visible')))
+				$CACHE[$isVisible][$id] = $server;
+
+		if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
+			debug_log('Entered with (%s), Returning (%s)',3,__FILE__,__LINE__,__METHOD__,
+				$isVisible,$CACHE);
+
+		return $CACHE[$isVisible];
+	}
+
+	/**
+	 * Return an object Instance of a configured database.
+	 *
+	 * @param int Index
+	 * @return object Datastore instance object.
+	 */
+	public function Instance($index=null) {
+		if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
+			debug_log('Entered with (%s)',3,__FILE__,__LINE__,__METHOD__,$index);
+
+		# If no index defined, then pick the lowest one.
+		if (is_null($index))
+			$index = min($this->GetServerList())->getIndex();
+
+		if (! isset($this->objects[$index]))
+			debug_dump_backtrace("Error: Datastore instance [$index] doesnt exist?",1);
+
+		if (defined('DEBUG_ENABLED') && DEBUG_ENABLED)
+			debug_log('Returning instance of database (%s)',3,__FILE__,__LINE__,__METHOD__,$index);
+
+		return $this->objects[$index];
+	}
+
+	/**
+	 * Return an object Instance of a configured database.
+	 *
+	 * @param string Name of the instance to retrieve
+	 * @return object Datastore instance object.
+	 */
+	public function InstanceName($name=null) {
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s)',3,__FILE__,__LINE__,__METHOD__,$name);
+
+		foreach ($this->getServerList(false) as $index)
+			if ($this->objects[$index]->getName() == $name)
+				return $this->objects[$index];
+
+		# If we get here, then no object with the name exists.
+		return null;
+	}
+
+	/**
+	 * Return an object Instance of a configured database.
+	 *
+	 * @param string ID of the instance to retrieve
+	 * @return object Datastore instance object.
+	 */
+	public function InstanceId($id=null) {
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s)',3,__FILE__,__LINE__,__METHOD__,$id);
+
+		foreach ($this->getServerList(false) as $index)
+			if ($this->objects[$index->getIndex()]->getValue('server','id') == $id)
+				return $this->objects[$index->getIndex()];
+
+		# If we get here, then no object with the name exists.
+		return null;
+	}
+}
+?>
diff --git a/lib/ds_ldap.php b/lib/ds_ldap.php
new file mode 100644
index 0000000..8890ffb
--- /dev/null
+++ b/lib/ds_ldap.php
@@ -0,0 +1,2138 @@
+index = $index;
+		$this->type = 'ldap';
+
+		# Additional values that can go in our config.php
+		$this->custom = new StdClass;
+		$this->default = new StdClass;
+
+/*
+ * Not used by PLA
+		# Database Server Variables
+		$this->default->server['db'] = array(
+			'desc'=>'Database Name',
+			'untested'=>true,
+			'default'=>null);
+*/
+
+		/* This was created for IDS - since it doesnt present STRUCTURAL against objectClasses
+		 * definitions when reading the schema.*/
+		$this->default->server['schema_oclass_default'] = array(
+			'desc'=>'When reading the schema, and it doesnt specify objectClass type, default it to this',
+			'default'=>null);
+
+		$this->default->server['base'] = array(
+			'desc'=>'LDAP Base DNs',
+			'default'=>array());
+
+		$this->default->server['tls'] = array(
+			'desc'=>'Connect using TLS',
+			'default'=>false);
+
+/*
+ * Not used by PLA
+		$this->default->login['dn'] = array(
+			'desc'=>'User Login DN',
+			'default'=>'');
+
+		$this->default->login['pass'] = array(
+			'desc'=>'User Login Password',
+			'default'=>'');
+*/
+
+		# Login Details
+		$this->default->login['attr'] = array(
+			'desc'=>'Attribute to use to find the users DN',
+			'default'=>'dn');
+
+		$this->default->login['anon_bind'] = array(
+			'desc'=>'Enable anonymous bind logins',
+			'default'=>true);
+
+		$this->default->login['allowed_dns'] = array(
+			'desc'=>'Limit logins to users who match any of the following LDAP filters',
+			'default'=>array());
+
+		# SASL configuration
+		$this->default->server['sasl'] = array(
+			'desc'=>'Use SASL authentication when binding LDAP server',
+			'default'=>false);
+
+		$this->default->sasl['mech'] = array(
+			'desc'=>'SASL mechanism used while binding LDAP server',
+			'untested'=>true,
+			'default'=>'PLAIN');
+
+		$this->default->sasl['realm'] = array(
+			'desc'=>'SASL realm name',
+			'untested'=>true,
+			'default'=>null);
+
+		$this->default->sasl['authz_id'] = array(
+			'desc'=>'SASL authorization id',
+			'untested'=>true,
+			'default'=>null);
+
+		$this->default->sasl['authz_id_regex'] = array(
+			'desc'=>'SASL authorization id PCRE regular expression',
+			'untested'=>true,
+			'default'=>null);
+
+		$this->default->sasl['authz_id_replacement'] = array(
+			'desc'=>'SASL authorization id PCRE regular expression replacement string',
+			'untested'=>true,
+			'default'=>null);
+
+		$this->default->sasl['props'] = array(
+			'desc'=>'SASL properties',
+			'untested'=>true,
+			'default'=>null);
+	}
+
+	/**
+	 * Required ABSTRACT functions
+	 */
+	/**
+	 * Connect and Bind to the Database
+	 *
+	 * @param string Which connection method resource to use
+	 * @return resource|null Connection resource if successful, null if not.
+	 */
+	protected function connect($method,$debug=false,$new=false) {
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$method);
+
+		static $CACHE = array();
+
+		$method = $this->getMethod($method);
+		$bind = array();
+
+		if (isset($CACHE[$this->index][$method]) && $CACHE[$this->index][$method])
+			return $CACHE[$this->index][$method];
+
+		# Check if we have logged in and therefore need to use those details as our bind.
+		$bind['id'] = is_null($this->getLogin($method)) ? $this->getLogin('user') : $this->getLogin($method);
+		$bind['pass'] = is_null($this->getPassword($method)) ? $this->getPassword('user') : $this->getPassword($method);
+
+		# If our bind id is still null, we are not logged in.
+		if (is_null($bind['id']))
+			return null;
+
+		# If we bound to the LDAP server with these details for a different connection, return that resource
+		if (isset($CACHE[$this->index]) && ! $new)
+			foreach ($CACHE[$this->index] as $cachedmethod => $resource) {
+				if (($this->getLogin($cachedmethod) == $bind['id']) && ($this->getPassword($cachedmethod) == $bind['pass'])) {
+					$CACHE[$this->index][$method] = $resource;
+
+					return $CACHE[$this->index][$method];
+				}
+			}
+
+		$CACHE[$this->index][$method] = null;
+
+		# No identifiable connection exists, lets create a new one.
+		if (DEBUG_ENABLED)
+			debug_log('Creating NEW connection [%s] for index [%s]',16,__FILE__,__LINE__,__METHOD__,
+				$method,$this->index);
+
+		if (function_exists('run_hook'))
+			run_hook('pre_connect',array('server_id'=>$this->index,'method'=>$method));
+
+		if ($this->getValue('server','port'))
+			$resource = ldap_connect($this->getValue('server','host'),$this->getValue('server','port'));
+		else
+			$resource = ldap_connect($this->getValue('server','host'));
+
+		$CACHE[$this->index][$method] = $resource;
+
+		if (DEBUG_ENABLED)
+			debug_log('LDAP Resource [%s], Host [%s], Port [%s]',16,__FILE__,__LINE__,__METHOD__,
+				$resource,$this->getValue('server','host'),$this->getValue('server','port'));
+
+		if (! is_resource($resource))
+			debug_dump_backtrace('UNHANDLED, $resource is not a resource',1);
+
+		# Go with LDAP version 3 if possible (needed for renaming and Novell schema fetching)
+		ldap_set_option($resource,LDAP_OPT_PROTOCOL_VERSION,3);
+
+		/* Disabling this makes it possible to browse the tree for Active Directory, and seems
+		 * to not affect other LDAP servers (tested with OpenLDAP) as phpLDAPadmin explicitly
+		 * specifies deref behavior for each ldap_search operation. */
+		ldap_set_option($resource,LDAP_OPT_REFERRALS,0);
+
+		# Try to fire up TLS is specified in the config
+		if ($this->isTLSEnabled())
+			$this->startTLS($resource);
+
+		# If SASL has been configured for binding, then start it now.
+		if ($this->isSASLEnabled())
+			$this->startSASL($resource,$method);
+
+		# Normal bind...
+		else
+			$bind['result'] = @ldap_bind($resource,$bind['id'],$bind['pass']);
+
+		if ($debug)
+			debug_dump(array('method'=>$method,'bind'=>$bind,'USER'=>$_SESSION['USER']));
+
+		if (DEBUG_ENABLED)
+			debug_log('Resource [%s], Bind Result [%s]',16,__FILE__,__LINE__,__METHOD__,$resource,$bind);
+
+		if (! $bind['result']) {
+			if (DEBUG_ENABLED)
+				debug_log('Leaving with FALSE, bind FAILed',16,__FILE__,__LINE__,__METHOD__);
+
+			$this->noconnect = true;
+
+			system_message(array(
+				'title'=>sprintf('%s %s',_('Unable to connect to LDAP server'),$this->getName()),
+				'body'=>sprintf('%s: %s (%s) for %s',_('Error'),$this->getErrorMessage($method),$this->getErrorNum($method),$method),
+				'type'=>'error'));
+
+		} else
+			$this->noconnect = false;
+
+		if (function_exists('run_hook'))
+			run_hook('post_connect',array('server_id'=>$this->index,'method'=>$method,'id'=>$bind['id']));
+
+		if ($debug)
+			debug_dump(array($method=>$CACHE[$this->index][$method]));
+
+		return $CACHE[$this->index][$method];
+	}
+
+	/**
+	 * Login to the database with the application user/password
+	 *
+	 * @return boolean true|false for successful login.
+	 * @todo isLoginStringEnabled() based logins
+	 */
+	public function login($user=null,$pass=null,$method=null,$new=false) {
+		$userDN = null;
+
+		# Get the userDN from the username.
+		if (! is_null($user)) {
+			if ($method == 'user') {
+				# If login,attr is set to DN, then user should be a DN
+				if ($this->getValue('login','attr') == 'dn')
+					$userDN = $user;
+				else
+					$userDN = $this->getLoginID($user,'unauth');
+
+				if (! $userDN)
+					return false;
+
+			} elseif (is_dn_string($user)) {
+				$userDN = $user;
+
+			# Invalid User, so we'll blank out the username/password
+			} else {
+				$userDN = '';
+				$pass = '';
+				$method = 'anon';
+			}
+
+		} else {
+			$method = 'anon';
+			$userDN = '';
+			$pass = '';
+		}
+
+		if (! $this->isAnonBindAllowed() && ! trim($userDN))
+			return false;
+
+		# Temporarily set our user details
+		$this->setLogin($userDN,$pass,$method);
+
+		$connect = $this->connect($method,false,$new);
+
+		# If we didnt log in...
+		if (! is_resource($connect) || $this->noconnect || ! $this->userIsAllowedLogin($userDN)) {
+			$this->logout($method);
+
+			return false;
+
+		} else
+			return true;
+	}
+
+	/**
+	 * Perform a query to the Database
+	 *
+	 * @param string query to perform
+	 *	$query['base']
+	 *	$query['filter']
+	 *	$query['scope']
+	 *	$query['attrs'] = array();
+	 *	$query['deref']
+	 * @param string Which connection method resource to use
+	 * @param string Index items according to this key
+	 * @param boolean Enable debugging output
+	 * @return array|null Results of query.
+	 */
+	public function query($query,$method,$index=null,$debug=false) {
+		$size_limit = 500;
+		$time_limit = 0;
+		$attrs_only = 0;
+
+		# Defaults
+		if (! isset($query['attrs']))
+			$query['attrs'] = array();
+		else
+			# Re-index the attrs, PHP throws an error if the keys are not sequential from 0.
+			$query['attrs'] = array_values($query['attrs']);
+
+		if (! isset($query['base'])) {
+			$bases = $this->getBaseDN();
+			$query['base'] = array_shift($bases);
+		}
+
+		if (! isset($query['deref']))
+			$query['deref'] = $_SESSION[APPCONFIG]->getValue('deref','search');
+		if (! isset($query['filter']))
+			$query['filter'] = '(&(objectClass=*))';
+		if (! isset($query['scope']))
+			$query['scope'] = 'sub';
+		if (! isset($query['size_limit']))
+			$query['size_limit'] = $size_limit;
+
+		if ($query['scope'] == 'base' && ! isset($query['baseok']))
+			system_message(array(
+				'title'=>sprintf('Dont call %s',__METHOD__),
+				'body'=>sprintf('Use getDNAttrValues for base queries [%s]',$query['base']),
+				'type'=>'info'));
+
+		if (is_array($query['base'])) {
+			system_message(array(
+				'title'=>_('Invalid BASE for query'),
+				'body'=>_('The query was cancelled because of an invalid base.'),
+				'type'=>'error'));
+
+			return array();
+		}
+
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,
+				$query,$index,$debug);
+
+		if (DEBUG_ENABLED)
+			debug_log('%s search PREPARE.',16,__FILE__,__LINE__,__METHOD__,$query['scope']);
+
+		if ($debug)
+			debug_dump(array('query'=>$query,'server'=>$this->getIndex(),'con'=>$this->connect($method)));
+
+		switch ($query['scope']) {
+			case 'base':
+				$search = @ldap_read($this->connect($method,$debug),$query['base'],$query['filter'],$query['attrs'],$attrs_only,$query['size_limit'],$time_limit,$query['deref']);
+				break;
+
+			case 'one':
+				$search = @ldap_list($this->connect($method,$debug),$query['base'],$query['filter'],$query['attrs'],$attrs_only,$query['size_limit'],$time_limit,$query['deref']);
+				break;
+
+			case 'sub':
+			default:
+				$search = @ldap_search($this->connect($method,$debug),$query['base'],$query['filter'],$query['attrs'],$attrs_only,$query['size_limit'],$time_limit,$query['deref']);
+				break;
+		}
+
+		if ($debug)
+			debug_dump(array('method'=>$method,'search'=>$search,'error'=>$this->getErrorMessage()));
+
+		if (DEBUG_ENABLED)
+			debug_log('Search scope [%s] base [%s] filter [%s] attrs [%s] COMPLETE (%s).',16,__FILE__,__LINE__,__METHOD__,
+				$query['scope'],$query['base'],$query['filter'],$query['attrs'],is_null($search));
+
+		if (! $search)
+			return array();
+
+		$return = array();
+
+		# Get the first entry identifier
+		if ($entry_id = ldap_first_entry($this->connect($method,$debug),$search)) {
+
+			if ($debug)
+				debug_dump(array('entry_id'=>$entry_id));
+
+			# Iterate over the entries
+			while ($entry_id) {
+
+				# Get the distinguished name of the entry
+				$dn = ldap_get_dn($this->connect($method,$debug),$entry_id);
+
+				if (DEBUG_ENABLED)
+					debug_log('Got DN [%s].',64,__FILE__,__LINE__,__METHOD__,$dn);
+
+				$return[$dn]['dn'] = $dn;
+
+				# Get the attributes of the entry
+				$attrs = ldap_get_attributes($this->connect($method,$debug),$entry_id);
+
+				if (DEBUG_ENABLED)
+					debug_log('Got ATTRS [%s].',64,__FILE__,__LINE__,__METHOD__,$attrs);
+
+				# Get the first attribute of the entry
+				if ($attr = ldap_first_attribute($this->connect($method,$debug),$entry_id,$attrs)) {
+
+					if (DEBUG_ENABLED)
+						debug_log('Processing ATTR [%s].',64,__FILE__,__LINE__,__METHOD__,$attr);
+
+					# Iterate over the attributes
+					while ($attr) {
+						# It seems that OpenDS complains when you do a ldap_get_values on these attributes - we'll skip them as a workaround
+						# This is probably the bug https://opends.dev.java.net/issues/show_bug.cgi?id=3446
+						#@todo we probably shouldnt completely ignore the isMemberOf ?
+						if (in_array($attr,array('isMemberOf'))) {
+							$attr = ldap_next_attribute($this->connect($method,$debug),$entry_id,$attrs);
+							continue;
+						}
+
+						if ($this->isAttrBinary($attr))
+							$values = ldap_get_values_len($this->connect($method,$debug),$entry_id,$attr);
+						else
+							$values = ldap_get_values($this->connect($method,$debug),$entry_id,$attr);
+
+						# Get the number of values for this attribute
+						$count = $values['count'];
+						unset($values['count']);
+
+						if ($count == 1)
+							$return[$dn][$attr] = $values[0];
+						else
+							$return[$dn][$attr] = $values;
+
+						$attr = ldap_next_attribute($this->connect($method,$debug),$entry_id,$attrs);
+					} # end while attr
+				}
+
+				$entry_id = ldap_next_entry($this->connect($method,$debug),$entry_id);
+
+			} # End while entry_id
+		}
+
+		# Sort our results
+		foreach ($return as $key=> $values)
+			ksort($return[$key]);
+
+		if (DEBUG_ENABLED)
+			debug_log('Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return);
+
+		return $return;
+	}
+
+	/**
+	 * Get the last error string
+	 *
+	 * @param string Which connection method resource to use
+	 */
+	public function getErrorMessage($method=null) {
+		return ldap_error($this->connect($method));
+	}
+
+	/**
+	 * Get the last error number
+	 *
+	 * @param string Which connection method resource to use
+	 */
+	public function getErrorNum($method=null) {
+		return ldap_errno($this->connect($method));
+	}
+
+	/**
+	 * Additional functions
+	 */
+	/**
+	 * Get a user ID
+	 *
+	 * @param string Which connection method resource to use
+	 */
+	public function getLoginID($user,$method=null) {
+		$query['filter'] = sprintf('(&(uid=%s))',$user);
+		$query['attrs'] = array('dn');
+		$result = $this->query($query,$method);
+
+		if (count($result) > 1)
+			die('ERROR: should only have 1 result');
+
+		foreach ($result as $detail)
+			if (! isset($detail['dn']))
+				die('ERROR: DN missing?');
+			else
+				return $detail['dn'];
+	}
+
+	/**
+	 * Return if anonymous bind is allowed in the configuration
+	 */
+	public function isAnonBindAllowed() {
+		return $this->getValue('login','anon_bind');
+	}
+
+	/**
+	 * Fetches whether TLS has been configured for use with a certain server.
+	 *
+	 * Users may configure phpLDAPadmin to use TLS in config,php thus:
+	 * 
+	 *	$servers->setValue('server','tls',true|false);
+	 * 
+	 *
+	 * @return boolean
+	 */
+	private function isTLSEnabled() {
+		if ($this->getValue('server','tls') && ! function_exists('ldap_start_tls')) {
+				error(_('TLS has been enabled in your config, but your PHP install does not support TLS. TLS will be disabled.'),'warn');
+			return false;
+
+		} else
+			return $this->getValue('server','tls');
+	}
+
+	/**
+	 * If TLS is configured, then start it
+	 */
+	private function startTLS($resource) {
+		if (! $this->getValue('server','tls') || (function_exists('ldap_start_tls') && ! ldap_start_tls($resource)))
+			error(_('Could not start TLS. Please check your LDAP server configuration.'),'error',null,true);
+	}
+
+	/**
+	 * Fetches whether SASL has been configured for use with a certain server.
+	 *
+	 * Users may configure phpLDAPadmin to use SASL in config,php thus:
+	 * 
+	 *	$servers->setValue('server','sasl',true|false);
+	 * 
+	 *
+	 * @return boolean
+	 */
+	private function isSASLEnabled() {
+		if ($this->getValue('server','sasl') && ! function_exists('ldap_sasl_bind')) {
+				error(_('SASL has been enabled in your config, but your PHP install does not support SASL. SASL will be disabled.'),'warn');
+			return false;
+
+		} else
+			return $this->getValue('server','sasl');
+	}
+
+	/**
+	 * If SASL is configured, then start it
+	 * To be able to use SASL, PHP should have been compliled with --with-ldap-sasl=DIR
+	 *
+	 * @todo This has not been tested, please let the developers know if this function works as expected.
+	 */
+	private function startSASL($resource,$method) {
+		error(__METHOD__.' has NOT been tested, please let us know if it works and which version of PHP you are using.','info');
+		static $CACHE = array();
+
+		if (! $this->getValue('server','sasl') || ! function_exists('ldap_start_tls'));
+			return false;
+
+		if (! isset($CACHE['login_dn'])) {
+			$CACHE['login_dn'] = is_null($this->getLogin($method)) ? $this->getLogin('user') : $this->getLogin($method);
+			$CACHE['login_pass'] = is_null($this->getPassword($method)) ? $this->getPassword('user') : $this->getPassword($method);
+		}
+
+		# Do we need to rewrite authz_id?
+		if (! isset($CACHE['authz_id']))
+			if (! trim($this->getValue('sasl','authz_id'))) {
+
+			if (DEBUG_ENABLED)
+				debug_log('Rewriting bind DN [%s] -> authz_id with regex [%s] and replacement [%s].',9,__FILE__,__LINE__,__METHOD__,
+					$CACHE['login_dn'],
+					$this->getValue('sasl','authz_id_regex'),
+					$this->getValue('sasl','authz_id_replacement'));
+
+			$CACHE['authz_id'] = @preg_replace($this->getValue('sasl','authz_id_regex'),
+				$this->getValue('sasl','authz_id_replacement'),$CACHE['login_dn']);
+
+			# Invalid regex?
+			if (is_null($CACHE['authz_id']))
+				error(sprintf(_('It seems that sasl_authz_id_regex "%s" contains invalid PCRE regular expression. The error is "%s".'),
+					$this->getValue('sasl','authz_id_regex'),(isset($php_errormsg) ? $php_errormsg : '')),
+					'error','index.php');
+
+			if (DEBUG_ENABLED)
+				debug_log('Resource [%s], SASL OPTIONS: mech [%s], realm [%s], authz_id [%s], props [%s]',9,__FILE__,__LINE__,__METHOD__,
+					$resource,
+					$this->getValue('sasl','mech'),
+					$this->getValue('sasl','realm'),
+					$CACHE['authz_id'],
+					$this->getValue('sasl','props'));
+
+			} else
+				$CACHE['authz_id'] = $this->getValue('sasl','authz_id');
+
+		# @todo this function is different in PHP5.1 and PHP5.2
+		return @ldap_sasl_bind($resource,$CACHE['login_dn'],$CACHE['login_pass'],
+			$this->getValue('sasl','mech'),
+			$this->getValue('sasl','realm'),
+			$CACH['authz_id'],
+			$this->getValue('sasl','props'));
+	}
+
+	/**
+	 * Modify attributes of a DN
+	 */
+	public function modify($dn,$attrs,$method=null) {
+		# We need to supress the error here - programming should detect and report it.
+		return @ldap_mod_replace($this->connect($method),$dn,$attrs);
+	}
+
+	/**
+	 * Gets the root DN of the specified LDAPServer, or null if it
+	 * can't find it (ie, the server won't give it to us, or it isnt
+	 * specified in the configuration file).
+	 *
+	 * Tested with OpenLDAP 2.0, Netscape iPlanet, and Novell eDirectory 8.7 (nldap.com)
+	 * Please report any and all bugs!!
+	 *
+	 * Please note: On FC systems, it seems that php_ldap uses /etc/openldap/ldap.conf in
+	 * the search base if it is blank - so edit that file and comment out the BASE line.
+	 *
+	 * @param string Which connection method resource to use
+	 * @return array dn|null The root DN of the server on success (string) or null on error.
+	 * @todo Sort the entries, so that they are in the correct DN order.
+	 */
+	public function getBaseDN($method=null) {
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$method);
+
+		static $CACHE;
+
+		$method = $this->getMethod($method);
+		$result = array();
+
+		if (isset($CACHE[$this->index][$method]))
+			return $CACHE[$this->index][$method];
+
+		# If the base is set in the configuration file, then just return that.
+		if (count($this->getValue('server','base'))) {
+			if (DEBUG_ENABLED)
+				debug_log('Return BaseDN from Config [%s]',17,__FILE__,__LINE__,__METHOD__,implode('|',$this->getValue('server','base')));
+
+			$CACHE[$this->index][$method] = $this->getValue('server','base');
+
+		# We need to figure it out.
+		} else {
+			if (DEBUG_ENABLED)
+				debug_log('Connect to LDAP to find BaseDN',80,__FILE__,__LINE__,__METHOD__);
+
+			# Set this to empty, in case we loop back here looking for the baseDNs
+			$CACHE[$this->index][$method] = array();
+
+			$results = $this->getDNAttrValues('',$method);
+
+			if (isset($results['namingcontexts'])) {
+				if (! is_array($results['namingcontexts']))
+					$results['namingcontexts'] = array($results['namingcontexts']);
+
+				if (DEBUG_ENABLED)
+					debug_log('LDAP Entries:%s',80,__FILE__,__LINE__,__METHOD__,implode('|',$results['namingcontexts']));
+
+				$result = $results['namingcontexts'];
+			}
+
+			$CACHE[$this->index][$method] = $result;
+		}
+
+		return $CACHE[$this->index][$method];
+	}
+
+	/**
+	 * Gets whether an entry exists based on its DN. If the entry exists,
+	 * returns true. Otherwise returns false.
+	 *
+	 * @param string The DN of the entry of interest.
+	 * @param string Which connection method resource to use
+	 * @return boolean
+	 */
+	public function dnExists($dn,$method=null) {
+		if (DEBUG_ENABLED)
+			debug_log('Search for (%s)',16,__FILE__,__LINE__,__METHOD__,$dn);
+
+		$results = $this->getDNAttrValues($dn,$method);
+
+		if (isset($results['dn'][0]))
+			return $results['dn'][0];
+		else
+			return false;
+	}
+
+	/**
+	 * Given a DN string, this returns the top container portion of the string.
+	 *
+	 * @param string The DN whose container string to return.
+	 * @return string The container
+	 */
+	public function getContainerTop($dn) {
+		$return = $dn;
+
+		foreach ($this->getBaseDN() as $base) {
+			if (preg_match("/${base}$/i",$dn)) {
+				$return = $base;
+				break;
+			}
+		}
+
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$return);
+
+		return $return;
+	}
+
+	/**
+	 * Given a DN string and a path like syntax, this returns the parent container portion of the string.
+	 *
+	 * @param string The DN whose container string to return.
+	 * @param string Either '/', '.' or something like '../../'
+	 * @return string The container
+	 */
+	public function getContainerPath($dn,$path='..') {
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$path);
+
+		$top = $this->getContainerTop($dn);
+
+		if ($path[0] == '/') {
+			$dn = $top;
+			$path = substr($path,1);
+
+		} elseif ($path == '.') {
+			return $dn;
+		}
+
+		$parenttree = explode('/',$path);
+
+		foreach ($parenttree as $key => $value) {
+			if ($value == '..') {
+				if ($this->getContainer($dn))
+					$dn = $this->getContainer($dn);
+
+				if ($dn == $top)
+					break;
+
+			} elseif($value)
+				$dn = sprintf('%s,%s',$value,$dn);
+
+			else
+				break;
+		}
+
+		if (! $dn) {
+			debug_dump(array(__METHOD__,'dn'=>$dn,'path'=>$path));
+			debug_dump_backtrace('Container is empty?',1);
+		}
+
+		return $dn;
+	}
+
+	/**
+	 * Given a DN string, this returns the parent container portion of the string.
+	 * For example. given 'cn=Manager,dc=example,dc=com', this function returns
+	 * 'dc=example,dc=com'.
+	 *
+	 * @param string The DN whose container string to return.
+	 * @return string The container
+	 */
+	public function getContainer($dn) {
+		$parts = $this->explodeDN($dn);
+
+		if (count($parts) <= 1)
+			$container = null;
+
+		else {
+			$container = $parts[1];
+
+			for ($i=2;$i
+	 *	dc=example,dc=com
+	 *		ou=People
+	 *			cn=Dave
+	 *			cn=Fred
+	 *			cn=Joe
+	 *		ou=More People
+	 *			cn=Mark
+	 *			cn=Bob
+	 * 
+	 *
+	 * Calling getContainerContents("ou=people,dc=example,dc=com")
+	 * would return the following list:
+	 *
+	 * 
+	 *	cn=Dave
+	 *	cn=Fred
+	 *	cn=Joe
+	 *	ou=More People
+	 * 
+	 *
+	 * @param string The DN of the entry whose children to return.
+	 * @param string Which connection method resource to use
+	 * @param int (optional) The maximum number of entries to return.
+	 *            If unspecified, no limit is applied to the number of entries in the returned.
+	 * @param string (optional) An LDAP filter to apply when fetching children, example: "(objectClass=inetOrgPerson)"
+	 * @param constant (optional) The LDAP deref setting to use in the query
+	 * @return array An array of DN strings listing the immediate children of the specified entry.
+	 */
+	public function getContainerContents($dn,$method=null,$size_limit=0,$filter='(objectClass=*)',$deref=LDAP_DEREF_NEVER) {
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s,%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$size_limit,$filter,$deref);
+
+		$return = array();
+
+		$query = array();
+		$query['base'] = $this->escapeDN($dn);
+		$query['attrs'] = array('dn');
+		$query['filter'] = $filter;
+		$query['deref'] = $deref;
+		$query['scope'] = 'one';
+		$query['size_limit'] = $size_limit;
+		$results = $this->query($query,$method);
+
+		if ($results) {
+			foreach ($results as $index => $entry) {
+				$child_dn = $entry['dn'];
+				array_push($return,$child_dn);
+			}
+		}
+
+		if (DEBUG_ENABLED)
+			debug_log('Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return);
+
+		# Sort the results
+		asort($return);
+
+		return $return;
+	}
+
+	/**
+	 * Explode a DN into an array of its RDN parts.
+	 *
+	 * @param string The DN to explode.
+	 * @param int (optional) Whether to include attribute names (see http://php.net/ldap_explode_dn for details)
+	 *
+	 * @return array An array of RDN parts of this format:
+	 * 
+	 *	Array
+	 *		(
+	 *			[0] => uid=ppratt
+	 *			[1] => ou=People
+	 *			[2] => dc=example
+	 *			[3] => dc=com
+	 *		)
+	 * 
+	 *
+	 * NOTE: When a multivalue RDN is passed to ldap_explode_dn, the results returns with 'value + value';
+	 */
+	private function explodeDN($dn,$with_attributes=0) {
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__,$dn,$with_attributes);
+
+		static $CACHE;
+
+		if (isset($CACHE['explode'][$dn][$with_attributes])) {
+			if (DEBUG_ENABLED)
+				debug_log('Return CACHED result (%s) for (%s)',1,__FILE__,__LINE__,__METHOD__,
+					$CACHE['explode'][$dn][$with_attributes],$dn);
+
+			return $CACHE['explode'][$dn][$with_attributes];
+		}
+
+		$dn = addcslashes($dn,'<>+";');
+
+		# split the dn
+		$result[0] = ldap_explode_dn($this->escapeDN($dn),0);
+		$result[1] = ldap_explode_dn($this->escapeDN($dn),1);
+		if (! $result[$with_attributes]) {
+			if (DEBUG_ENABLED)
+				debug_log('Returning NULL - NO result.',1,__FILE__,__LINE__,__METHOD__);
+
+			return array();
+		}
+
+		# Remove our count value that ldap_explode_dn returns us.
+		unset($result[0]['count']);
+		unset($result[1]['count']);
+
+		# Record the forward and reverse entries in the cache.
+		foreach ($result as $key => $value) {
+			# translate hex code into ascii for display
+			$result[$key] = $this->unescapeDN($value);
+
+			$CACHE['explode'][implode(',',$result[0])][$key] = $result[$key];
+			$CACHE['explode'][implode(',',array_reverse($result[0]))][$key] = array_reverse($result[$key]);
+		}
+
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s,%s), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,
+				$dn,$with_attributes,$result[$with_attributes]);
+
+		return $result[$with_attributes];
+	}
+
+	/**
+	 * Parse a DN and escape any special characters
+	 */
+	protected function escapeDN($dn) {
+		if (! trim($dn))
+			return $dn;
+
+		$olddn = $dn;
+
+		# Check if the RDN has a comma and escape it.
+		while (preg_match('/([^\\\\]),(\s*[^=]*\s*),/',$dn))
+			$dn = preg_replace('/([^\\\\]),(\s*[^=]*\s*),/','$1\\\\2C$2,',$dn);
+
+		$dn = preg_replace('/([^\\\\]),(\s*[^=]*\s*)([^,])$/','$1\\\\2C$2$3',$dn);
+
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,
+				$olddn,$dn);
+
+		return $dn;
+	}
+
+	/**
+	 * Parse a DN and unescape any special characters
+	 */
+	private function unescapeDN($dn) {
+		if (is_array($dn)) {
+			$a = array();
+			foreach ($dn as $key => $rdn)
+				$a[$key] = preg_replace('/\\\([0-9A-Fa-f]{2})/e',"''.chr(hexdec('\\1')).''",$rdn);
+
+			return $a;
+
+		} else
+			return preg_replace('/\\\([0-9A-Fa-f]{2})/e',"''.chr(hexdec('\\1')).''",$dn);
+	}
+
+	/** Schema Methods **/
+	/**
+	 * This function will query the ldap server and request the subSchemaSubEntry which should be the Schema DN.
+	 *
+	 * If we cant connect to the LDAP server, we'll return false.
+	 * If we can connect but cant get the entry, then we'll return null.
+	 *
+	 * @param string Which connection method resource to use
+	 * @param dn The DN to use to obtain the schema
+	 * @return array|false Schema if available, null if its not or false if we cant connect.
+	 */
+	private function getSchemaDN($method=null,$dn='') {
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s)',25,__FILE__,__LINE__,__METHOD__,$dn);
+
+		# If we already got the SchemaDN, then return it.
+		if ($this->_schemaDN)
+			return $this->_schemaDN;
+
+		if (! $this->connect($method))
+			return false;
+
+		$search = @ldap_read($this->connect($method),$dn,'objectClass=*',array('subschemaSubentry'));
+
+		if (DEBUG_ENABLED)
+			debug_log('Search returned (%s)',24,__FILE__,__LINE__,__METHOD__,is_resource($search));
+
+		# Fix for broken ldap.conf configuration.
+		if (! $search && ! $dn) {
+			if (DEBUG_ENABLED)
+				debug_log('Trying to find the DN for "broken" ldap.conf',80,__FILE__,__LINE__,__METHOD__);
+
+			if (isset($this->_baseDN)) {
+				foreach ($this->_baseDN as $base) {
+					$search = @ldap_read($this->connect($method),$base,'objectClass=*',array('subschemaSubentry'));
+
+					if (DEBUG_ENABLED)
+						debug_log('Search returned (%s) for base (%s)',24,__FILE__,__LINE__,__METHOD__,
+							is_resource($search),$base);
+
+					if ($search)
+						break;
+				}
+			}
+		}
+
+		if (! $search)
+			return null;
+
+		if (! @ldap_count_entries($this->connect($method),$search)) {
+			if (DEBUG_ENABLED)
+				debug_log('Search returned 0 entries. Returning NULL',25,__FILE__,__LINE__,__METHOD__);
+
+			return null;
+		}
+
+		$entries = @ldap_get_entries($this->connect($method),$search);
+
+		if (DEBUG_ENABLED)
+			debug_log('Search returned [%s]',24,__FILE__,__LINE__,__METHOD__,$entries);
+
+		if (! $entries || ! is_array($entries))
+			return null;
+
+		$entry = isset($entries[0]) ? $entries[0] : false;
+		if (! $entry) {
+			if (DEBUG_ENABLED)
+				debug_log('Entry is false, Returning NULL',80,__FILE__,__LINE__,__METHOD__);
+
+			return null;
+		}
+
+		$sub_schema_sub_entry = isset($entry[0]) ? $entry[0] : false;
+		if (! $sub_schema_sub_entry) {
+			if (DEBUG_ENABLED)
+				debug_log('Sub Entry is false, Returning NULL',80,__FILE__,__LINE__,__METHOD__);
+
+			return null;
+		}
+
+		$this->_schemaDN = isset($entry[$sub_schema_sub_entry][0]) ? $entry[$sub_schema_sub_entry][0] : false;
+
+		if (DEBUG_ENABLED)
+			debug_log('Returning (%s)',25,__FILE__,__LINE__,__METHOD__,$this->_schemaDN);
+
+		return $this->_schemaDN;
+	}
+
+	/**
+	 * Fetches the raw schema array for the subschemaSubentry of the server. Note,
+	 * this function has grown many hairs to accomodate more LDAP servers. It is
+	 * needfully complicated as it now supports many popular LDAP servers that
+	 * don't necessarily expose their schema "the right way".
+	 *
+	 * Please note: On FC systems, it seems that php_ldap uses /etc/openldap/ldap.conf in
+	 * the search base if it is blank - so edit that file and comment out the BASE line.
+	 *
+	 * @param string Which connection method resource to use
+	 * @param string A string indicating which type of schema to
+	 *		fetch. Five valid values: 'objectclasses', 'attributetypes',
+	 *		'ldapsyntaxes', 'matchingruleuse', or 'matchingrules'.
+	 *		Case insensitive.
+	 * @param dn (optional) This paremeter is the DN of the entry whose schema you
+	 * 		would like to fetch. Entries have the option of specifying
+	 * 		their own subschemaSubentry that points to the DN of the system
+	 * 		schema entry which applies to this attribute. If unspecified,
+	 *		this will try to retrieve the schema from the RootDSE subschemaSubentry.
+	 *		Failing that, we use some commonly known schema DNs. Default
+	 *		value is the Root DSE DN (zero-length string)
+	 * @return array an array of strings of this form:
+	 *	Array (
+	 *		[0] => "(1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' DESC 'Pool ...
+	 *		[1] => "(1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' DESC 'Sa ...
+	 *	etc.
+	 */
+	private function getRawSchema($method,$schema_to_fetch,$dn='') {
+		if (DEBUG_ENABLED)
+			debug_log('Entered with (%s,%s)',25,__FILE__,__LINE__,__METHOD__,$schema_to_fetch,$dn);
+
+		$valid_schema_to_fetch = array('objectclasses','attributetypes','ldapsyntaxes','matchingrules','matchingruleuse');
+
+		if (! $this->connect($method) || $this->noconnect)
+			return false;
+
+		# error checking
+		$schema_to_fetch = strtolower($schema_to_fetch);
+
+		if (! is_null($this->_schema_entries) && isset($this->_schema_entries[$schema_to_fetch])) {
+			$schema = $this->_schema_entries[$schema_to_fetch];
+
+			if (DEBUG_ENABLED)
+				debug_log('Returning CACHED (%s)',25,__FILE__,__LINE__,__METHOD__,$schema);
+
+			return $schema;
+		}
+
+		# This error message is not localized as only developers should ever see it
+		if (! in_array($schema_to_fetch,$valid_schema_to_fetch))
+			error(sprintf('Bad parameter provided to function to %s::getRawSchema(). "%s" is not valid for the schema_to_fetch parameter.',
+					get_class($this),$schema_to_fetch),'error','index.php');
+
+		# Try to get the schema DN from the specified entry.
+		$schema_dn = $this->getSchemaDN($method,$dn);
+
+		# Do we need to try again with the Root DSE?
+		if (! $schema_dn && trim($dn))
+			$schema_dn = $this->getSchemaDN($method,'');
+
+		# Store the eventual schema retrieval in $schema_search
+		$schema_search = null;
+
+		if ($schema_dn) {
+			if (DEBUG_ENABLED)
+				debug_log('Using Schema DN (%s)',24,__FILE__,__LINE__,__METHOD__,$schema_dn);
+
+			foreach (array('(objectClass=*)','(objectClass=subschema)') as $schema_filter) {
+				if (DEBUG_ENABLED)
+					debug_log('Looking for schema with Filter (%s)',24,__FILE__,__LINE__,__METHOD__,$schema_filter);
+
+				$schema_search = @ldap_read($this->connect($method),$schema_dn,$schema_filter,array($schema_to_fetch),0,0,0,LDAP_DEREF_NEVER);
+
+				if (is_null($schema_search))
+					continue;
+
+				$schema_entries = @ldap_get_entries($this->connect($method),$schema_search);
+
+				if (DEBUG_ENABLED)
+					debug_log('Search returned [%s]',24,__FILE__,__LINE__,__METHOD__,$schema_entries);
+
+				if (is_array($schema_entries) && isset($schema_entries['count']) && $schema_entries['count']) {
+					if (DEBUG_ENABLED)
+						debug_log('Found schema with (DN:%s) (FILTER:%s) (ATTR:%s)',24,__FILE__,__LINE__,__METHOD__,
+							$schema_dn,$schema_filter,$schema_to_fetch);
+
+					break;
+				}
+
+				if (DEBUG_ENABLED)
+					debug_log('Didnt find schema with filter (%s)',24,__FILE__,__LINE__,__METHOD__,$schema_filter);
+
+				unset($schema_entries);
+				$schema_search = null;
+			}
+		}
+
+		/* Second chance: If the DN or Root DSE didn't give us the subschemaSubentry, ie $schema_search
+		 * is still null, use some common subSchemaSubentry DNs as a work-around. */
+		if (is_null($schema_search)) {
+			if (DEBUG_ENABLED)
+				debug_log('Attempting work-arounds for "broken" LDAP servers...',24,__FILE__,__LINE__,__METHOD__);
+
+			foreach ($this->getBaseDN() as $base) {
+				$ldap['W2K3 AD'][expand_dn_with_base($base,'cn=Aggregate,cn=Schema,cn=configuration,')] = '(objectClass=*)';
+				$ldap['W2K AD'][expand_dn_with_base($base,'cn=Schema,cn=configuration,')] = '(objectClass=*)';
+				$ldap['W2K AD'][expand_dn_with_base($base,'cn=Schema,ou=Admin,')] = '(objectClass=*)';
+			}
+
+			# OpenLDAP and Novell
+			$ldap['OpenLDAP']['cn=subschema'] = '(objectClass=*)';
+
+			foreach ($ldap as $ldap_server_name => $ldap_options) {
+				foreach ($ldap_options as $ldap_dn => $ldap_filter) {
+					if (DEBUG_ENABLED)
+						debug_log('Attempting [%s] (%s) (%s)
',24,__FILE__,__LINE__,__METHOD__, + $ldap_server_name,$ldap_dn,$ldap_filter); + + $schema_search = @ldap_read($this->connect($method),$ldap_dn,$ldap_filter, + array($schema_to_fetch), 0, 0, 0, LDAP_DEREF_NEVER); + if (is_null($schema_search)) + continue; + + $schema_entries = @ldap_get_entries($this->connect($method),$schema_search); + + if (DEBUG_ENABLED) + debug_log('Search returned [%s]',24,__FILE__,__LINE__,__METHOD__,$schema_entries); + + if ($schema_entries && isset($schema_entries[0][$schema_to_fetch])) { + if (DEBUG_ENABLED) + debug_log('Found schema with filter of (%s)',24,__FILE__,__LINE__,__METHOD__,$ldap_filter); + + break; + } + + if (DEBUG_ENABLED) + debug_log('Didnt find schema with filter (%s)',24,__FILE__,__LINE__,__METHOD__,$ldap_filter); + + unset($schema_entries); + $schema_search = null; + } + if ($schema_search) + break; + } + } + + if (is_null($schema_search)) { + /* Still cant find the schema, try with the RootDSE + * Attempt to pull schema from Root DSE with scope "base", or + * Attempt to pull schema from Root DSE with scope "one" (work-around for Isode M-Vault X.500/LDAP) */ + foreach (array('base','one') as $ldap_scope) { + if (DEBUG_ENABLED) + debug_log('Attempting to find schema with scope (%s), filter (objectClass=*) and a blank base.',24,__FILE__,__LINE__,__METHOD__, + $ldap_scope); + + switch ($ldap_scope) { + case 'base': + $schema_search = @ldap_read($this->connect($method),'','(objectClass=*)',array($schema_to_fetch),0,0,0,LDAP_DEREF_NEVER); + break; + + case 'one': + $schema_search = @ldap_list($this->connect($method),'','(objectClass=*)',array($schema_to_fetch),0,0,0,LDAP_DEREF_NEVER); + break; + } + + if (is_null($schema_search)) + continue; + + $schema_entries = @ldap_get_entries($this->connect($method),$schema_search); + if (DEBUG_ENABLED) + debug_log('Search returned [%s]',24,__FILE__,__LINE__,__METHOD__,$schema_entries); + + if ($schema_entries && isset($schema_entries[0][$schema_to_fetch])) { + if (DEBUG_ENABLED) + debug_log('Found schema with filter of (%s)',24,__FILE__,__LINE__,__METHOD__,'(objectClass=*)'); + + break; + } + + if (DEBUG_ENABLED) + debug_log('Didnt find schema with filter (%s)',24,__FILE__,__LINE__,__METHOD__,'(objectClass=*)'); + + unset($schema_entries); + $schema_search = null; + } + } + + $schema_error_message = 'Please contact the phpLDAPadmin developers and let them know:
  • Which LDAP server you are running, including which version
  • What OS it is running on
  • Which version of PHP
  • As well as a link to some documentation that describes how to obtain the SCHEMA information

We\'ll then add support for your LDAP server in an upcoming release.'; + $schema_error_message_array = array('objectclasses','attributetypes'); + + # Shall we just give up? + if (is_null($schema_search)) { + # We need to have objectclasses and attribues, so display an error, asking the user to get us this information. + if (in_array($schema_to_fetch,$schema_error_message_array)) + system_message(array( + 'title'=>sprintf('%s (%s)',_('Our attempts to find your SCHEMA have failed'),$schema_to_fetch), + 'body'=>sprintf('%s: %s',_('Error'),$schema_error_message), + 'type'=>'error')); + else + if (DEBUG_ENABLED) + debug_log('Returning because schema_search is NULL ()',25,__FILE__,__LINE__,__METHOD__); + + # We'll set this, so if we return here our cache will return the known false. + $this->_schema_entries[$schema_to_fetch] = false; + return false; + } + + if (! $schema_entries) { + $return = false; + if (DEBUG_ENABLED) + debug_log('Returning false since ldap_get_entries() returned false.',25,__FILE__,__LINE__,__METHOD__,$return); + + return $return; + } + + if(! isset($schema_entries[0][$schema_to_fetch])) { + if (in_array($schema_to_fetch,$schema_error_message_array)) { + error(sprintf('Our attempts to find your SCHEMA for "%s" has return UNEXPECTED results.

(We expected a "%s" in the $schema array but it wasnt there.)

%s

Dump of $schema_search:
%s
', + $schema_to_fetch,gettype($schema_search),$schema_error_message,serialize($schema_entries)),'error','index.php'); + + } else { + $return = false; + + if (DEBUG_ENABLED) + debug_log('Returning because (%s) isnt in the schema array. (%s)',25,__FILE__,__LINE__,__METHOD__,$schema_to_fetch,$return); + + return $return; + } + } + + /* Make a nice array of this form: + Array ( + [0] => "(1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' DESC 'Pool ...)" + [1] => "(1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' DESC 'Sa ...)" + etc.) */ + + $schema = $schema_entries[0][$schema_to_fetch]; + unset($schema['count']); + $this->_schema_entries[$schema_to_fetch] = $schema; + + if (DEBUG_ENABLED) + debug_log('Returning (%s)',25,__FILE__,__LINE__,__METHOD__,$schema); + + return $schema; + } + + /** + * Gets a single ObjectClass object specified by name. + * + * @param string $oclass_name The name of the objectClass to fetch. + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return ObjectClass The specified ObjectClass object or false on error. + * + * @see ObjectClass + * @see SchemaObjectClasses + */ + public function getSchemaObjectClass($oclass_name,$method=null,$dn='') { + $oclass_name = strtolower($oclass_name); + $socs = $this->SchemaObjectClasses($method,$dn); + + # Default return value + $return = false; + + if (isset($socs[$oclass_name])) + $return = $socs[$oclass_name]; + + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s), Returning (%s).',25,__FILE__,__LINE__,__METHOD__, + $oclass_name,$dn,$return); + + return $return; + } + + /** + * Gets a single AttributeType object specified by name. + * + * @param string $oclass_name The name of the AttributeType to fetch. + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return AttributeType The specified AttributeType object or false on error. + * + * @see AttributeType + * @see SchemaAttributes + */ + public function getSchemaAttribute($attr_name,$method=null,$dn='') { + $attr_name = strtolower($attr_name); + $sattrs = $this->SchemaAttributes($method,$dn); + + # Default return value + $return = false; + + if (isset($sattrs[$attr_name])) + $return = $sattrs[$attr_name]; + + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s), Returning (%s).',25,__FILE__,__LINE__,__METHOD__, + $attr_name,$dn,$return); + + return $return; + } + + /** + * Gets an associative array of ObjectClass objects for the specified + * server. Each array entry's key is the name of the objectClass + * in lower-case and the value is an ObjectClass object. + * + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return array An array of ObjectClass objects. + * + * @see ObjectClass + * @see getSchemaObjectClass + */ + public function SchemaObjectClasses($method=null,$dn='') { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',25,__FILE__,__LINE__,__METHOD__,$dn); + + # Set default return + $return = null; + + if ($return = get_cached_item($this->index,'schema','objectclasses')) { + if (DEBUG_ENABLED) + debug_log('Returning CACHED [%s] (%s)',25,__FILE__,__LINE__,__METHOD__,$this->index,'objectclasses'); + + return $return; + } + + $raw = $this->getRawSchema($method,'objectclasses',$dn); + + if ($raw) { + # Build the array of objectClasses + $return = array(); + + foreach ($raw as $line) { + if (is_null($line) || ! strlen($line)) + continue; + + $object_class = new ObjectClass($line,$this); + $return[$object_class->getName()] = $object_class; + } + + # Now go through and reference the parent/child relationships + foreach ($return as $oclass) + foreach ($oclass->getSupClasses() as $parent_name) + if (isset($return[strtolower($parent_name)])) + $return[strtolower($parent_name)]->addChildObjectClass($oclass->getName(false)); + + ksort($return); + + # cache the schema to prevent multiple schema fetches from LDAP server + set_cached_item($this->index,'schema','objectclasses',$return); + } + + if (DEBUG_ENABLED) + debug_log('Returning (%s)',25,__FILE__,__LINE__,__METHOD__,$return); + + return $return; + } + + /** + * Gets an associative array of AttributeType objects for the specified + * server. Each array entry's key is the name of the attributeType + * in lower-case and the value is an AttributeType object. + * + * @param string $dn (optional) It is easier to fetch schema if a DN is provided + * which defines the subschemaSubEntry attribute (all entries should). + * + * @return array An array of AttributeType objects. + */ + public function SchemaAttributes($method=null,$dn='') { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',25,__FILE__,__LINE__,__METHOD__,$dn); + + # Set default return + $return = null; + + if ($return = get_cached_item($this->index,'schema','attributes')) { + if (DEBUG_ENABLED) + debug_log('(): Returning CACHED [%s] (%s)',25,__FILE__,__LINE__,__METHOD__,$this->index,'attributes'); + + return $return; + } + + $raw = $this->getRawSchema($method,'attributeTypes',$dn); + + if ($raw) { + # build the array of attribueTypes + $syntaxes = $this->SchemaSyntaxes($method,$dn); + $attrs = array(); + + /** + * bug 856832: create two arrays - one indexed by name (the standard + * $attrs array above) and one indexed by oid (the new $attrs_oid array + * below). This will help for directory servers, like IBM's, that use OIDs + * in their attribute definitions of SUP, etc + */ + $attrs_oid = array(); + foreach ($raw as $line) { + if (is_null($line) || ! strlen($line)) + continue; + + $attr = new AttributeType($line); + if (isset($syntaxes[$attr->getSyntaxOID()])) { + $syntax = $syntaxes[$attr->getSyntaxOID()]; + $attr->setType($syntax->getDescription()); + } + $attrs[$attr->getName()] = $attr; + + /** + * bug 856832: create an entry in the $attrs_oid array too. This + * will be a ref to the $attrs entry for maintenance and performance + * reasons + */ + $attrs_oid[$attr->getOID()] = &$attrs[$attr->getName()]; + } + + # go back and add data from aliased attributeTypes + foreach ($attrs as $name => $attr) { + $aliases = $attr->getAliases(); + + if (is_array($aliases) && count($aliases) > 0) { + /* foreach of the attribute's aliases, create a new entry in the attrs array + * with its name set to the alias name, and all other data copied.*/ + foreach ($aliases as $alias_attr_name) { + $new_attr = clone $attr; + + $new_attr->setName($alias_attr_name); + $new_attr->addAlias($attr->getName(false)); + $new_attr->removeAlias($alias_attr_name); + $new_attr_key = strtolower($alias_attr_name); + $attrs[$new_attr_key] = $new_attr; + } + } + } + + # go back and add any inherited descriptions from parent attributes (ie, cn inherits name) + foreach ($attrs as $key => $attr) { + $sup_attr_name = $attr->getSupAttribute(); + $sup_attr = null; + + if (trim($sup_attr_name)) { + + /* This loop really should traverse infinite levels of inheritance (SUP) for attributeTypes, + * but just in case we get carried away, stop at 100. This shouldn't happen, but for + * some weird reason, we have had someone report that it has happened. Oh well.*/ + $i = 0; + while ($i++<100 /** 100 == INFINITY ;) */) { + + if (isset($attrs_oid[$sup_attr_name])) { + $attr->setSupAttribute($attrs_oid[$sup_attr_name]->getName()); + $sup_attr_name = $attr->getSupAttribute(); + } + + if (! isset($attrs[strtolower($sup_attr_name)])){ + error(sprintf('Schema error: attributeType "%s" inherits from "%s", but attributeType "%s" does not exist.', + $attr->getName(),$sup_attr_name,$sup_attr_name),'error','index.php'); + return; + } + + $sup_attr = $attrs[strtolower($sup_attr_name)]; + $sup_attr_name = $sup_attr->getSupAttribute(); + + # Does this superior attributeType not have a superior attributeType? + if (is_null($sup_attr_name) || strlen(trim($sup_attr_name)) == 0) { + + /* Since this attribute's superior attribute does not have another superior + * attribute, clone its properties for this attribute. Then, replace + * those cloned values with those that can be explicitly set by the child + * attribute attr). Save those few properties which the child can set here:*/ + $tmp_name = $attr->getName(false); + $tmp_oid = $attr->getOID(); + $tmp_sup = $attr->getSupAttribute(); + $tmp_aliases = $attr->getAliases(); + $tmp_single_val = $attr->getIsSingleValue(); + $tmp_desc = $attr->getDescription(); + + /* clone the SUP attributeType and populate those values + * that were set by the child attributeType */ + $attr = clone $sup_attr; + + $attr->setOID($tmp_oid); + $attr->setName($tmp_name); + $attr->setSupAttribute($tmp_sup); + $attr->setAliases($tmp_aliases); + $attr->setDescription($tmp_desc); + + /* only overwrite the SINGLE-VALUE property if the child explicitly sets it + * (note: All LDAP attributes default to multi-value if not explicitly set SINGLE-VALUE) */ + if ($tmp_single_val) + $attr->setIsSingleValue(true); + + /* replace this attribute in the attrs array now that we have populated + new values therein */ + $attrs[$key] = $attr; + + # very important: break out after we are done with this attribute + $sup_attr_name = null; + $sup_attr = null; + break; + } + } + } + } + + ksort($attrs); + + # Add the used in and required_by values. + $socs = $this->SchemaObjectClasses($method); + if (! is_array($socs)) + return array(); + + foreach ($socs as $object_class) { + $must_attrs = $object_class->getMustAttrNames(); + $may_attrs = $object_class->getMayAttrNames(); + $oclass_attrs = array_unique(array_merge($must_attrs,$may_attrs)); + + # Add Used In. + foreach ($oclass_attrs as $attr_name) + if (isset($attrs[strtolower($attr_name)])) + $attrs[strtolower($attr_name)]->addUsedInObjectClass($object_class->getName(false)); + + # Add Required By. + foreach ($must_attrs as $attr_name) + if (isset($attrs[strtolower($attr_name)])) + $attrs[strtolower($attr_name)]->addRequiredByObjectClass($object_class->getName(false)); + + # Force May + foreach ($object_class->getForceMayAttrs() as $attr_name) + if (isset($attrs[strtolower($attr_name->name)])) + $attrs[strtolower($attr_name->name)]->setForceMay(); + } + + $return = $attrs; + + # cache the schema to prevent multiple schema fetches from LDAP server + set_cached_item($this->index,'schema','attributes',$return); + } + + if (DEBUG_ENABLED) + debug_log('Returning (%s)',25,__FILE__,__LINE__,__METHOD__,$return); + + return $return; + } + + /** + * Returns an array of MatchingRule objects for the specified server. + * The key of each entry is the OID of the matching rule. + */ + public function MatchingRules($method=null,$dn='') { + # Set default return + $return = null; + + if ($return = get_cached_item($this->index,'schema','matchingrules')) { + if (DEBUG_ENABLED) + debug_log('Returning CACHED [%s] (%s).',25,__FILE__,__LINE__,__METHOD__,$this->index,'matchingrules'); + + return $return; + } + + # build the array of MatchingRule objects + $raw = $this->getRawSchema($method,'matchingRules',$dn); + + if ($raw) { + $rules = array(); + + foreach ($raw as $line) { + if (is_null($line) || ! strlen($line)) + continue; + + $rule = new MatchingRule($line); + $key = $rule->getName(); + $rules[$key] = $rule; + } + + ksort($rules); + + /* For each MatchingRuleUse entry, add the attributes who use it to the + * MatchingRule in the $rules array.*/ + $raw = $this->getRawSchema($method,'matchingRuleUse'); + + if ($raw != false) { + foreach ($raw as $line) { + if (is_null($line) || ! strlen($line)) + continue; + + $rule_use = new MatchingRuleUse($line); + $key = $rule_use->getName(); + + if (isset($rules[$key])) + $rules[$key]->setUsedByAttrs($rule_use->getUsedByAttrs()); + } + + } else { + /* No MatchingRuleUse entry in the subschema, so brute-forcing + * the reverse-map for the "$rule->getUsedByAttrs()" data.*/ + $sattrs = $this->SchemaAttributes($method,$dn); + if (is_array($sattrs)) + foreach ($sattrs as $attr) { + $rule_key = strtolower($attr->getEquality()); + + if (isset($rules[$rule_key])) + $rules[$rule_key]->addUsedByAttr($attr->getName(false)); + } + } + + $return = $rules; + + # cache the schema to prevent multiple schema fetches from LDAP server + set_cached_item($this->index,'schema','matchingrules',$return); + } + + if (DEBUG_ENABLED) + debug_log('Entered with (%s), Returning (%s).',25,__FILE__,__LINE__,__METHOD__,$dn,$return); + + return $return; + } + + /** + * Returns an array of Syntax objects that this LDAP server uses mapped to + * their descriptions. The key of each entry is the OID of the Syntax. + */ + public function SchemaSyntaxes($method=null,$dn='') { + # Set default return + $return = null; + + if ($return = get_cached_item($this->index,'schema','syntaxes')) { + if (DEBUG_ENABLED) + debug_log('Returning CACHED [%s] (%s).',25,__FILE__,__LINE__,__METHOD__,$this->index,'syntaxes'); + + return $return; + } + + $raw = $this->getRawSchema($method,'ldapSyntaxes',$dn); + + if ($raw) { + # build the array of attributes + $return = array(); + + foreach ($raw as $line) { + if (is_null($line) || ! strlen($line)) + continue; + + $syntax = new Syntax($line); + $key = strtolower(trim($syntax->getOID())); + + if (! $key) + continue; + + $return[$key] = $syntax; + } + + ksort($return); + + # cache the schema to prevent multiple schema fetches from LDAP server + set_cached_item($this->index,'schema','syntaxes',$return); + } + + if (DEBUG_ENABLED) + debug_log('Entered with (%s), Returning (%s).',25,__FILE__,__LINE__,__METHOD__,$dn,$return); + + return $return; + } + + /** + * This function determines if the specified attribute is contained in the force_may list + * as configured in config.php. + * + * @return boolean True if the specified attribute is in the $force_may list and false + * otherwise. + */ + function isForceMay($attr_name) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); + + return in_array($attr_name,$this->force_may); + } + + /** + * Much like getDNAttrValues(), but only returns the values for + * one attribute of an object. Example calls: + * + * + * print_r(getDNAttrValue('cn=Bob,ou=people,dc=example,dc=com','sn')); + * Array ( + * [0] => Smith + * ) + * + * print_r(getDNAttrValue('cn=Bob,ou=people,dc=example,dc=com','objectClass')); + * Array ( + * [0] => top + * [1] => person + * ) + * + * + * @param string The distinguished name (DN) of the entry whose attributes/values to fetch. + * @param string The attribute whose value(s) to return (ie, "objectClass", "cn", "userPassword") + * @param string Which connection method resource to use + * @param constant For aliases and referrals, this parameter specifies whether to + * follow references to the referenced DN or to fetch the attributes for + * the referencing DN. See http://php.net/ldap_search for the 4 valid + * options. + * @return array + * @see getDNAttrValues + * @todo Caching these values may be problematic with multiple calls and different deref values. + */ + public function getDNAttrValue($dn,$attr,$method=null,$deref=LDAP_DEREF_NEVER) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__, + $dn,$attr,$method,$deref); + + # Ensure our attr is in lowercase + $attr = strtolower($attr); + + $values = $this->getDNAttrValues($dn,$method,$deref); + + if (isset($values[$attr])) + return $values[$attr]; + else + return array(); + } + + /** + * Gets the attributes/values of an entry. Returns an associative array whose + * keys are attribute value names and whose values are arrays of values for + * said attribute. + * + * Optionally, callers may specify true for the parameter + * $lower_case_attr_names to force all keys in the associate array (attribute + * names) to be lower case. + * + * Example of its usage: + * + * print_r(getDNAttrValues('cn=Bob,ou=pepole,dc=example,dc=com') + * Array ( + * [objectClass] => Array ( + * [0] => person + * [1] => top + * ) + * [cn] => Array ( + * [0] => Bob + * ) + * [sn] => Array ( + * [0] => Jones + * ) + * [dn] => Array ( + * [0] => cn=Bob,ou=pepole,dc=example,dc=com + * ) + * ) + * + * + * @param string The distinguished name (DN) of the entry whose attributes/values to fetch. + * @param string Which connection method resource to use + * @param constant For aliases and referrals, this parameter specifies whether to + * follow references to the referenced DN or to fetch the attributes for + * the referencing DN. See http://php.net/ldap_search for the 4 valid + * options. + * @return array + * @see getDNSysAttrs + * @see getDNAttrValue + */ + public function getDNAttrValues($dn,$method=null,$deref=LDAP_DEREF_NEVER,$attrs=array('*','+')) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$method,$deref,$attrs); + + static $CACHE; + + $cacheindex = null; + $method = $this->getMethod($method); + + if (in_array('*',$attrs) && in_array('+',$attrs)) + $cacheindex = '&'; + elseif (in_array('+',$attrs)) + $cacheindex = '+'; + elseif (in_array('*',$attrs)) + $cacheindex = '*'; + + if (! is_null($cacheindex) && isset($CACHE[$this->index][$method][$dn][$cacheindex])) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s,%s), Returning CACHED (%s)',17,__FILE__,__LINE__,__METHOD__, + $dn,$method,$deref,$attrs,$CACHE[$this->index][$method][$dn][$cacheindex]); + + $results = $CACHE[$this->index][$method][$dn][$cacheindex]; + + } else { + $query = array(); + $query['base'] = $this->escapeDN($dn); + $query['scope'] = 'base'; + $query['deref'] = $deref; + $query['attrs'] = $attrs; + $query['baseok'] = true; + $results = $this->query($query,$method); + + if (count($results)) + $results = array_pop($results); + + $results = array_change_key_case($results); + + # Covert all our result key values to an array + foreach ($results as $key => $values) + if (! is_array($results[$key])) + $results[$key] = array($results[$key]); + + # Finally sort the results + ksort($results); + + if (! is_null($cacheindex) && count($results)) + $CACHE[$this->index][$method][$dn][$cacheindex] = $results; + } + + return $results; + } + + /** + * Returns true if the attribute specified is required to take as input a DN. + * Some examples include 'distinguishedName', 'member' and 'uniqueMember'. + * + * @param string $attr_name The name of the attribute of interest (case insensitive) + * @return boolean + */ + function isDNAttr($attr_name,$method=null) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); + + # Simple test first + $dn_attrs = array('aliasedObjectName'); + foreach ($dn_attrs as $dn_attr) + if (strcasecmp($attr_name,$dn_attr) == 0) + return true; + + # Now look at the schema OID + $sattr = $this->getSchemaAttribute($attr_name); + if (! $sattr) + return false; + + $syntax_oid = $sattr->getSyntaxOID(); + if ('1.3.6.1.4.1.1466.115.121.1.12' == $syntax_oid) + return true; + if ('1.3.6.1.4.1.1466.115.121.1.34' == $syntax_oid) + return true; + + $syntaxes = $this->SchemaSyntaxes($method); + if (! isset($syntaxes[$syntax_oid])) + return false; + + $syntax_desc = $syntaxes[ $syntax_oid ]->getDescription(); + if (strpos(strtolower($syntax_desc),'distinguished name')) + return true; + + return false; + } + + /** + * Used to determine if the specified attribute is indeed a jpegPhoto. If the + * specified attribute is one that houses jpeg data, true is returned. Otherwise + * this function returns false. + * + * @param string $attr_name The name of the attribute to test. + * @return boolean + * @see draw_jpeg_photo + */ + function isJpegPhoto($attr_name) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); + + # easy quick check + if (! strcasecmp($attr_name,'jpegPhoto') || ! strcasecmp($attr_name,'photo')) + return true; + + # go to the schema and get the Syntax OID + $sattr = $this->getSchemaAttribute($attr_name); + if (! $sattr) + return false; + + $oid = $sattr->getSyntaxOID(); + $type = $sattr->getType(); + + if (! strcasecmp($type,'JPEG') || ($oid == '1.3.6.1.4.1.1466.115.121.1.28')) + return true; + + return false; + } + + /** + * Given an attribute name and server ID number, this function returns + * whether the attrbiute contains boolean data. This is useful for + * developers who wish to display the contents of a boolean attribute + * with a drop-down. + * + * @param string $attr_name The name of the attribute to test. + * @return boolean + */ + function isAttrBoolean($attr_name) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); + + $type = ($sattr = $this->getSchemaAttribute($attr_name)) ? $sattr->getType() : null; + + if (! strcasecmp('boolean',$type) || + ! strcasecmp('isCriticalSystemObject',$attr_name) || + ! strcasecmp('showInAdvancedViewOnly',$attr_name)) + return true; + + else + return false; + } + + /** + * Given an attribute name and server ID number, this function returns + * whether the attribute may contain binary data. This is useful for + * developers who wish to display the contents of an arbitrary attribute + * but don't want to dump binary data on the page. + * + * @param string $attr_name The name of the attribute to test. + * @return boolean + * + * @see isJpegPhoto + */ + function isAttrBinary($attr_name) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); + + /** + * Determining if an attribute is binary can be an expensive operation. + * We cache the results for each attr name on each server in the $attr_cache + * to speed up subsequent calls. The $attr_cache looks like this: + * + * Array + * 0 => Array + * 'objectclass' => false + * 'cn' => false + * 'usercertificate' => true + * 1 => Array + * 'jpegphoto' => true + * 'cn' => false + */ + + static $attr_cache; + + $attr_name = strtolower($attr_name); + + if (isset($attr_cache[$this->index][$attr_name])) + return $attr_cache[$this->index][$attr_name]; + + if ($attr_name == 'userpassword') { + $attr_cache[$this->index][$attr_name] = false; + return false; + } + + # Quick check: If the attr name ends in ";binary", then it's binary. + if (strcasecmp(substr($attr_name,strlen($attr_name) - 7),';binary') == 0) { + $attr_cache[$this->index][$attr_name] = true; + return true; + } + + # See what the server schema says about this attribute + $sattr = $this->getSchemaAttribute($attr_name); + if (! is_object($sattr)) { + + /* Strangely, some attributeTypes may not show up in the server + * schema. This behavior has been observed in MS Active Directory.*/ + $type = null; + $syntax = null; + + } else { + $type = $sattr->getType(); + $syntax = $sattr->getSyntaxOID(); + } + + if (strcasecmp($type,'Certificate') == 0 || + strcasecmp($type,'Binary') == 0 || + strcasecmp($attr_name,'usercertificate') == 0 || + strcasecmp($attr_name,'usersmimecertificate') == 0 || + strcasecmp($attr_name,'networkaddress') == 0 || + strcasecmp($attr_name,'objectGUID') == 0 || + strcasecmp($attr_name,'objectSID') == 0 || + strcasecmp($attr_name,'jpegPhoto') == 0 || + $syntax == '1.3.6.1.4.1.1466.115.121.1.10' || + $syntax == '1.3.6.1.4.1.1466.115.121.1.28' || + $syntax == '1.3.6.1.4.1.1466.115.121.1.5' || + $syntax == '1.3.6.1.4.1.1466.115.121.1.8' || + $syntax == '1.3.6.1.4.1.1466.115.121.1.9' + ) { + + $attr_cache[$this->index][$attr_name] = true; + return true; + + } else { + $attr_cache[$this->index][$attr_name] = false; + return false; + } + } + + /** + * This function will test if a user is a member of a group. + * + * Inputs: + * @param string $user membership value that is being checked + * @param dn $group DN to see if user is a member + * @return bool true|false + */ + function userIsMember($user,$group) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s)',17,__FILE__,__LINE__,__METHOD__,$user,$group); + + $user = strtolower($user); + $group = $this->getDNAttrValues($group); + + # If you are using groupOfNames objectClass + if (array_key_exists('member',$group) && ! is_array($group['member'])) + $group['member'] = array($group['member']); + + if (array_key_exists('member',$group) && + in_array($user,arrayLower($group['member']))) + + return true; + + # If you are using groupOfUniqueNames objectClass + if (array_key_exists('uniquemember',$group) && ! is_array($group['uniquemember'])) + $group['uniquemember'] = array($group['uniquemember']); + + if (array_key_exists('uniquemember',$group) && + in_array($user,arrayLower($group['uniquemember']))) + + return true; + + return false; + } + + /** + * This function will determine if the user is allowed to login based on a filter + */ + protected function userIsAllowedLogin($dn) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$dn); + + $dn = trim(strtolower($dn)); + + if (! $this->getValue('login','allowed_dns')) + return true; + + foreach ($this->getValue('login','allowed_dns') as $login_allowed_dn) { + if (DEBUG_ENABLED) + debug_log('Working through (%s)',80,__FILE__,__LINE__,__METHOD__,$login_allowed_dn); + + /* Check if $login_allowed_dn is an ldap search filter + * Is first occurence of 'filter=' (case ensitive) at position 0 ? */ + if (preg_match('/^\([&|]\(/',$login_allowed_dn)) { + $query = array(); + $query['filter'] = $login_allowed_dn; + $query['attrs'] = array('dn'); + + foreach($this->getBaseDN() as $base_dn) { + $query['base'] = $base_dn; + + $results = $this->query($query,null); + + if (DEBUG_ENABLED) + debug_log('Search, Filter [%s], BaseDN [%s] Results [%s]',16,__FILE__,__LINE__,__METHOD__, + $query['filter'],$query['base'],$results); + + if ($results) { + $dn_array = array(); + + foreach ($results as $result) + array_push($dn_array,$result['dn']); + + $dn_array = array_unique($dn_array); + + if (count($dn_array)) + foreach ($dn_array as $result_dn) { + if (DEBUG_ENABLED) + debug_log('Comparing with [%s]',80,__FILE__,__LINE__,__METHOD__,$result_dn); + + # Check if $result_dn is a user DN + if (strcasecmp($dn,trim(strtolower($result_dn))) == 0) + return true; + + # Check if $result_dn is a group DN + if ($this->userIsMember($dn,$result_dn)) + return true; + } + } + } + } + + # Check if $login_allowed_dn is a user DN + if (strcasecmp($dn,trim(strtolower($login_allowed_dn))) == 0) + return true; + + # Check if $login_allowed_dn is a group DN + if ($this->userIsMember($dn,$login_allowed_dn)) + return true; + } + + return false; + } +} +?> diff --git a/lib/ds_ldap_pla.php b/lib/ds_ldap_pla.php new file mode 100644 index 0000000..5f3a819 --- /dev/null +++ b/lib/ds_ldap_pla.php @@ -0,0 +1,724 @@ +default->appearance['password_hash'] = array( + 'desc'=>'Default HASH to use for passwords', + 'default'=>'md5'); + + $this->default->appearance['show_create'] = array( + 'desc'=>'Whether to show the "Create new Entry here" in the tree browser', + 'default'=>true); + + $this->default->query['disable_default'] = array( + 'desc'=>'Configuration to disable the default query template', + 'default'=>false); + + $this->default->query['custom_only'] = array( + 'desc'=>'Configuration to force the usage of custom query templates', + 'default'=>false); + + $this->default->server['branch_rename'] = array( + 'desc'=>'Enable renaming of branches', + 'default'=>false); + + $this->default->server['custom_attrs'] = array( + 'desc'=>'Custom operational attributes to be treated as regular attributes', + 'default'=>array('')); + + $this->default->server['custom_sys_attrs'] = array( + 'desc'=>'Custom operational attributes to be treated as internal attributes', + 'default'=>array('+')); + + # This was added in case the LDAP server doesnt provide them with a base +,* query. + $this->default->server['root_dse_attributes'] = array( + 'desc'=>'RootDSE attributes for use when displaying server info', + 'default'=>array( + 'namingContexts', + 'subschemaSubentry', + 'altServer', + 'supportedExtension', + 'supportedControl', + 'supportedSASLMechanisms', + 'supportedLDAPVersion', + 'currentTime', + 'dsServiceName', + 'defaultNamingContext', + 'schemaNamingContext', + 'configurationNamingContext', + 'rootDomainNamingContext', + 'supportedLDAPPolicies', + 'highestCommittedUSN', + 'dnsHostName', + 'ldapServiceName', + 'serverName', + 'supportedCapabilities', + 'changeLog', + 'tlsAvailableCipherSuites', + 'tlsImplementationVersion', + 'supportedSASLMechanisms', + 'dsaVersion', + 'myAccessPoint', + 'dseType', + '+', + '*' + )); + + # Settings for auto_number + $this->default->auto_number['enable'] = array( + 'desc'=>'Enable the AUTO UID feature', + 'default'=>true); + + $this->default->auto_number['mechanism'] = array( + 'desc'=>'Mechanism to use to search for automatic numbers', + 'default'=>'search'); + + $this->default->auto_number['search_base'] = array( + 'desc'=>'Base DN to use for search mechanisms', + 'default'=>null); + + $this->default->auto_number['min'] = array( + 'desc'=>'Minimum number to start with', + 'default'=>array('uidNumber'=>1000,'gidNumber'=>500)); + + $this->default->auto_number['dn'] = array( + 'desc'=>'DN to use when evaluating numbers', + 'default'=>null); + + $this->default->auto_number['pass'] = array( + 'desc'=>'Password for DN to use when evaluating numbers', + 'default'=>null); + + $this->default->unique['attrs'] = array( + 'desc'=>'Attributes to check for uniqueness before allowing updates', + 'default'=>array('mail','uid','uidNumber')); + + $this->default->unique['dn'] = array( + 'desc'=>'DN to use when evaluating attribute uniqueness', + 'default'=>null); + + $this->default->unique['pass'] = array( + 'desc'=>'Password for DN to use when evaluating attribute uniqueness', + 'default'=>null); + } + +/** FUNCTIONS TO BE REWORKED BELOW HERE **/ + /** + * Returns true if the user has configured the specified server to enable mass deletion. + * + * Mass deletion is enabled in config.php this: + * + * $config->custom->commands['all'] = array('entry_delete' => array('mass_delete' => true)); + * + * Notice that mass deletes are not enabled on a per-server basis, but this + * function checks that the server is not in a read-only state as well. + * + * @return boolean + */ + function isMassDeleteEnabled() { + if (DEBUG_ENABLED) + debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); + + if ($this->connect(false) && $this->haveAuthInfo() && ! $this->isReadOnly() && + $_SESSION[APPCONFIG]->isCommandAvailable('entry_delete', 'mass_delete')) + + return true; + + else + return false; + } + + /** + * Gets whether the admin has configured phpLDAPadmin to show the "Create New" link in the tree viewer. + * + * $servers->setValue('appearance','show_create',true|false); + * + * If NOT set, then default to show the Create New item. + * If IS set, then return the value (it should be true or false). + * + * The entry creation command must be available. + * + * $config->custom->commands['all'] = array('entry_create' => true); + * + * + * @return boolean True if the feature is enabled and false otherwise. + */ + function isShowCreateEnabled() { + if (DEBUG_ENABLED) + debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); + + if (! $_SESSION[APPCONFIG]->isCommandAvailable('entry_create')) + return false; + else + return $this->getValue('appearance','show_create'); + } + + /** + * Fetches whether the login_attr feature is enabled for a specified server. + * + * This is configured in config.php thus: + * + * $servers->setValue('login','attr',''); + * + * + * By virtue of the fact that the login_attr is not blank and not 'dn', the + * feature is configured to be enabled. + * + * @return boolean + */ + function isLoginAttrEnabled() { + if ((strcasecmp($this->getLoginAttr(),'dn') != 0) && trim($this->getLoginAttr())) + $return = true; + else + $return = false; + + if (DEBUG_ENABLED) + debug_log('Entered with (), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); + + return $return; + } + + /** + * Fetches whether the login_attr feature is enabled for a specified server. + * + * This is configured in config.php thus: + * + * $servers->setValue('login','attr','string'); + * + * + * @return boolean + */ + function isLoginStringEnabled() { + if (DEBUG_ENABLED) + debug_log('login_attr is [%s]',80,__FILE__,__LINE__,__METHOD__,$this->getLoginAttr()); + + if (! strcasecmp($this->getLoginAttr(),'string')) + $return = true; + else + $return = false; + + if (DEBUG_ENABLED) + debug_log('Entered with (), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); + + return $return; + } + + /** + * Fetches the login_attr string if enabled for a specified server. + * + * This is configured in config.php thus: + * + * $servers->setValue('login','login_string','uid=,ou=People,dc=example,dc=com'); + * + * + * @return string|false + */ + function getLoginString() { + if (DEBUG_ENABLED) + debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__,__FILE__,__LINE__,__METHOD__); + + return $this->login_string; + } + + /** + * Fetch whether the user has configured a certain server login to be non anonymous + * + * + * $servers->setValue('login','anon_bind',true|false); + * + * + * @return boolean + */ + public function isAnonBindAllowed() { + # If only_login_allowed_dns is set, then we cant have anonymous. + if (count($this->getValue('login','allowed_dns')) > 0) + $return = false; + else + $return = $this->getValue('login','anon_bind'); + + if (DEBUG_ENABLED) + debug_log('Entered with (), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); + + return $return; + } + + /** + * Returns true if the user has configured the specified server to enable branch (non-leaf) renames. + * + * This is configured in config.php thus: + * + * $servers->setValue('server','branch_rename',true|false); + * + * + * @return boolean + */ + function isBranchRenameEnabled() { + debug_log('Entered with (), Returning (%s).',17,__FILE__,__LINE__,__METHOD__,$this->getValue('server','branch_rename')); + + return $this->getValue('server','branch_rename'); + } + + /** + * Determines if an attribute's value can contain multiple lines. Attributes that fall + * in this multi-line category may be configured in config.php. Hence, this function + * accesses the global variable $_SESSION[APPCONFIG]->custom->appearance['multi_line_attributes']; + * + * Usage example: + * + * if ($ldapserver->isMultiLineAttr('postalAddress')) + * echo ""; + * else + * echo ""; + * + * + * @param string $attr_name The name of the attribute of interestd (case insensivite) + * @param string $val (optional) The current value of the attribute (speeds up the + * process by searching for carriage returns already in the attribute value) + * @return boolean + */ + function isMultiLineAttr($attr_name,$val=null) { + # Set default return + $return = false; + + # First, check the optional val param for a \n or a \r + if (! is_null($val) && (strpos($val,"\n") || strpos($val,"\r"))) + $return = true; + + # Next, compare strictly by name first + else + foreach ($_SESSION[APPCONFIG]->getValue('appearance','multi_line_attributes') as $multi_line_attr_name) + if (strcasecmp($multi_line_attr_name,$attr_name) == 0) { + $return = true; + break; + } + + # If unfound, compare by syntax OID + if (! $return) { + $sattr = $this->getSchemaAttribute($attr_name); + + if ($sattr) { + $syntax_oid = $sattr->getSyntaxOID(); + + if ($syntax_oid) + foreach ($_SESSION[APPCONFIG]->getValue('appearance','multi_line_syntax_oids') as $multi_line_syntax_oid) + if ($multi_line_syntax_oid == $syntax_oid) { + $return = true; + break; + } + } + } + + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name,$val,$return); + + return $return; + } + + /** + * Returns true if the specified attribute is configured as read only + * in config.php. + * Attributes are configured as read-only in config.php thus: + * + * $config->custom->appearance['readonly_attrs'] = array('objectClass'); + * + * + * @param string $attr The name of the attribute to test. + * @return boolean + */ + public function isAttrReadOnly($attr) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr); + + $attrs = $_SESSION[APPCONFIG]->getValue('appearance','readonly_attrs'); + $except_dn = $_SESSION[APPCONFIG]->getValue('appearance','readonly_attrs_exempt'); + + $attr = trim($attr); + if (! trim($attr) || ! count($attrs)) + return false; + + # Is the user excluded? + if ($except_dn && $this->userIsMember($this->getLogin(),$except_dn)) + return false; + + foreach ($attrs as $attr_name) + if (strcasecmp($attr,trim($attr_name)) == 0) + return true; + + return false; + } + + /** + * Returns true if the specified attribute is configured as hidden + * in config.php. + * Attributes are configured as hidden in config.php thus: + * + * $config->custom->appearance['hide_attrs'] = array('objectClass'); + * + * + * @param string $attr The name of the attribute to test. + * @return boolean + */ + public function isAttrHidden($attr) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr); + + $attrs = $_SESSION[APPCONFIG]->getValue('appearance','hide_attrs'); + $except_dn = $_SESSION[APPCONFIG]->getValue('appearance','hide_attrs_exempt'); + + $attr = trim($attr); + if (! trim($attr) || ! count($attrs)) + return false; + + # Is the user excluded? + if ($except_dn && $this->userIsMember($this->getLogin(),$except_dn)) + return false; + + foreach ($attrs as $attr_name) + if (strcasecmp($attr,trim($attr_name)) == 0) + return true; + + return false; + } + + /** + * Return the time left in seconds until this connection times out. If there is not timeout, + * this function will return null. + */ + public function inactivityTime() { + if ($this->isLoggedIn() && ! in_array($this->getAuthType(),array('config','httpd'))) + return time()+($this->getValue('login','timeout')*60); + else + return null; + } + + /** + * Add objects + */ + public function add($dn,$entry_array,$method=null) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$entry_array,$method); + + foreach ($entry_array as $attr => $val) + $entry_array[$attr] = dn_unescape($val); + + $result = false; + + # Check our unique attributes. + if (! $this->checkUniqueAttrs($dn,$entry_array)) + return false; + + if (run_hook('pre_entry_create',array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attrs'=>$entry_array))) { + $result = @ldap_add($this->connect($method),dn_escape($dn),$entry_array); + + if ($result) { + # Update the tree + $tree = get_cached_item($this->index,'tree'); + $tree->addEntry($dn); + + set_cached_item($this->index,'tree','null',$tree); + + run_hook('post_entry_create',array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attrs'=>$entry_array)); + + } else { + system_message(array( + 'title'=>_('Could not add the object to the LDAP server.'), + 'body'=>ldap_error_msg($this->getErrorMessage(null),$this->getErrorNum(null)), + 'type'=>'error')); + } + } + + return $result; + } + + /** + * Delete objects + */ + public function delete($dn,$method=null) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$method); + + $result = false; + + if (run_hook('pre_entry_delete',array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn))) { + $result = @ldap_delete($this->connect($method),dn_escape($dn)); + + if ($result) { + # Update the tree + $tree = get_cached_item($this->index,'tree'); + $tree->delEntry($dn); + + set_cached_item($this->index,'tree','null',$tree); + + run_hook('post_entry_delete',array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn)); + } + } + + return $result; + } + + /** + * Rename objects + */ + public function rename($dn,$new_rdn,$container,$deleteoldrdn,$method=null) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$new_rdn,$container,$deleteoldrdn,$method); + + $result = false; + + if (run_hook('pre_entry_rename',array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'rdn'=>$new_rdn,'container'=>$container))) { + $result = @ldap_rename($this->connect($method),$dn,$new_rdn,$container,$deleteoldrdn); + + if ($result) { + # Update the tree + $tree = get_cached_item($this->index,'tree'); + $newdn = sprintf('%s,%s',$new_rdn,$container); + $tree->renameEntry($dn,$newdn); + + set_cached_item($this->index,'tree','null',$tree); + + run_hook('post_entry_rename',array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'rdn'=>$new_rdn,'container'=>$container)); + } + } + + return $result; + } + + /** + * Modify objects + */ + public function modify($dn,$attrs,$method=null) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$attrs,$method); + + # Check our unique attributes. + if (! $this->checkUniqueAttrs($dn,$attrs)) + return false; + + $result = false; + $summary = array(); + $current_attrs = $this->getDNAttrValues($dn,$method,LDAP_DEREF_NEVER,array('*')); + + # Go through our attributes and call our hooks for each attribute changing its value + foreach ($attrs as $attr => $values) { + # For new attributes + if (count($values) && ! isset($current_attrs[$attr])) { + if (! run_hook('pre_attr_add', + array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attr'=>$attr,'newvalue'=>$values))) { + + unset($attrs[$attr]); + system_message(array( + 'title'=>_('Attribute not added'), + 'body'=>sprintf('%s (%s)',_('Hook pre_attr_add prevented attribute from being added'),$attr), + 'type'=>'warn')); + + } else + $summary['add'][$attr]['new'] = $values; + + # For modify attributes + } elseif (count($values)) { + if (! run_hook('pre_attr_modify', + array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attr'=>$attr,'oldvalue'=>$current_attrs[$attr],'newvalue'=>$values))) { + + unset($attrs[$attr]); + system_message(array( + 'title'=>_('Attribute not modified'), + 'body'=>sprintf('%s (%s)',_('Hook pre_attr_modify prevented attribute from being modified'),$attr), + 'type'=>'warn')); + + } else { + $summary['modify'][$attr]['new'] = $values; + $summary['modify'][$attr]['old'] = $current_attrs[$attr]; + } + + # For delete attributes + } else { + if (! run_hook('pre_attr_delete', + array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attr'=>$attr,'oldvalue'=>$current_attrs[$attr]))) { + + unset($attrs[$attr]); + system_message(array( + 'title'=>_('Attribute not deleted'), + 'body'=>sprintf('%s (%s)',_('Hook pre_attr_delete prevented attribute from being deleted'),$attr), + 'type'=>'warn')); + + } else + $summary['delete'][$attr]['old'] = $current_attrs[$attr]; + } + } + + if (! count($attrs)) + return false; + + if (run_hook('pre_entry_modify',array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attrs'=>$attrs))) { + $result = @ldap_mod_replace($this->connect($method),$dn,$attrs); + + if ($result) { + run_hook('post_entry_modify',array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attrs'=>$attrs)); + + foreach (array('add','modify','delete') as $mode) + if (isset($summary[$mode])) + foreach ($summary[$mode] as $attr => $values) + switch ($mode) { + case 'add': + run_hook(sprintf('post_attr_%s',$mode), + array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attr'=>$attr,'newvalue'=>$values['new'])); + break; + + case 'modify': + run_hook(sprintf('post_attr_%s',$mode), + array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attr'=>$attr,'oldvalue'=>$values['old'],'newvalue'=>$values['new'])); + break; + + case 'delete': + run_hook(sprintf('post_attr_%s',$mode), + array('server_id'=>$this->index,'method'=>$method,'dn'=>$dn,'attr'=>$attr,'oldvalue'=>$values['old'])); + break; + + default: + debug_dump_backtrace(sprintf('Unkown mode %s',$mode),1); + } + } else { + system_message(array( + 'title'=>_('Could not perform ldap_modify operation.'), + 'body'=>ldap_error_msg($this->getErrorMessage($method),$this->getErrorNum($method)), + 'type'=>'error')); + } + } + + return $result; + } + + /** + * Returns true if the specified attribute is configured as unique + * in config.php. + * Attributes are configured as hidden in config.php thus: + * + * $servers->setValue('unique','attrs',array('mail','uid','uidNumber')); + * + * + * @param string $attr The name of the attribute to test. + * @return boolean + */ + public function isAttrUnique($attr) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr); + + # Should this attribute value be unique + if (in_array_ignore_case($attr,$this->getValue('unique','attrs'))) + return true; + else + return false; + } + + /** + * This function will check whether the value for an attribute being changed + * is already assigned to another DN. + * + * Returns the bad value, or null if all values are OK + * + * @param dn DN that is being changed + * @param string Attribute being changed + * @param string|array New values for the attribute + */ + public function checkUniqueAttrs($dn,$attrs) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__, + $dn,$attrs); + + # If none of the attributes are defined unique, we'll return immediately; + if (! $checkattrs = array_intersect(arrayLower($this->getValue('unique','attrs')),array_keys(array_change_key_case($attrs)))) + return true; + + # Check see and use our alternate uid_dn and password if we have it. + if (! $this->login($this->getValue('unique','dn'),$this->getValue('unique','pass'),'unique')) { + system_message(array( + 'title'=>_('UNIQUE invalid login/password'), + 'body'=>sprintf('%s (%s)',_('Unable to connect to LDAP server with the unique login/password, please check your configuration.'), + $this->getName()), + 'type'=>'warn')); + + return false; + } + + $query = array(); + + # Build our search filter to double check each attribute. + $query['filter'] = '(|'; + foreach ($checkattrs as $attr) + foreach ($attrs[$attr] as $val) + if ($val) + $query['filter'] .= sprintf('(%s=%s)',$attr,$val); + $query['filter'] .= ')'; + + $query['attrs'] = $checkattrs; + + # Search through our bases and see if we have match + foreach ($this->getBaseDN() as $base) { + $query['base'] = $base; + + # Do the search + $results = $this->query($query,'unique'); + + # If we have a match. + if (count($results)) + foreach ($results as $values) + # If one of the attributes is owned to somebody else, then we may as well die here. + if ($values['dn'] != $dn) { + $href = sprintf('cmd.php?cmd=query_engine&server=%s&filter=%s&scope=sub&query=none&format=list',$this->index,$query['filter']); + + system_message(array( + 'title'=>_('Attribute value would not be unique'), + 'body'=>sprintf('%s (%s)', + _('This update has been or will be cancelled, it would result in an attribute value not being unique. You might like to search the LDAP server for the offending entry.'), + htmlspecialchars($href), + _('Search')), + 'type'=>'warn')); + + return false; + } + } + + # If we get here, then it must be OK? + return true; + } + + /** + * Check if the session timeout has occured for this LDAP server. + */ + public function isSessionValid() { + # If inactiveTime() returns a value, we need to check that it has not expired. + if (is_null($this->inactivityTime()) || ! $this->isLoggedIn()) + return true; + + # If session has expired + if ((isset($_SESSION['ACTIVITY'][$this->getIndex()])) && ($_SESSION['ACTIVITY'][$this->getIndex()] < time())) { + $this->logout(); + unset($_SESSION['ACTIVITY'][$this->getIndex()]); + + return false; + } + + $_SESSION['ACTIVITY'][$this->getIndex()] = $this->inactivityTime(); + return true; + } +} +?> diff --git a/lib/emuhash_functions.php b/lib/emuhash_functions.php index 335488a..fa24c07 100644 --- a/lib/emuhash_functions.php +++ b/lib/emuhash_functions.php @@ -1,7 +1,8 @@ diff --git a/lib/export_functions.php b/lib/export_functions.php index 41fe0fa..1b7642b 100755 --- a/lib/export_functions.php +++ b/lib/export_functions.php @@ -1,347 +1,325 @@ 'ldif', - 'desc' => 'LDIF', - 'extension' => 'ldif' -); - -$exporters[] = array( - 'output_type'=>'dsml', - 'desc' => 'DSML V.1', - 'extension' => 'xml' -); - -$exporters[] = array( - 'output_type'=>'vcard', - 'desc' => 'VCARD 2.1', - 'extension' => 'vcf' -); - -$exporters[] = array( - 'output_type'=>'csv', - 'desc' => _('CSV (Spreadsheet)'), - 'extension' => 'csv' -); /** - * This class encapsulate informations about the ldap server - * from which the export is done. - * The following info are provided within this class: + * Exporter Class * - * $ldapserver: the object of the server. - * $base_dn: if the source of the export is the ldap server, - * it indicates the base dn of the search. - * $query_filter: if the source of the export is the ldap server, - * it indicates the query filter for the search. - * $scope: if the source of the export is the ldap server, - * it indicates the scope of the search. + * This class serves as a top level exporter class, which will return + * the correct Export class. * * @package phpLDAPadmin + * @subpackage Export */ -class LdapExportInfo { - public $ldapserver; - public $base_dn; - public $query_filter; - public $scope; +class Exporter { + # Server ID that the export is linked to + private $server_id; + # Exporter Type + private $template_id; + private $template; - /** - * Create a new LdapExportInfo object - * - * @param int $server_id the server id - * @param String $base_dn the base_dn for the search in a ldap server - * @param String $query_filter the query filter for the search - * @param String $scope the scope of the search in a ldap server - */ + public function __construct($server_id,$template_id) { + $this->server_id = $server_id; + $this->template_id = $template_id; - function LdapExportInfo($server_id,$base_dn=null,$query_filter=null,$scope=null) { - $this->ldapserver = $_SESSION[APPCONFIG]->ldapservers->Instance($server_id); - $this->ldapserver->base_dn = $base_dn; - $this->ldapserver->query_filter = $query_filter; - $this->ldapserver->scope = $scope; + $this->accept(); + } + + static function types() { + $type = array(); + + $details = ExportCSV::getType(); + $type[$details['type']] = $details; + $details = ExportDSML::getType(); + $type[$details['type']] = $details; + $details = ExportLDIF::getType(); + $type[$details['type']] = $details; + $details = ExportVCARD::getType(); + $type[$details['type']] = $details; + + return $type; + } + + private function accept() { + switch($this->template_id) { + case 'CSV': + $this->template = new ExportCSV(); + break; + + case 'DSML': + $this->template = new ExportDSML(); + break; + + case 'LDIF': + $this->template = new ExportLDIF(); + break; + + case 'VCARD': + $this->template = new ExportVCARD(); + break; + + default: + system_message(array( + 'title'=>sprintf('%s %s',_('Unknown Export Type'),$this->template_id), + 'body'=>_('phpLDAPadmin has not been configured for that export type'), + 'type'=>'warn'),'index.php'); + die(); + } + + $this->template->accept(); + } + + public function getTemplate() { + return $this->template; } } - /** - * This class represents the base class of all exporters - * It can be subclassed directly if your intend is to write - * a source exporter(ie. it will act only as a decoree - * which will be wrapped by an another exporter.) - * If you consider writting an exporter for filtering data - * or directly display entries, please consider subclass - * the PlaExporter + * Export Class * - * @see PlaExporter - * @package phpLDAPadmin - */ -class PlaAbstractExporter { - /** - * Return the number of entries - * @return int the number of entries to be exported - */ - function pla_num_entries() {} - - /** - * Return the results - * @return array if there is some more entries to be processed - */ - function pla_results() {} - - /** - * Return a PlaLdapInfo Object - * @return LdapInfo Object with info from the ldap serveur - */ - function pla_get_ldap_info() {} -} # end PlaAbstractExporter - -/** - * PlaExporter acts a wrapper around another exporter. - * In other words, it will act as a decorator for another decorator + * This abstract classes provides all the common methods and variables for the + * custom export classes. * * @package phpLDAPadmin + * @subpackage Export */ -class PlaExporter extends PlaAbstractExporter { - # Default CRLN - public $br = "\n"; - # The wrapped $exporter - public $exporter; - - public $compress = false; +abstract class Export { + # Line Break + protected $br; + # Compress the output + protected $compress; + # Export Results + protected $results; + protected $resultsdata; + protected $items = 0; /** - * Constructor - * @param source $source the decoree for this exporter + * Return this LDAP Server object + * + * @return object DataStore Server */ - function PlaExporter($source) { - $this->exporter = $source; + protected function getServer() { + return $_SESSION[APPCONFIG]->getServer($this->getServerID()); } /** - * Return the number of entries - * @return int the number of entries to be exported + * Return the LDAP server ID + * + * @return int Server ID */ - function pla_num_entries() { - return $this->exporter->pla_num_entries(); + protected function getServerID() { + return get_request('server_id','REQUEST'); } - /** - * Return the results - * @return array if there is some more entries to be processed - */ - function pla_results() { - return $this->exporter->pla_results(); + public function accept() { + $server = $this->getServer(); + + # Get the data to be exported + $query = array(); + $base = get_request('dn','REQUEST'); + $query['baseok'] = true; + $query['filter'] = get_request('filter','REQUEST',false,'objectclass=*'); + $query['scope'] = get_request('scope','REQUEST',false,'base'); + $query['deref'] = $_SESSION[APPCONFIG]->getValue('deref','export'); + $attrs = get_request('attributes','REQUEST'); + + $attrs = preg_replace('/\s+/','',$attrs); + if ($attrs) + $query['attrs'] = explode(',',$attrs); + else + $query['attrs'] = array('*'); + + if (get_request('sys_attr')) { + if (! in_array('*',$query['attrs'])) + array_push($query['attrs'],'*'); + array_push($query['attrs'],'+'); + } + + if (! $base) + $bases = $server->getBaseDN(); + else + $bases = array($base); + + foreach ($bases as $base) { + $query['base'] = $base; + + $time_start = utime(); + $this->results[$base] = $server->query($query,null); + $time_end = utime(); + + usort($this->results[$base],'pla_compare_dns'); + $this->resultsdata[$base]['time'] = round($time_end-$time_start,2); + + # If no result, there is a something wrong + if (! $this->results[$base] && $server->getErrorNum(null)) + system_message(array( + 'title'=>_('Encountered an error while performing search.'), + 'body'=>ldap_error_msg($server->getErrorMessage(null),$server->getErrorNum(null)), + 'type'=>'error')); + + $this->items += count($this->results[$base]); + } + + $this->resultsdata['scope'] = $query['scope']; + $this->resultsdata['filter'] = $query['filter']; + $this->resultsdata['attrs'] = $query['attrs']; + + # Other settings + switch (get_request('format','POST',false,'unix')) { + case 'win': + $this->br = "\r\n"; + break; + + case 'mac': + $this->br = "\r"; + break; + + case 'unix': + default: + $this->br = "\n"; + } + + if (get_request('compress','REQUEST') == 'on') + $this->compress = true; } - /** - * Return a PlaLdapInfo Object - * @return LdapInfo Object with info from the ldap serveur - */ - function pla_get_ldap_info() { - return $this->exporter->pla_get_ldap_info(); + public function isCompressed() { + return $this->compress; } - /** - * Helper method to check if the attribute value should be base 64 encoded. - * @param String $str the string to check. - * @return bool true if the string is safe ascii, false otherwise. - */ - function is_safe_ascii($str) { - for ($i=0;$i 127) - return false; - return true; - } + protected function getHeader() { + $server = $this->getServer(); + $type = $this->getType(); - /** - * Abstract method use to export data. - * Must be implemented in a sub-class if you write an exporter - * which export data. - * Leave it empty if you write a sub-class which do only some filtering. - */ - function export() {} - - /** - * Set the carriage return /linefeed for the export - * @param String $br the CRLF to be set - */ - function setOutputFormat($br){ - $this->br = $br; - } - - /** - * Display the header for the export - */ - function displayExportInfoHeader($type,$ldapserver) { $output = ''; - $output .= sprintf("version: 1%s%s",$this->br,$this->br); - $output .= sprintf('# '.$type."%s",$ldapserver->base_dn,$this->br); - $output .= sprintf('# '._('Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s')."%s",date('F j, Y g:i a'),$this->br); - $output .= sprintf("# %s: %s (%s)%s",_('Server'),$ldapserver->name,$ldapserver->host,$this->br); - $output .= sprintf("# %s: %s%s",_('Search Scope'),$ldapserver->scope,$this->br); - $output .= sprintf("# %s: %s%s",_('Search Filter'),$ldapserver->query_filter,$this->br); - $output .= sprintf("# %s: %s%s",_('Total Entries'),$this->pla_num_entries(),$this->br); + $output .= sprintf('# %s %s %s%s',$type['description'],_('for'),implode('|',array_keys($this->results)),$this->br); + $output .= sprintf('# %s: %s (%s)%s',_('Server'),$server->getName(),$server->getValue('server','host'),$this->br); + $output .= sprintf('# %s: %s%s',_('Search Scope'),$this->resultsdata['scope'],$this->br); + $output .= sprintf('# %s: %s%s',_('Search Filter'),$this->resultsdata['filter'],$this->br); + $output .= sprintf('# %s: %s%s',_('Total Entries'),$this->items,$this->br); + $output .= sprintf('#%s',$this->br); + $output .= sprintf('# Generated by %s (%s) on %s%s',app_name(),get_href('web'),date('F j, Y g:i a'),$this->br); + $output .= sprintf('# Version: %s%s',app_version(),$this->br); + $output .= $this->br; return $output; } - function compress($boolean) { - $this->compress = $boolean; - } + /** + * Helper method to check if the attribute value should be base 64 encoded. + * + * @param The string to check. + * @return boolean true if the string is safe ascii, false otherwise. + */ + protected function isSafeAscii($str) { + for ($i=0;$i 127) + return false; - function isCompressed() { - return $this->compress; + return true; } -} # end PlaExporter +} /** - * Export data from a ldap server - * @extends PlaAbstractExporter + * Export entries to CSV + * * @package phpLDAPadmin + * @subpackage Export */ -class PlaLdapExporter extends PlaAbstractExporter { - public $scope; - public $base_dn; - public $server_id; - public $queryFilter; - public $attributes; - public $ldap_info; - public $results; - public $num_entries; +class ExportCSV extends Export { + private $separator = ','; + private $qualifier = '"'; + private $multivalue_separator = ' | '; + private $escapeCode = '"'; - /** - * Create a PlaLdapExporter object. - * @param int $server_id the server id - * @param String $queryFilter the queryFilter for the export - * @param String $base_dn the base_dn for the data to export - * @param String $scope the scope for export - */ - function PlaLdapExporter($server_id,$queryFilter,$base_dn,$scope,$attributes) { - $this->scope = $scope; - $this->base_dn = $base_dn; - $this->server_id = $server_id; - $this->queryFilter = $queryFilter; - $this->attributes = $attributes; - - # infos for the server - $this->ldap_info = new LdapExportInfo($server_id,$base_dn,$queryFilter,$scope); - - # get the data to be exported - $this->results = $this->ldap_info->ldapserver->search(null,$this->base_dn,$this->queryFilter,$this->attributes, - $this->scope,true,$_SESSION[APPCONFIG]->GetValue('deref','export')); - - # if no result, there is a something wrong - if (! $this->results && $this->ldap_info->ldapserver->errno()) - system_message(array( - 'title'=>_('Encountered an error while performing search.'), - 'body'=>ldap_error_msg($this->ldap_info->ldapserver->error(),$this->ldap_info->ldapserver->errno()), - 'type'=>'error')); - - usort($this->results,'pla_compare_dns'); - $this->num_entries = count($this->results); - } # End constructor - - /** - * Return the results - * @return array if there is some more entries to be processed - */ - function pla_results() { - return $this->results; + static public function getType() { + return array('type'=>'CSV','description' => 'CSV (Spreadsheet)','extension'=>'csv'); } - /** - * Return a PlaLdapInfo Object - * @return LdapInfo Object with info from the ldap serveur - */ - function pla_get_ldap_info() { - return $this->ldap_info->ldapserver; - } - - /** - * Return the number of entries - * @return int the number of entries to be exported - */ - function pla_num_entries() { - return $this->num_entries; - } -} # End PlaLdapExporter - -/** - * Export entries to ldif format - * @extends PlaExporter - * @package phpLDAPadmin - */ -class PlaLdifExporter extends PlaExporter { - # variable to keep the count of the entries - public $counter = 0; - - # the maximum length of the ldif line - public $MAX_LDIF_LINE_LENGTH = 76; - - /** - * Create a PlaLdifExporter object - * @param PlaAbstractExporter $exporter the source exporter - */ - function PlaLdifExporter($exporter) { - $this->exporter = $exporter; - } - - /** - * Export entries to ldif format - */ function export() { - $ldapserver = $this->pla_get_ldap_info(); - $output = $this->displayExportInfoHeader(_('LDIF Export for: %s'),$ldapserver); + $server = $this->getServer(); + + /* Go thru and find all the attribute names first. This is needed, because, otherwise we have + * no idea as to which search attributes were actually populated with data */ + $headers = array('dn'); + $entries = array(); + foreach ($this->results as $base => $results) { + foreach ($results as $dndetails) { + array_push($entries,$dndetails); - # Sift through the entries. - foreach ($this->pla_results() as $dn => $dndetails) { - $this->counter++; - if (isset($dndetails['dn'])) { - $dn = $dndetails['dn']; unset($dndetails['dn']); + foreach (array_keys($dndetails) as $key) + if (! in_array($key,$headers)) + array_push($headers,$key); + } + } - $title_string = sprintf('# %s %s: %s%s',_('Entry'),$this->counter,$dn,$this->br); - if (strlen($title_string) > $this->MAX_LDIF_LINE_LENGTH-3) - $title_string = substr($title_string,0,$this->MAX_LDIF_LINE_LENGTH-3).'...'.$this->br; + $output = ''; + $num_headers = count($headers); - # display dn - if ($this->is_safe_ascii($dn)) - $output .= $this->multi_lines_display(sprintf('dn: %s',$dn)); - else - $output .= $this->multi_lines_display(sprintf('dn:: %s',base64_encode($dn))); + # Print out the headers + for ($i=0; $i<$num_headers; $i++) { + $output .= sprintf('%s%s%s',$this->qualifier,$headers[$i],$this->qualifier); - # display the attributes - foreach ($dndetails as $key => $attr) { - if (! is_array($attr)) - $attr = array($attr); + if ($i < $num_headers-1) + $output .= $this->separator; + } - foreach ($attr as $value) { - if (! $this->is_safe_ascii($value) || $ldapserver->isAttrBinary($key)) { - $output .= $this->multi_lines_display(sprintf('%s:: %s',$key,base64_encode($value))); + # Drop out our DN header. + array_shift($headers); + $num_headers--; - } else { - $output .= $this->multi_lines_display(sprintf('%s: %s',$key,$value)); + $output .= $this->br; + + # Loop on every entry + foreach ($entries as $index => $entry) { + $dn = $entry['dn']; + unset($entry['dn']); + $output .= sprintf('%s%s%s%s',$this->qualifier,$this->LdapEscape($dn),$this->qualifier,$this->separator); + + # Print the attributes + for ($j=0; $j<$num_headers; $j++) { + $attr = $headers[$j]; + $output .= $this->qualifier; + + if (array_key_exists($attr,$entry)) { + $binary_attribute = $server->isAttrBinary($attr) ? 1 : 0; + + if (! is_array($entry[$attr])) + $attr_values = array($entry[$attr]); + else + $attr_values = $entry[$attr]; + + $num_attr_values = count($attr_values); + + for ($i=0; $i<$num_attr_values; $i++) { + if ($binary_attribute) + $output .= base64_encode($attr_values[$i]); + else + $output .= $this->LdapEscape($attr_values[$i]); + + if ($i < $num_attr_values-1) + $output .= $this->multivalue_separator; } } - } # end foreach + + $output .= $this->qualifier; + + if ($j < $num_headers-1) + $output .= $this->separator; + } $output .= $this->br; } @@ -352,25 +330,209 @@ class PlaLdifExporter extends PlaExporter { echo $output; } + /** + * Function to escape data, where the qualifier happens to also + * be in the data. + */ + private function LdapEscape ($var) { + return str_replace($this->qualifier,$this->escapeCode.$this->qualifier,$var); + } +} + +/** + * Export entries to DSML v.1 + * + * @package phpLDAPadmin + * @subpackage Export + */ +class ExportDSML extends Export { + static public function getType() { + return array('type'=>'DSML','description' => _('DSML V.1 Export'),'extension'=>'xml'); + } + + /** + * Export entries to DSML format + */ + function export() { + $server = $this->getServer(); + + # Not very elegant, but do the job for the moment as we have just 4 level + $indent = array(); + $indent['dir'] = ' '; + $indent['ent'] = ' '; + $indent['att'] = ' '; + $indent['val'] = ' '; + + # Print declaration + $output = sprintf('%s',$this->br); + + # Print root element + $output .= sprintf('%s',$this->br); + + # Print info related to this export + $output .= sprintf('%s',$this->br); + $output .= $this->br; + + $output .= sprintf('%s%s',$indent['dir'],$this->br); + + # Sift through the entries. + $counter = 0; + foreach ($this->results as $base => $results) { + foreach ($results as $dndetails) { + $counter++; + + $dn = $dndetails['dn']; + unset($dndetails['dn']); + ksort($dndetails); + + # Display DN + $output .= sprintf('%s%s',$indent['ent'],htmlspecialchars($dn),$this->br); + + # Display the objectClass attributes first + if (isset($dndetails['objectClass'])) { + if (! is_array($dndetails['objectClass'])) + $dndetails['objectClass'] = array($dndetails['objectClass']); + + $output .= sprintf('%s%s',$indent['att'],$this->br); + + foreach ($dndetails['objectClass'] as $ocValue) + $output .= sprintf('%s%s%s',$indent['val'],$ocValue,$this->br); + + $output .= sprintf('%s%s',$indent['att'],$this->br); + unset($dndetails['objectClass']); + } + + # Display the attributes + foreach ($dndetails as $key => $attr) { + if (! is_array($attr)) + $attr = array($attr); + + $output .= sprintf('%s%s',$indent['att'],$key,$this->br); + + # If the attribute is binary, set the flag $binary_mode to true + $binary_mode = $server->isAttrBinary($key) ? 1 : 0; + + foreach ($attr as $value) + $output .= sprintf('%s%s%s', + $indent['val'],($binary_mode ? base64_encode($value) : htmlspecialchars($value)),$this->br); + + $output .= sprintf('%s%s',$indent['att'],$this->br); + } + + $output .= sprintf('%s%s',$indent['ent'],$this->br); + } + } + + $output .= sprintf('%s%s',$indent['dir'],$this->br); + $output .= sprintf('%s',$this->br); + + if ($this->compress) + echo gzencode($output); + else + echo $output; + } +} + +/** + * Export from LDAP using an LDIF format + * + * @package phpLDAPadmin + * @subpackage Export + */ +class ExportLDIF extends Export { + # The maximum length of the ldif line + private $line_length = 76; + + static public function getType() { + return array('type'=>'LDIF','description' => _('LDIF Export'),'extension'=>'ldif'); + } + + /** + * Export entries to LDIF format + */ + public function export() { + if (! $this->results) { + echo _('Nothing to export'); + return; + } + + $server = $this->getServer(); + + $output = $this->getHeader(); + + # Add our version. + $output .= 'version: 1'; + $output .= $this->br; + $output .= $this->br; + + # Sift through the entries. + $counter = 0; + foreach ($this->results as $base => $results) { + foreach ($results as $dndetails) { + $counter++; + + $dn = $dndetails['dn']; + unset($dndetails['dn']); + ksort($dndetails); + + $title_string = sprintf('# %s %s: %s%s',_('Entry'),$counter,$dn,$this->br); + + if (strlen($title_string) > $this->line_length-3) + $title_string = substr($title_string,0,$this->line_length-3).'...'.$this->br; + + $output .= $title_string; + + # Display dn + if ($this->isSafeAscii($dn)) + $output .= $this->multiLineDisplay(sprintf('dn: %s',$dn)); + else + $output .= $this->multiLineDisplay(sprintf('dn:: %s',base64_encode($dn))); + + # display the attributes + foreach ($dndetails as $key => $attr) { + if (! is_array($attr)) + $attr = array($attr); + + foreach ($attr as $value) + if (! $this->isSafeAscii($value) || $server->isAttrBinary($key)) + $output .= $this->multiLineDisplay(sprintf('%s:: %s',$key,base64_encode($value))); + else + $output .= $this->multiLineDisplay(sprintf('%s: %s',$key,$value)); + } + + $output .= $this->br; + } + } + + if ($this->compress) + echo gzencode($output); + else + echo $output; + } + /** * Helper method to wrap ldif lines - * @param String $str the line to be wrapped if needed. + * + * @param The line to be wrapped if needed. */ - function multi_lines_display($str) { + private function multiLineDisplay($str) { $length_string = strlen($str); - $max_length = $this->MAX_LDIF_LINE_LENGTH; + $length_max = $this->line_length; $output = ''; - while ($length_string > $max_length) { - $output .= substr($str,0,$max_length).$this->br.' '; - $str = substr($str,$max_length,$length_string); + while ($length_string > $length_max) { + $output .= substr($str,0,$length_max).$this->br.' '; + $str = substr($str,$length_max,$length_string); $length_string = strlen($str); - /* need to do minus one to align on the right + /* Need to do minus one to align on the right * the first line with the possible following lines * as these will have an extra space. */ - $max_length = $this->MAX_LDIF_LINE_LENGTH-1; + $length_max = $this->line_length-1; } + $output .= $str.$this->br; return $output; @@ -378,338 +540,103 @@ class PlaLdifExporter extends PlaExporter { } /** - * Export entries to DSML v.1 - * @extends PlaExporter + * Export entries to VCARD v2.1 + * * @package phpLDAPadmin + * @subpackage Export */ -class PlaDsmlExporter extends PlaExporter { - public $counter = 0; - - /** - * Create a PlaDsmlExporter object - * @param PlaAbstractExporter $exporter the decoree exporter - */ - function PlaDsmlExporter($exporter) { - $this->exporter = $exporter; +class ExportVCARD extends Export { + static public function getType() { + return array('type'=>'VCARD','description' => _('VCARD 2.1 Export'),'extension'=>'vcf'); } - /** - * Export the entries to DSML - */ - function export() { - $ldapserver = $this->pla_get_ldap_info(); - - # not very elegant, but do the job for the moment as we have just 4 level - $directory_entries_indent = ' '; - $entry_indent= ' '; - $attr_indent = ' '; - $attr_value_indent = ' '; - - # print declaration - $output = ''.$this->br; - - # print root element - $output .= ''.$this->br; - - # print info related to this export - $output .= ''.$this->br; - $output .= $this->br; - - $output .= $directory_entries_indent.''.$this->br; - - # Sift through the entries. - foreach ($this->pla_results() as $dn => $dndetails) { - $this->counter++; - unset($dndetails['dn']); - - # display dn - $output .= sprintf($entry_indent.''."%s",htmlspecialchars($dn),$this->br); - - # echo the objectclass attributes first - if (isset($dndetails['objectClass'])) { - $output .= $attr_indent.''.$this->br; - - foreach ($dndetails['objectClass'] as $ocValue) { - $output .= sprintf($attr_value_indent.'%s'."%s",$ocValue,$this->br); - } - - $output .= $attr_indent.''.$this->br; - unset($dndetails['objectClass']); - } - - $binary_mode = 0; - - # display the attributes - foreach ($dndetails as $key => $attr) { - if (! is_array($attr)) - $attr = array($attr); - - $output .= sprintf($attr_indent.''."%s",$key,$this->br); - - # if the attribute is binary, set the flag $binary_mode to true - $binary_mode = $ldapserver->isAttrBinary($key) ? 1 : 0; - - foreach ($attr as $value) { - $output .= sprintf($attr_value_indent.'%s'."%s", - ($binary_mode ? base64_encode($value) : htmlspecialchars($value)),$this->br); - } - - $output .= $attr_indent.''.$this->br; - } # end foreach - $output .= $entry_indent.''.$this->br; - } - - $output .= $directory_entries_indent.''.$this->br; - $output .= ''.$this->br; - - if ($this->compress) - echo gzencode($output); - else - echo $output; - } -} - -/** - * @package phpLDAPadmin - */ -class PlaVcardExporter extends PlaExporter { - # mappping one to one attribute - public $vcardMapping = array('cn' => 'FN', + # Mappping one to one attribute + private $mapping = array( + 'cn' => 'FN', 'title' => 'TITLE', - 'homePhone' => 'TEL;HOME', + 'homephone' => 'TEL;HOME', 'mobile' => 'TEL;CELL', 'mail' => 'EMAIL;Internet', - 'labeledURI' =>'URL', + 'labeleduri' =>'URL', 'o' => 'ORG', 'audio' => 'SOUND', - 'facsmileTelephoneNumber' =>'TEL;WORK;HOME;VOICE;FAX', - 'jpegPhoto' => 'PHOTO;ENCODING=BASE64', - 'businessCategory' => 'ROLE', + 'facsmiletelephoneNumber' =>'TEL;WORK;HOME;VOICE;FAX', + 'jpegphoto' => 'PHOTO;ENCODING=BASE64', + 'businesscategory' => 'ROLE', 'description' => 'NOTE' ); - public $deliveryAddress = array('postOfficeBox', + private $deliveryAddress = array( + 'postofficebox', 'street', 'l', 'st', - 'postalCode', + 'postalcode', 'c'); - function PlaVcardExporter($exporter){ - $this->exporter = $exporter; - } - /** - * When doing an exporter, the method export need to be overriden. - * A basic implementation is provided here. Customize to your need - **/ + * Export entries to VCARD format + */ function export() { - $output = ''; + $server = $this->getServer(); + # Sift through the entries. - foreach ($this->pla_results() as $id => $dndetails) { + foreach ($this->results as $base => $results) { + foreach ($results as $dndetails) { + $dndetails = array_change_key_case($dndetails); - # check the attributes needed for the delivery address field - $addr = 'ADR:'; - foreach ($this->deliveryAddress as $attr_name) { - if (isset($dndetails[$attr_name])) { - $addr .= $dndetails[$attr_name]; - unset($dndetails[$attr_name]); - } - $addr .= ';'; - } - - $output .= 'BEGIN:VCARD'.$this->br; - - # loop for the attributes - foreach ($dndetails as $key => $attr) { - if (! is_array($attr)) - $attr = array($attr); - - /* if an attribute of the ldap entry exist - * in the mapping array for vcard */ - if (isset($this->vcardMapping[$key])) { - - /* case of organisation. Need to append the - * possible ou attribute*/ - if (strcasecmp($key ,'o') == 0) { - $output .= sprintf('%s:%s',$this->vcardMapping[$key],$attr[0]); - - if (isset($entry['ou'])) - foreach ($entry['ou'] as $ou_value) { - $output .= sprintf(';%s',$ou_value); - } - - # the attribute is binary. (to do : need to fold the line) - } elseif (strcasecmp($key,'audio') == 0 || strcasecmp($key,'jpegPhoto') == 0) { - $output .= $this->vcardMapping[$key].':'.$this->br; - $output .= ' '.base64_encode($attr[0]); - - } else { - $output .= $this->vcardMapping[$key].':'.$attr[0]; + # Check the attributes needed for the delivery address field + $addr = 'ADR:'; + foreach ($this->deliveryAddress as $attr) { + if (isset($dndetails[$attr])) { + $addr .= $dndetails[$attr]; + unset($dndetails[$attr]); } - - $output .= $this->br; + $addr .= ';'; } - } - $output .= sprintf('UID:%s'."%s",isset($dndetails['entryUUID']) ? $dndetails['entryUUID'] : $dndetails['dn'],$this->br); - $output .= 'VERSION:2.1'.$this->br; - $output .= $addr.$this->br; - $output .= 'END:VCARD'.$this->br; - } # end while + $output = sprintf('BEGIN:VCARD%s',$this->br); - if ($this->compress) - echo gzencode($output); - else - echo $output; - } -} + # Loop for the attributes + foreach ($dndetails as $key => $attr) { + if (! is_array($attr)) + $attr = array($attr); -/** - * Export to cvs format - * - * @author Glen Ogilvie - * @package phpLDAPadmin - */ -class PlaCSVExporter extends PlaExporter { - function PlaCSVExporter($exporter) { - $this->exporter = $exporter; - } + # If an attribute of the ldap entry exist in the mapping array for vcard + if (isset($this->mapping[$key])) { - /** - * When doing an exporter, the method export need to be overriden. - * A basic implementation is provided here. Customize to your need - **/ - public $separator = ','; - public $qualifier = '"'; - public $multivalue_separator = ' | '; - public $escapeCode = '"'; + # Case of organisation. Need to append the possible ou attribute + if ($key == 'o') { + $output .= sprintf('%s:%s',$this->mapping[$key],$attr[0]); - function export() { - $entries = array(); - $headers = array(); + if (isset($entry['ou'])) + foreach ($entry['ou'] as $ou_value) + $output .= sprintf(';%s',$ou_value); - $ldap_info = $this->pla_get_ldap_info(); + # The attribute is binary. (to do : need to fold the line) + } elseif (in_array($key,array('audio','jpegphoto'))) { + $output .= $this->mapping[$key].':'.$this->br; + $output .= ' '.base64_encode($attr[0]); - $output = ''; - /* go thru and find all the attribute names first. This is needed, because, otherwise we have - * no idea as to which search attributes were actually populated with data */ - foreach ($this->pla_results() as $dn => $dndetails) { - foreach (array_keys($dndetails) as $key) { - if (!in_array($key,$headers)) - array_push($headers,$key); - } - array_push($entries,$dndetails); - } + } else { + $output .= $this->mapping[$key].':'.$attr[0]; + } - $num_headers = count($headers); - - # print out the headers - for ($i = 0; $i < $num_headers; $i++) { - $output .= $this->qualifier.$headers[$i].$this->qualifier; - if ($i < $num_headers-1) - $output .= $this->separator; - } - - array_shift($headers); - $num_headers--; - - $output .= $this->br; - - # loop on every entry - foreach ($entries as $index => $entry) { - $dn = $entry['dn']; - unset($entry['dn']); - $output .= $this->qualifier.$this->LdapEscape($dn).$this->qualifier.$this->separator; - - # print the attributes - for ($j=0; $j < $num_headers; $j++) { - $attr_name = $headers[$j]; - $output .= $this->qualifier; - - if (key_exists($attr_name,$entry)) { - $binary_attribute = $ldap_info->isAttrBinary($attr_name) ? 1 : 0; - - if (! is_array($entry[$attr_name])) - $attr_values = array($entry[$attr_name]); - else - $attr_values = $entry[$attr_name]; - - $num_attr_values = count($attr_values); - - for ($i=0; $i<$num_attr_values; $i++) { - if ($binary_attribute) - $output .= base64_encode($attr_values[$i]); - else - $output .= $this->LdapEscape($attr_values[$i]); - - if ($i < $num_attr_values - 1) - $output .= $this->multivalue_separator; + $output .= $this->br; } - } # end if key + } - $output .= $this->qualifier; - - if ($j < $num_headers - 1) - $output .= $this->separator; + $output .= sprintf('UID:%s%s',isset($dndetails['entryUUID']) ? $dndetails['entryUUID'] : $dndetails['dn'],$this->br); + $output .= sprintf('VERSION:2.1%s',$this->br); + $output .= sprintf('%s%s',$addr,$this->br); + $output .= sprintf('END:VCARD%s',$this->br); } - $output .= $this->br; } if ($this->compress) echo gzencode($output); else echo $output; - } #end export - - /* function to escape data, where the qualifier happens to also - * be in the data. */ - function LdapEscape ($var) { - return str_replace($this->qualifier,$this->escapeCode.$this->qualifier,$var); - } -} - -/** - * @package phpLDAPadmin - */ -class MyCustomExporter extends PlaExporter { - function MyCustomExporter($exporter) { - $this->exporter = $exporter; - } - - /** - * When doing an exporter, the method export need to be overriden. - * A basic implementation is provided here. Customize to your need - **/ - function export() { - - /* With the method pla->get_ldap_info, - * you have access to some values related - * to you ldap server */ - $ldap_info = $this->pla_get_ldap_info(); - - /* Just a simple loop. For each entry - * do your custom export - * see PlaLdifExporter or PlaDsmlExporter as an example */ - foreach ($this->pla_results() as $dn => $dndetails) { - unset($dndetails['dn']); - - # loop for the attributes - foreach ($dndetails as $key => $attr) { - if (! is_array($attr)) - $attr = array($attr); - - foreach ($attr as $value) { - /* simple example - echo "Attribute Name:".$attr; - echo " - value:".$value; - echo $this->br; - */ - } - } - } # end while } } ?> diff --git a/lib/functions.php b/lib/functions.php index b4b8443..cb0dbfa 100644 --- a/lib/functions.php +++ b/lib/functions.php @@ -1,5 +1,5 @@ _('Generic Error'), @@ -65,7 +74,30 @@ function __autoload($className) { } /** - * If gettext is not installed, we will emulate it here. + * Strips all slashes from the specified array in place (pass by ref). + * @param Array The array to strip slashes from, typically one of + * $_GET, $_POST, or $_COOKIE. + */ +function array_stripslashes(&$array) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$array); + + if (is_array($array)) + while (list($key) = each($array)) + if (is_array($array[$key]) && $key != $array) + array_stripslashes($array[$key]); + else + $array[$key] = stripslashes($array[$key]); +} + +/** + * Compatibility Functions + * These functions exist, so that a standard function can be used in new applications, and they + * map to already defined functions in older applications. + */ + +/** + * If gettext is not available in PHP, then this will provide compatibility for it. */ if (! function_exists('_')) { function _($msg) { @@ -88,14 +120,13 @@ if (! function_exists('_')) { * where error handling has been disabled (ie, from within a function called * with "@" prepended), then this function does nothing. * - * @param int $errno The PHP error number that occurred (ie, E_ERROR, E_WARNING, E_PARSE, etc). - * @param string $errstr The PHP error string provided (ie, "Warning index "foo" is undefined) - * @param string $file The file in which the PHP error ocurred. - * @param int $lineno The line number on which the PHP error ocurred - * + * @param int The PHP error number that occurred (ie, E_ERROR, E_WARNING, E_PARSE, etc). + * @param string The PHP error string provided (ie, "Warning index "foo" is undefined) + * @param string The file in which the PHP error ocurred. + * @param int The line number on which the PHP error ocurred * @see set_error_handler */ -function pla_error_handler($errno,$errstr,$file,$lineno) { +function app_error_handler($errno,$errstr,$file,$lineno) { if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, $errno,$errstr,$file,$lineno); @@ -140,12 +171,12 @@ function pla_error_handler($errno,$errstr,$file,$lineno) { $body .= sprintf('%s:%s %s %s, %s %s', _('File'),$file,_('line'),$lineno,_('caller'),$caller); $body .= sprintf('Versions:PLA: %s, PHP: %s, SAPI: %s', - pla_version(),phpversion(),php_sapi_name()); - $body .= sprintf('Web server:%s',$_SERVER['SERVER_SOFTWARE']); + app_version(),phpversion(),php_sapi_name()); + $body .= sprintf('Web server:%s',isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : 'SCRIPT'); if (function_exists('get_href')) - $body .= sprintf('
%s.
', - get_href('search_bug',"&summary_keyword=".htmlspecialchars($errstr)), + $body .= sprintf('
%s.
', + get_href('search_bug',"&summary_keyword=".rawurlencode($errstr)), _('Please check and see if this bug has been reported')); $body .= ''; @@ -162,20 +193,27 @@ function pla_error_handler($errno,$errstr,$file,$lineno) { } /** - * Returns the phpLDAPadmin version currently running. The version + * Returns the application name. + */ +function app_name() { + return 'phpLDAPadmin'; +} + +/** + * Returns the application version currently running. The version * is read from the file named VERSION. * * @return string The current version as read from the VERSION file. */ -function pla_version() { - static $return = null; +function app_version() { + static $CACHE = null; - if ($return) - return $return; + if ($CACHE) + return $CACHE; $version_file = realpath(LIBDIR.'../VERSION'); if (! file_exists($version_file)) - $return = 'UNKNOWN'; + $CACHE = 'UNKNOWN'; else { $f = fopen($version_file,'r'); @@ -185,26 +223,26 @@ function pla_version() { # We use cvs_prefix, because CVS will translate this on checkout otherwise. $cvs_prefix = '\$Name:'; - $return = preg_replace('/^'.$cvs_prefix.' RELEASE-([0-9_]+)\s*\$$/','$1',$version); - $return = preg_replace('/_/','.',$return); + $CACHE = preg_replace('/^'.$cvs_prefix.' RELEASE-([0-9_]+)\s*\$$/','$1',$version); + $CACHE = preg_replace('/_/','.',$CACHE); # Check if we are a CVS copy. - if (preg_match('/^'.$cvs_prefix.'?\s*\$$/',$return)) - $return = 'CVS'; + if (preg_match('/^'.$cvs_prefix.'?\s*\$$/',$CACHE)) + $CACHE = 'CVS'; # Check if we are special CVS branch - elseif (preg_match('/^'.$cvs_prefix.'?\s*([a-zA-Z]+)?\s*\$$/',$return,$match)) - $return = $match[1]; + elseif (preg_match('/^'.$cvs_prefix.'?\s*([a-zA-Z]+)?\s*\$$/',$CACHE,$match)) + $CACHE = $match[1]; # If return is still the same as version, then the tag is not one we expect. - elseif ($return == $version) - $return = 'UNKNOWN'; + elseif ($CACHE == $version) + $CACHE = 'UNKNOWN'; } if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,$return); + debug_log('Entered with (), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,$CACHE); - return $return; + return $CACHE; } /** @@ -221,15 +259,9 @@ function auto_lang($lang) { } /** - * Makes sure that the config file is properly setup and - * that your install of PHP can handle LDAP stuff. + * Makes sure that the config file is properly setup. */ function check_config($config_file) { - global $config,$ldapservers; - global $queries, $attrs_display_order; - global $hidden_attrs, $hidden_except_dn, $hidden_attrs_ro; - global $read_only_attrs, $read_only_except_dn, $unique_attrs; - # Read in config_default.php require_once LIBDIR.'config_default.php'; @@ -243,6 +275,9 @@ function check_config($config_file) { $config = new Config; + if (file_exists(LIBDIR.'config_custom.php') && is_readable(LIBDIR.'config_custom.php')) + include LIBDIR.'config_custom.php'; + ob_start(); require $config_file; $str = ''; @@ -280,7 +315,7 @@ function check_config($config_file) { if ($i < 0) continue; - $body .= sprintf('%s: %s
',$i+1,htmlspecialchars($file[$i])); + $body .= sprintf('%s: %s
',$i+1,$file[$i]); if ($i+1 == $line_num) $body .= ''; @@ -301,40 +336,21 @@ function check_config($config_file) { } } - # Process our friendly attributes. - if (isset($friendly_attrs)) - $config->getFriendlyAttrs($friendly_attrs); - # Check for server definitions. - if (! isset($ldapservers) || count($ldapservers->GetServerList()) == 0) - system_message(array( - 'title'=>_('Missing required configuration'), - 'body'=> 'Your config.php is missing Server Definitions. Please see the sample file config/config.php.example.', - 'type'=>'error')); + if (! isset($servers) || count($servers->GetServerList()) == 0) + error(_('Your config.php is missing Server Definitions. Please see the sample file config/config.php.example.'),'error','index.php',true); - $config->ldapservers = $ldapservers; - - if (isset($queries)) $config->queries = $queries; - if (isset($attrs_display_order)) $config->attrs_display_order = $attrs_display_order; - if (isset($hidden_attrs)) $config->hidden_attrs = $hidden_attrs; - if (isset($hidden_except_dn)) $config->hidden_except_dn = $hidden_except_dn; - if (isset($hidden_attrs_ro)) $config->hidden_attrs_ro = $hidden_attrs_ro; - if (isset($read_only_attrs)) $config->read_only_attrs = $read_only_attrs; - if (isset($read_only_except_dn)) $config->read_only_except_dn = $read_only_except_dn; - if (isset($unique_attrs)) $config->unique_attrs = $unique_attrs; + $config->setServers($servers); # Check the memory limit parameter. - if (ini_get('memory_limit') < $config->GetValue('session','memorylimit')) + if ((ini_get('memory_limit') > -1) && ini_get('memory_limit') < $config->getValue('session','memorylimit')) system_message(array( 'title'=>_('Memory Limit low.'), - 'body'=> sprintf('Your php memory limit is low - currently %s',ini_get('memory_limit'),false), + 'body'=>sprintf('Your php memory limit is low - currently %s, you should increase it to atleast %s. This is normally controlled in /etc/php.ini.', + ini_get('memory_limit'),$config->getValue('session','memorylimit')), 'type'=>'error')); - # if $_SESSION['sysmsg'] is set, then there were problems. - if (isset($_SESSION['sysmsg'])) - return false; - - return true; + return $config; } /** @@ -342,38 +358,82 @@ function check_config($config_file) { * * @return array */ -function cmd_control_pane() { - return array( - 'home'=>array('link'=>sprintf('%s
%s
',_('Home'),IMGDIR,_('Home'),_('Home'))), - 'purge'=>array('link'=>sprintf('%s
%s
', - _('Purge caches'),IMGDIR,_('Purge all cached data in phpLDAPadmin, including server schemas.'),_('Purge caches'))), - 'external_links:feature'=>array('link'=>sprintf('%s
%s
', - get_href('add_rfe'),_('Request feature'),IMGDIR,_('light'),_('Request feature'))), - 'external_links:bug'=>array('link'=>sprintf('%s
%s
', - get_href('add_bug'),_('Report a bug'),IMGDIR,_('bug'),_('Report a bug'))), - 'external_links:donation'=>array('link'=>sprintf('%s
%s
', - get_href('donate'),_('Donate'),IMGDIR,_('Donate'),_('Donate'))), - 'appearance:hide_debug_info'=>array('link'=>sprintf('%s
%s
', - _('Show Cache'),IMGDIR,_('Show Cache'),_('Show Cache'))), - 'external_links:help'=>array('link'=>sprintf('%s
%s
', - get_href('documentation'),_('Help'),IMGDIR,_('Help'),_('Help'))) - ); +function cmd_control_pane($type) { + switch ($type) { + case 'main' : + return array( + 'home'=>array( + 'title'=>_('Home'), + 'link'=>sprintf('href="index.php" title="%s"',_('Home')), + 'image'=>sprintf('%s',IMGDIR,_('Home'))), + + 'purge'=>array( + 'title'=>_('Purge caches'), + 'link'=>sprintf('href="cmd.php?cmd=purge_cache" onclick="return displayAJ(\'BODY\',\'cmd=purge_cache\',\'%s\');" title="%s"', + _('Clearing cache'),_('Purge caches')), + 'image'=>sprintf('%s',IMGDIR,_('Purge caches'))), + + 'appearance:hide_debug_info'=>array( + 'title'=>_('Show Cache'), + 'link'=>sprintf('href="cmd.php?cmd=show_cache" onclick="return displayAJ(\'BODY\',\'cmd=show_cache\',\'%s\');" title="%s"', + _('Loading'),_('Show Cache'),_('Show Cache')), + 'image'=>sprintf('%s',IMGDIR,_('Show Cache'))), + ); + break; + + case 'top' : + return array( + 'external_links:forum'=>array( + 'title'=>_('Forum'), + 'link'=>sprintf('href="%s" title="%s" target="_blank"',get_href('forum'),_('Forum')), + 'image'=>sprintf('%s',IMGDIR,_('Forum'))), + + 'external_links:feature'=>array( + 'title'=>_('Request feature'), + 'link'=>sprintf('href="%s" title="%s" target="_blank"',get_href('add_rfe'),_('Request feature')), + 'image'=>sprintf('%s',IMGDIR,_('Request feature'))), + + 'external_links:bug'=>array( + 'title'=>_('Report a bug'), + 'link'=>sprintf('href="%s" title="%s" target="_blank"',get_href('add_bug'),_('Report a bug')), + 'image'=>sprintf('%s',IMGDIR,_('Report a bug'))), + + 'external_links:donation'=>array( + 'title'=>_('Donate'), + 'link'=>sprintf('href="%s" title="%s" target="_blank"',get_href('donate'),_('Donate')), + 'image'=>sprintf('%s',IMGDIR,_('Donate'))), + + 'external_links:help'=>array( + 'title'=>_('Help'), + 'link'=>sprintf('href="%s" title="%s" target="_blank"',get_href('documentation'),_('Help')), + 'image'=>sprintf('%s',IMGDIR,_('Help'))) + ); + break; + } } /** * This function dumps the $variable for debugging purposes + * * @param string|array Variable to dump * @param boolean Whether to stop execution or not. */ function debug_dump($variable,$die=false,$onlydebugaddr=false) { if ($onlydebugaddr && - isset($_SESSION[APPCONFIG]) && $_SESSION[APPCONFIG]->GetValue('debug','addr') && - $_SERVER['HTTP_X_FORWARDED_FOR'] != $_SESSION[APPCONFIG]->GetValue('debug','addr') && - $_SERVER['REMOTE_ADDR'] != $_SESSION[APPCONFIG]->GetValue('debug','addr')) + isset($_SESSION[APPCONFIG]) && $_SESSION[APPCONFIG]->getValue('debug','addr') && + $_SERVER['HTTP_X_FORWARDED_FOR'] != $_SESSION[APPCONFIG]->getValue('debug','addr') && + $_SERVER['REMOTE_ADDR'] != $_SESSION[APPCONFIG]->getValue('debug','addr')) return; + $backtrace = debug_backtrace(); + $caller['class'] = isset($backtrace[0]['class']) ? $backtrace[0]['class'] : 'N/A'; + $caller['function'] = isset($backtrace[0]['function']) ? $backtrace[0]['function'] : 'N/A'; + $caller['file'] = isset($backtrace[0]['file']) ? $backtrace[0]['file'] : 'N/A'; + $caller['line'] = isset($backtrace[0]['line']) ? $backtrace[0]['line'] : 'N/A'; + $caller['debug'] = $variable; + print '
';
-	print_r($variable);
+	print_r($caller);
 	print '
'; if ($die) @@ -382,6 +442,7 @@ function debug_dump($variable,$die=false,$onlydebugaddr=false) { /** * This function generates a backtrace + * * @param boolean Whether to stop execution or not. */ function debug_dump_backtrace($msg='Calling BackTrace',$die=false) { @@ -389,7 +450,14 @@ function debug_dump_backtrace($msg='Calling BackTrace',$die=false) { } /** - * Debug Logging to Syslog + * Send a debug as a sys message + */ +function debug_sysmsg($msg) { + system_message(array('title'=>_('Debug'),'body'=>$msg,'type'=>'debug')); +} + +/** + * Debug Logging * * The global debug level is turned on in your configuration file by setting: * @@ -397,7 +465,7 @@ function debug_dump_backtrace($msg='Calling BackTrace',$die=false) { * * together with atleast one output direction (currently file and syslog are supported). * - * $config->custom->debug['file'] = '/tmp/pla_debug.log'; + * $config->custom->debug['file'] = '/tmp/app_debug.log'; * $config->custom->debug['syslog'] = true; * * @@ -414,13 +482,13 @@ function debug_dump_backtrace($msg='Calling BackTrace',$die=false) { * 5( 32) = Tree Processing * 7( 64) = Other non generic messages * 8(128) = Page Processing - * @param string $msg Message to send to syslog - * @param int $level Log bit number for this message. + * 9(256) = Hooks Processing + * @param string Message to send to syslog + * @param int Log bit number for this message. * @see syslog.php */ - function debug_log($msg,$level=0) { - global $debug_file,$timer; + global $debug_file; # Temporary, to catch when these are not set in the function arguments. $file = __FILE__; @@ -428,22 +496,23 @@ function debug_log($msg,$level=0) { $method = __METHOD__; # In case we are called before we are fully initialised or if debugging is not set. - if (! isset($_SESSION[APPCONFIG]) || ! ($_SESSION[APPCONFIG]->GetValue('debug','file') - || $_SESSION[APPCONFIG]->GetValue('debug','syslog'))) + if (! isset($_SESSION[APPCONFIG]) || ! ($_SESSION[APPCONFIG]->getValue('debug','file') + || $_SESSION[APPCONFIG]->getValue('debug','syslog'))) return false; - $debug_level = $_SESSION[APPCONFIG]->GetValue('debug','level'); + $debug_level = $_SESSION[APPCONFIG]->getValue('debug','level'); if (! $debug_level || (! ($level & $debug_level))) return; $debugaddr = false; - if ($_SESSION[APPCONFIG]->GetValue('debug','addr')) { - if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] == $_SESSION[APPCONFIG]->GetValue('debug','addr')) + if ($_SESSION[APPCONFIG]->getValue('debug','addr')) + if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] == $_SESSION[APPCONFIG]->getValue('debug','addr')) + $debugaddr = true; + elseif ($_SERVER['REMOTE_ADDR'] == $_SESSION[APPCONFIG]->getValue('debug','addr')) $debugaddr = true; - elseif ($_SERVER['REMOTE_ADDR'] == $_SESSION[APPCONFIG]->GetValue('debug','addr')) - $debugaddr = true; - } else $debugaddr = true; + else + $debugaddr = true; if (! $debugaddr) return; @@ -480,18 +549,16 @@ function debug_log($msg,$level=0) { $debug_message = sprintf('[%2.3f] %3s-%s(%04s): %s: %s',$timer,$level,basename($file),$line,$method,substr($msg,0,200)); - if ($debug_file || $_SESSION[APPCONFIG]->GetValue('debug','file')) { + if ($debug_file || $_SESSION[APPCONFIG]->getValue('debug','file')) { if (! $debug_file) - $debug_file = fopen($_SESSION[APPCONFIG]->GetValue('debug','file'), - $_SESSION[APPCONFIG]->GetValue('debug','append') ? 'a' : 'w'); + $debug_file = fopen($_SESSION[APPCONFIG]->getValue('debug','file'), + $_SESSION[APPCONFIG]->getValue('debug','append') ? 'a' : 'w'); fwrite($debug_file,$debug_message."\n"); } - if ($_SESSION[APPCONFIG]->GetValue('debug','syslog')) + if ($_SESSION[APPCONFIG]->getValue('debug','syslog')) syslog_notice($debug_message); - - return syslog_notice( sprintf('%s(%s): %s',$caller,$level,$msg) ); } /** @@ -499,13 +566,13 @@ function debug_log($msg,$level=0) { */ function error($msg,$type='note',$redirect=null,$fatal=false,$backtrace=false) { global $www; - global $counter; + static $counter; # Just a check to see that we are called right. if (! isset($www['page']) && ! $fatal) die("Function error called incorrectly [$msg]"); - # if the error is fatal, we'll need to stop here. + # If the error is fatal, we'll need to stop here. if (! isset($www['page'])) $www['page'] = new page(); @@ -529,8 +596,8 @@ function error($msg,$type='note',$redirect=null,$fatal=false,$backtrace=false) { $body .= "\n"; foreach (debug_backtrace() as $error => $line) { - $_SESSION['backtrace'][$error]['file'] = $line['file']; - $_SESSION['backtrace'][$error]['line'] = $line['line']; + $_SESSION['backtrace'][$error]['file'] = isset($line['file']) ? $line['file'] : 'unknown'; + $_SESSION['backtrace'][$error]['line'] = isset($line['line']) ? $line['line'] : 'unknown'; $body .= sprintf('%s%s (%s)', _('File'),isset($line['file']) ? $line['file'] : $last['file'],isset($line['line']) ? $line['line'] : ''); @@ -543,14 +610,14 @@ function error($msg,$type='note',$redirect=null,$fatal=false,$backtrace=false) { $_SESSION['backtrace'][$error]['args'] = $line['args']; if (file_exists(LIBDIR.'../tools/unserialize.php')) $body .= sprintf(' (%s)', - '../tools/unserialize.php',$error,htmlspecialchars($display)); + '../tools/unserialize.php',$error,$display); else - $body .= sprintf(' (%s)',htmlspecialchars($display)); + $body .= sprintf(' (%s)',$display); } $body .= '
'; $body .= "\n"; - if ($line['file']) + if (isset($line['file'])) $last['file'] = $line['file']; } @@ -569,37 +636,36 @@ function error($msg,$type='note',$redirect=null,$fatal=false,$backtrace=false) { /** * Return the result of a form variable, with optional default + * + * @return The form GET/REQUEST/SESSION/POST variable value or its default */ -function get_request($attr,$type=null,$die=false,$default=null) { +function get_request($attr,$type='POST',$die=false,$default=null) { switch($type) { case 'GET': - $value = isset($_GET[$attr]) ? $_GET[$attr] : $default; + $value = isset($_GET[$attr]) ? (is_array($_GET[$attr]) ? $_GET[$attr] : rawurldecode($_GET[$attr])) : $default; break; case 'REQUEST': - $value = isset($_REQUEST[$attr]) ? $_REQUEST[$attr] : $default; + $value = isset($_REQUEST[$attr]) ? (is_array($_REQUEST[$attr]) ? $_REQUEST[$attr] : rawurldecode($_REQUEST[$attr])) : $default; break; case 'SESSION': - $value = isset($_SESSION[$attr]) ? $_SESSION[$attr] : $default; + $value = isset($_SESSION[$attr]) ? (is_array($_SESSION[$attr]) ? $_SESSION[$attr] : rawurldecode($_SESSION[$attr])) : $default; break; case 'POST': default: - $value = isset($_POST[$attr]) ? $_POST[$attr] : $default; + $value = isset($_POST[$attr]) ? (is_array($_POST[$attr]) ? $_POST[$attr] : rawurldecode($_POST[$attr])) : $default; break; } - if (! is_array($value) && trim($value) == "") - $value = $default; - if ($die && is_null($value)) - system_message(array( + system_message(array( 'title'=>_('Generic Error'), 'body'=>sprintf('%s: Called "%s" without "%s" using "%s"', basename($_SERVER['PHP_SELF']),get_request('cmd','REQUEST'),$attr,$type), 'type'=>'error'), - sprintf('index.php?server_id=%s',$ldapserver->server_id)); + 'index.php'); return $value; } @@ -618,10 +684,20 @@ function system_message($msg,$redirect=null) { if (! isset($msg['type'])) $msg['type'] = 'info'; - $_SESSION['sysmsg'][] = $msg; + if (! isset($_SESSION['sysmsg']) || ! is_array($_SESSION['sysmsg'])) + $_SESSION['sysmsg'] = array(); - if (get_request('redirect','GET')) - debug_dump_backtrace('Redirect Loop Detected',true); + # Try and detect if we are in a redirect loop + if (get_request('redirect','GET') && $msg['type'] != 'debug') { + foreach ($_SESSION['sysmsg'] as $detail) { + if ($msg == $detail && ! isset($detail['special'])) { + debug_dump(array('Incoming MSG'=>$msg,'existing'=>$_SESSION['sysmsg'])); + debug_dump_backtrace('Redirect Loop Detected',true); + } + } + } + + array_push($_SESSION['sysmsg'],$msg); if ($redirect) { if (preg_match('/\?/',$redirect)) @@ -630,6 +706,10 @@ function system_message($msg,$redirect=null) { $redirect .= '?'; $redirect .= 'redirect=true'; + # Check if we were an ajax request, and only render the ajax message + if (get_request('meth','REQUEST') == 'ajax') + $redirect .= '&meth=ajax'; + header("Location: $redirect"); die(); } @@ -642,23 +722,19 @@ function system_message($msg,$redirect=null) { /** * Encryption using blowfish algorithm * - * @param string original data - * @param string the secret - * - * @return string the encrypted result - * - * @access public - * - * @author lem9 (taken from the phpMyAdmin source) + * @param string Original data + * @param string The secret + * @return string The encrypted result + * @author lem9 (taken from the phpMyAdmin source) */ -function pla_blowfish_encrypt($data,$secret=null) { +function blowfish_encrypt($data,$secret=null) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__, $data,$secret); # If our secret is null or blank, get the default. if ($secret === null || ! trim($secret)) - $secret = $_SESSION[APPCONFIG]->GetValue('session','blowfish'); + $secret = $_SESSION[APPCONFIG]->getValue('session','blowfish') ? $_SESSION[APPCONFIG]->getValue('session','blowfish') : session_id(); # If the secret isnt set, then just return the data. if (! trim($secret)) @@ -686,16 +762,12 @@ function pla_blowfish_encrypt($data,$secret=null) { /** * Decryption using blowfish algorithm * - * @param string encrypted data - * @param string the secret - * - * @return string original data - * - * @access public - * - * @author lem9 (taken from the phpMyAdmin source) + * @param string Encrypted data + * @param string The secret + * @return string Original data + * @author lem9 (taken from the phpMyAdmin source) */ -function pla_blowfish_decrypt($encdata,$secret=null) { +function blowfish_decrypt($encdata,$secret=null) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__, $encdata,$secret); @@ -708,7 +780,7 @@ function pla_blowfish_decrypt($encdata,$secret=null) { # If our secret is null or blank, get the default. if ($secret === null || ! trim($secret)) - $secret = $_SESSION[APPCONFIG]->GetValue('session','blowfish'); + $secret = $_SESSION[APPCONFIG]->getValue('session','blowfish') ? $_SESSION[APPCONFIG]->getValue('session','blowfish') : session_id(); # If the secret isnt set, then just return the data. if (! trim($secret)) @@ -731,6 +803,40 @@ function pla_blowfish_decrypt($encdata,$secret=null) { return $return; } +/** + * String padding + * + * @param string Input string + * @param integer Length of the result + * @param string The filling string + * @param integer Padding mode + * @return string The padded string + */ +function full_str_pad($input,$pad_length,$pad_string='',$pad_type=0) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, + $input,$pad_length,$pad_string,$pad_type); + + $str = ''; + $length = $pad_length - strlen($input); + + if ($length > 0) { // str_repeat doesn't like negatives + if ($pad_type == STR_PAD_RIGHT) { // STR_PAD_RIGHT == 1 + $str = $input.str_repeat($pad_string, $length); + } elseif ($pad_type == STR_PAD_BOTH) { // STR_PAD_BOTH == 2 + $str = str_repeat($pad_string, floor($length/2)); + $str .= $input; + $str .= str_repeat($pad_string, ceil($length/2)); + } else { // defaults to STR_PAD_LEFT == 0 + $str = str_repeat($pad_string, $length).$input; + } + + } else { // if $length is negative or zero we don't need to do anything + $str = $input; + } + return $str; +} + /** * Returns the cached array of LDAP resources. * @@ -742,55 +848,43 @@ function pla_blowfish_decrypt($encdata,$secret=null) { * @return Returns the cached attributed requested, * or null if there is nothing cached.. */ -function get_cached_item($server_id,$item,$subitem='null') { +function get_cached_item($index,$item,$subitem='null') { # Set default return $return = null; # Check config to make sure session-based caching is enabled. - if ($_SESSION[APPCONFIG]->GetValue('cache',$item)) { - - global $CACHE; - if (isset($CACHE[$server_id][$item][$subitem])) { - if (DEBUG_ENABLED) - debug_log('Returning MEMORY cached [%s] (%s)',1,__FILE__,__LINE__,__METHOD__, - $item,$subitem); - - $return = $CACHE[$server_id][$item][$subitem]; - - } elseif (isset($_SESSION['cache'][$server_id][$item][$subitem])) { + if ($_SESSION[APPCONFIG]->getValue('cache',$item)) + if (isset($_SESSION['cache'][$index][$item][$subitem])) { if (DEBUG_ENABLED) debug_log('Returning SESSION cached [%s] (%s)',1,__FILE__,__LINE__,__METHOD__, $item,$subitem); - $return = $_SESSION['cache'][$server_id][$item][$subitem]; - $CACHE[$server_id][$item][$subitem] = $return; - + $return = $_SESSION['cache'][$index][$item][$subitem]; } - } if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s), Returning (%s)',1,__FILE__,__LINE__,__METHOD__, - $server_id,$item,$subitem,$return); + $index,$item,$subitem,$return); return $return; } /** - * Caches the specified $item for the specified $server_id. + * Caches the specified $item for the specified $index. * * Returns true on success of false on failure. */ -function set_cached_item($server_id,$item,$subitem='null',$data) { +function set_cached_item($index,$item,$subitem='null',$data) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $server_id,$item,$subitem,$data); + $index,$item,$subitem,$data); # Check config to make sure session-based caching is enabled. - if ($_SESSION[APPCONFIG]->GetValue('cache',$item)) { + if ($_SESSION[APPCONFIG]->getValue('cache',$item)) { global $CACHE; - $CACHE[$server_id][$item][$subitem] = $data; - $_SESSION['cache'][$server_id][$item][$subitem] = $data; + $CACHE[$index][$item][$subitem] = $data; + $_SESSION['cache'][$index][$item][$subitem] = $data; return true; } else @@ -798,40 +892,40 @@ function set_cached_item($server_id,$item,$subitem='null',$data) { } /** - * Deletes the cache for a specified $item for the specified $server_id - * - * @return: void + * Deletes the cache for a specified $item for the specified $index */ -function del_cached_item($server_id,$item,$subitem='null') { +function del_cached_item($index,$item,$subitem='null') { + global $CACHE; + if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $server_id,$item,$subitem); + $index,$item,$subitem); # Check config to make sure session-based caching is enabled. - if (isset($_SESSION['cache'][$server_id][$item][$subitem])) - unset($_SESSION['cache'][$server_id][$item][$subitem]); + if (isset($_SESSION['cache'][$index][$item][$subitem])) + unset($_SESSION['cache'][$index][$item][$subitem]); + + if (isset($CACHE[$index][$item][$subitem])) + unset($CACHE[$index][$item][$subitem]); } /** * Utility wrapper for setting cookies, which takes into consideration - * phpLDAPadmin configuration values. On success, true is returned. On + * application configuration values. On success, true is returned. On * failure, false is returned. * - * @param string $name The name of the cookie to set. - * @param string $val The value of the cookie to set. - * @param int $expire (optional) The duration in seconds of this cookie. If unspecified, $cookie_time - * is used from config.php - * @param string $dir (optional) The directory value of this cookie (see php.net/setcookie) - * - * @see setcookie - * @return bool + * @param string The name of the cookie to set. + * @param string The value of the cookie to set. + * @param int (optional) The duration in seconds of this cookie. If unspecified, $cookie_time is used from config.php + * @param string (optional) The directory value of this cookie (see php.net/setcookie) + * @return boolean */ -function pla_set_cookie($name,$val,$expire=null,$dir=null) { +function set_cookie($name,$val,$expire=null,$dir=null) { # Set default return $return = false; if ($expire == null) { - $cookie_time = $_SESSION[APPCONFIG]->GetValue('session','cookie_time'); + $cookie_time = $_SESSION[APPCONFIG]->getValue('session','cookie_time'); $expire = $cookie_time == 0 ? null : time() + $cookie_time; } @@ -850,6 +944,133 @@ function pla_set_cookie($name,$val,$expire=null,$dir=null) { return $return; } +/** + * Get a customized file for a server + * We don't need any caching, because it's done by PHP + * + * @param int The ID of the server + * @param string The requested filename + * + * @return string The customized filename, if exists, or the standard one + */ +function get_custom_file($index,$filename,$path) { + # Set default return + $return = $path.$filename; + $server = $_SESSION[APPCONFIG]->getServer($index); + + $custom = $server->getValue('custom','pages_prefix'); + if (! is_null($custom) && is_file(realpath($path.$custom.$filename))) + $return = $path.$custom.$filename; + + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s), Returning (%s)',1,__FILE__,__LINE__,__METHOD__, + $index,$filename,$path,$return); + + return $return; +} + +/** + * Sort a multi dimensional array. + * + * @param array Multi demension array passed by reference + * @param string Comma delimited string of sort keys. + * @param boolean Whether to reverse sort. + * @return array Sorted multi demension array. + */ +function masort(&$data,$sortby,$rev=0) { + if (DEBUG_ENABLED) + debug_log('Entered with (%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, + $data,$sortby,$rev); + + # if the array to sort is null or empty + if (! $data) return; + + static $CACHE = array(); + + if (empty($CACHE[$sortby])) { + $code = "\$c=0;\n"; + + foreach (explode(',',$sortby) as $key) { + $code .= "if (is_object(\$a) || is_object(\$b)) {\n"; + + $code .= " if (is_array(\$a->$key)) {\n"; + $code .= " asort(\$a->$key);\n"; + $code .= " \$aa = array_shift(\$a->$key);\n"; + $code .= " } else\n"; + $code .= " \$aa = \$a->$key;\n"; + + $code .= " if (is_array(\$b->$key)) {\n"; + $code .= " asort(\$b->$key);\n"; + $code .= " \$bb = array_shift(\$b->$key);\n"; + $code .= " } else\n"; + $code .= " \$bb = \$b->$key;\n"; + + $code .= " if (\$aa != \$bb)"; + if ($rev) + $code .= " return (\$aa < \$bb ? 1 : -1);\n"; + else + $code .= " return (\$aa > \$bb ? 1 : -1);\n"; + + $code .= "} else {\n"; + + $code .= " \$a = array_change_key_case(\$a);\n"; + $code .= " \$b = array_change_key_case(\$b);\n"; + + $key = strtolower($key); + + $code .= " if ((! isset(\$a['$key'])) && isset(\$b['$key'])) return 1;\n"; + $code .= " if (isset(\$a['$key']) && (! isset(\$b['$key']))) return -1;\n"; + + $code .= " if ((isset(\$a['$key'])) && (isset(\$b['$key']))) {\n"; + $code .= " if (is_array(\$a['$key'])) {\n"; + $code .= " asort(\$a['$key']);\n"; + $code .= " \$aa = array_shift(\$a['$key']);\n"; + $code .= " } else\n"; + $code .= " \$aa = \$a['$key'];\n"; + + $code .= " if (is_array(\$b['$key'])) {\n"; + $code .= " asort(\$b['$key']);\n"; + $code .= " \$bb = array_shift(\$b['$key']);\n"; + $code .= " } else\n"; + $code .= " \$bb = \$b['$key'];\n"; + + $code .= " if (\$aa != \$bb)\n"; + $code .= " if (is_numeric(\$aa) && is_numeric(\$bb)) {\n"; + + if ($rev) + $code .= " return (\$aa < \$bb ? 1 : -1);\n"; + else + $code .= " return (\$aa > \$bb ? 1 : -1);\n"; + + $code .= " } else {\n"; + + if ($rev) + $code .= " if ( (\$c = strcasecmp(\$bb,\$aa)) != 0 ) return \$c;\n"; + else + $code .= " if ( (\$c = strcasecmp(\$aa,\$bb)) != 0 ) return \$c;\n"; + + $code .= " }\n"; + $code .= " }\n"; + $code .= "}\n"; + } + + $code .= 'return $c;'; + + $CACHE[$sortby] = create_function('$a, $b',$code); + } + + uasort($data,$CACHE[$sortby]); +} + +/** + * Is compression enabled for output + */ +function isCompress() { + return (isset($_SESSION[APPCONFIG]) && $_SESSION[APPCONFIG]->getValue('appearance','compress') + && ! ini_get('zlib.output_compression') + && preg_match('/gzip/',$_SERVER['HTTP_ACCEPT_ENCODING'])); +} + /** * PLA specific Functions */ @@ -860,17 +1081,22 @@ function pla_set_cookie($name,$val,$expire=null,$dir=null) { * * This is configured in config.php thus: * - * $obfuscate_password_display = true; + * $config->custom->appearance['obfuscate_password_display'] = true; * * - * @param string $enc Password encoding type - * @return bool + * Or if it is OK to show encrypted passwords but not clear text passwords + * + * $config->custom->appearance['show_clear_password'] = false; + * + * + * @param string Password encoding type + * @return boolean */ function obfuscate_password_display($enc=null) { - if ($_SESSION[APPCONFIG]->GetValue('appearance','obfuscate_password_display')) + if ($_SESSION[APPCONFIG]->getValue('appearance','obfuscate_password_display')) $return = true; - elseif (! $_SESSION[APPCONFIG]->GetValue('appearance','show_clear_password') && (is_null($enc) || $enc == 'clear')) + elseif (! $_SESSION[APPCONFIG]->getValue('appearance','show_clear_password') && (is_null($enc) || $enc == 'clear')) $return = true; else @@ -890,7 +1116,7 @@ function obfuscate_password_display($enc=null) { * "pretty" HTML. The returned HTML is NOT to be used as a real DN, but * simply displayed. * - * @param string $dn The DN to pretty-print. + * @param string The DN to pretty-print. * @return string */ function pretty_print_dn($dn) { @@ -923,9 +1149,8 @@ function pretty_print_dn($dn) { * * (See unit_test.php for test cases) * - * @param string $attr The attribute to examine for "DNness" - * @see unit_test.php - * @return bool + * @param string The attribute to examine for "DNness" + * @return boolean */ function is_dn_string($str) { if (DEBUG_ENABLED) @@ -961,9 +1186,8 @@ function is_dn_string($str) { /** * Get whether a string looks like an email address (user@example.com). * - * @param string $str The string to analyze. - * @return bool Returns true if the specified string looks like - * an email address or false otherwise. + * @param string The string to analyze. + * @return boolean Returns true if the specified string looks like an email address or false otherwise. */ function is_mail_string($str) { if (DEBUG_ENABLED) @@ -980,15 +1204,14 @@ function is_mail_string($str) { /** * Get whether a string looks like a web URL (http://www.example.com/) * - * @param string $str The string to analyze. - * @return bool Returns true if the specified string looks like - * a web URL or false otherwise. + * @param string The string to analyze. + * @return boolean Returns true if the specified string looks like a web URL or false otherwise. */ function is_url_string($str) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$str); - $url_regex = '/(ftp|https?):\/\/+[\w\.\-\/\?\=\&]*\w+/'; + $url_regex = '/^(ftp|https?):\/\/+[\w\.\-\/\?\=\&]*\w+/'; if (preg_match($url_regex,$str)) return true; @@ -996,30 +1219,6 @@ function is_url_string($str) { return false; } -/** - * Get a customized file for a server - * We don't need any caching, because it's done by PHP - * - * @param int $server_id The ID of the server - * @param string $filename The requested filename - * - * @return string The customized filename, if exists, or the standard one - */ -function get_custom_file($server_id,$filename,$path) { - # Set default return - $return = $path.$filename; - - $custom = $_SESSION[APPCONFIG]->ldapservers->GetValue($server_id,'custom','pages_prefix'); - if (! is_null($custom) && is_file(realpath($path.$custom.$filename))) - $return = $path.$custom.$filename; - - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s), Returning (%s)',1,__FILE__,__LINE__,__METHOD__, - $server_id,$filename,$path,$return); - - return $return; -} - /** * Compares 2 DNs. If they are equivelant, returns 0, otherwise, * returns their sorting order (similar to strcmp()): @@ -1047,8 +1246,8 @@ function get_custom_file($server_id,$filename,$path) { * cn=Fred,ou=people,dc=example,dc=org * * - * @param string $dn1 The first of two DNs to compare - * @param string $dn2 The second of two DNs to compare + * @param string The first of two DNs to compare + * @param string The second of two DNs to compare * @return int */ function pla_compare_dns($dn1,$dn2) { @@ -1057,9 +1256,15 @@ function pla_compare_dns($dn1,$dn2) { # If pla_compare_dns is passed via a tree, then we'll just get the DN part. if (is_array($dn1)) - $dn1 = $dn1['dn']; + if (isset($dn1['dn'])) + $dn1 = $dn1['dn']; + else + $dn1 = implode('+',$dn1); if (is_array($dn2)) - $dn2 = $dn2['dn']; + if (isset($dn2['dn'])) + $dn2 = $dn2['dn']; + else + $dn2 = implode('+',$dn2); # If they are obviously the same, return immediately if (! strcasecmp($dn1,$dn2)) @@ -1110,31 +1315,27 @@ function pla_compare_dns($dn1,$dn2) { } /** - * Prunes off anything after the ";" in an attr name. This is useful for - * attributes that may have ";binary" appended to their names. With - * real_attr_name(), you can more easily fetch these attributes' schema - * with their "real" attribute name. + * For LDAP servers with auto_number enabled, this function will get the next + * available uidNumber using the host's preferred mechanism (pool or search). * - * @param string $attr_name The name of the attribute to examine. - * @return string - */ -function real_attr_name($attr_name) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$attr_name); - - $attr_name = preg_replace('/;.*$/U','',$attr_name); - return $attr_name; -} - -/** - * For hosts who have 'enable_auto_uid_numbers' set to true, this function will - * get the next available uidNumber using the host's preferred mechanism - * (uidpool or search). The uidpool mechanism uses a user-configured entry in - * the LDAP server to store the last used uidNumber. This mechanism simply fetches - * and increments and returns that value. The search mechanism is more complicated - * and slow. It searches all entries that have uidNumber set, finds the smalles and - * "fills in the gaps" by incrementing the smallest uidNumber until an unused value - * is found. Both mechanisms do NOT prevent race conditions or toe-stomping, so + * This is configured in config.php by server: + * + * + * $servers->setValue('auto_number','enable',true|false); + * + * + * The available mechanisms are: + * pool: + * The pool mechanism uses a user-configured entry in the LDAP server to + * store the last used "number". This mechanism simply fetches and increments + * and returns that value. + * + * search: + * The search mechanism will search the LDAP server that has the attribute + * set. It will then find the smallest value and "fills in the gaps" by + * incrementing the smallest attribute until an unused value is found. + * + * NOTE: Both mechanisms do NOT prevent race conditions or toe-stomping, so * care must be taken when actually creating the entry to check that the uidNumber * returned here has not been used in the mean time. Note that the two different * mechanisms may (will!) return different values as they use different algorithms @@ -1144,177 +1345,187 @@ function real_attr_name($attr_name) { * are adding users simultaneously, the users may get identical uidNumbers with this * function. * - * See config.php.example for more notes on the two auto uidNumber mechanisms. + * See config.php.example for more notes on the two mechanisms. * - * @param object $ldapserver The LDAP Server Object of interest. + * @param string Base to start the search from + * @param string Attribute to query + * @param boolean Increment the result (for pool searches) + * @param string LDAP filter to use (for pool searches) * @return int - * - * @todo Must turn off auto_uid|gid in template if config is disabled. */ -function get_next_number(&$ldapserver,$startbase='',$type='uid',$increment=false,$filter=false) { +function get_next_number($base,$attr,$increment=false,$filter=false) { if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $ldapserver->server_id,$startbase,$type,$increment,$filter); + debug_log('Entered with (%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, + $base,$attr,$increment,$filter); + + $server = $_SESSION[APPCONFIG]->getServer(get_request('server_id','REQUEST')); + $attr = strtolower($attr); + $query = array(); + + if (! $server->getValue('auto_number','enable')) { + system_message(array( + 'title'=>_('AUTO_NUMBER is disabled for this server'), + 'body'=>sprintf('%s (%s)',_('A call was made to get_next_number(), however, it is disabled for this server'),$attr), + 'type'=>'warn')); - if (! $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','enable')) return false; + } + + # Check see and use our alternate uid_dn and password if we have it. + if (! $server->login($server->getValue('auto_number','dn'),$server->getValue('auto_number','pass'),'auto_number')) { + system_message(array( + 'title'=>_('AUTO_NUMBER invalid login/password'), + 'body'=>sprintf('%s (%s)',_('Unable to connect to LDAP server with the auto_number login/password, please check your configuration.'), + $server->getName()), + 'type'=>'warn')); + + return false; + } + + # Some error checking + if (! $base) { + $query['base'] = $server->getValue('auto_number','search_base'); + + if (! trim($query['base'])) { + system_message(array( + 'title'=>_('No AUTO_NUMBER search_base configured for this server'), + 'body'=>_('A call was made to get_next_number(), however, the base to search is empty.'), + 'type'=>'warn')); + + return false; + } + + } else + $query['base'] = $base; + + if (! $server->dnExists($query['base'])) { + system_message(array( + 'title'=>_('No AUTO_NUMBER search_base exists for this server'), + 'body'=>sprintf('%s (%s)',_('A call was made to get_next_number(), however, the base to search does not exist for this server.'),$query['base']), + 'type'=>'warn')); + + return false; + } + + if (! is_string($attr) || ! $server->getSchemaAttribute($attr)) { + system_message(array( + 'title'=>_('AUTO_NUMBER search attribute invalid'), + 'body'=>sprintf('%s (%s)',_('The search attribute for AUTO_NUMBER is invalid, expecting a single valid attribute.'),$attr), + 'type'=>'warn')); + + return false; + } + + $query['attrs'] = array($attr); # Based on the configured mechanism, go get the next available uidNumber! - $mechanism = $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','mechanism'); + switch ($server->getValue('auto_number','mechanism')) { + case 'search': + $query['filter'] = sprintf('(%s=*)',$attr); + $search = $server->query($query,'auto_number'); - switch ($mechanism) { + if (! count($search)) + return; - case 'search' : - if (! $startbase) { - $base_dn = $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','search_base'); - - if (is_null($base_dn)) - error(sprintf(_('You specified the "auto_uid_number_mechanism" as "search" in your - configuration for server %s, but you did not specify the - "auto_uid_number_search_base". Please specify it before proceeding.'),$ldapserver->name),'error','index.php'); - - } else { - $base_dn = $startbase; - } - - if (! $ldapserver->dnExists($base_dn)) - error(sprintf(_('Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s'), - $ldapserver->name),'error','index.php'); - - $filter = '(|(uidNumber=*)(gidNumber=*))'; - $results = array(); - - # Check see and use our alternate uid_dn and password if we have it. - $con = $ldapserver->connect(false,'auto_search',false,true, - $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','dn'), - $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','pass')); - - if (! $con) - error(sprintf(_('Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'),$ldapserver->name), - 'error','index.php'); - - $search = $ldapserver->search($con,$base_dn,$filter,array('uidNumber','gidNumber'),'sub',false,$_SESSION[APPCONFIG]->GetValue('deref','search')); - - if (! is_array($search)) - error(_('Untrapped error.'),'error','index.php'); - - foreach ($search as $dn => $attrs) { - $attrs = array_change_key_case($attrs); - $entry = array(); - - switch ($type) { - case 'uid' : - if (isset($attrs['uidnumber'])) { - $entry['dn'] = $attrs['dn']; - $entry['uniqnumber'] = $attrs['uidnumber']; - $results[] = $entry; - } - break; - - case 'gid' : - if (isset($attrs['gidnumber'])) { - $entry['dn'] = $attrs['dn']; - $entry['uniqnumber'] = $attrs['gidnumber']; - $results[] = $entry; - } - break; - default : - error(sprintf('Unknown type [%s] in search',$type),'error','index.php'); - } - } - - # construct a list of used numbers + # Construct a list of used numbers $autonum = array(); - foreach ($results as $result) - if (isset($result['uniqnumber'])) - $autonum[] = $result['uniqnumber']; + + foreach ($search as $dn => $values) { + $values = array_change_key_case($values); + array_push($autonum,$values[$attr]); + } $autonum = array_unique($autonum); sort($autonum); - foreach ($autonum as $uid) - $uid_hash[$uid] = 1; + # Start with the least existing autoNumber and add 1 + $minNumber = intval($autonum[0])+1; - # start with the least existing autoNumber and add 1 - if ($_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','min')) - $minNumber = $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','min'); - else - $minNumber = intval($autonum[0]) + 1; + # Override our minNumber by the configuration if it exists. + if (count($server->getValue('auto_number','min'))) { + $min = array_change_key_case($server->getValue('auto_number','min')); - # this loop terminates as soon as we encounter the next available minNumber - while (isset($uid_hash[$minNumber])) - $minNumber++; + if (isset($min[$attr])) + $minNumber = $min[$attr]; + } + for ($i=0;$i $num+1) + return $num+1; + } + + # If we didnt find a suitable gap and are all above the minNumber, we'll just return the $minNumber return $minNumber; break; - case 'uidpool': - $con = $ldapserver->connect(false,'auto_search',false,true, - $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','dn'), - $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','pass')); + case 'pool': + switch ($attr) { + case 'gidnumber': + $query['filter'] = '(objectClass=gidPool)'; - if (! $con) - error(sprintf(_('Unable to bind to %s with your with auto_uid credentials. Please check your configuration file.'),$ldapserver->name), - 'error','index.php'); + break; - # assume that uidpool dn is set in config file if no filter given - if (empty($filter)) { - $uidpool_dn = $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','uidpool_dn'); - $filter = '(objectclass=*)'; + case 'uidnumber': + $query['filter'] = '(objectClass=uidPool)'; - } else { - $filter = str_replace(array('&',':::'),array('&',','),$filter); - $dns = $ldapserver->search($con,$startbase,$filter,array('dn'),'sub'); - - switch (count($dns)) { - case '1': - break; - - case '0': - error(_('Uidpool dn not found, please change filter parameter'),'error','index.php'); - - default: - error(_('There is more than one dn for uidpool,please change filter parameter'),'error','index.php'); - } - - list ($key,$attrs) = each($dns); - $attrs = array_change_key_case($attrs); - $uidpool_dn = $attrs['dn']; + break; } - # Check that the UIDPOOL DN exists. - if (empty($uidpool_dn) || (! $ldapserver->dnExists($uidpool_dn))) - error(_('uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in config file'),'error','index.php'); + # If we are called with a filter, we'll use the one from the configuration. + if (! empty($filter)) + $query['filter'] = $filter; - switch ($type) { - case 'uid' : $attr = 'uidnumber'; + $search = $server->query($query,'auto_number'); + + switch (count($search)) { + case '1': break; - case 'gid' : $attr = 'gidnumber'; - break; - default : - error(_('Unknown uidpool type.'),'error','index.php'); + + case '0': + system_message(array( + 'title'=>_('AUTO_NUMBER pool filter didnt return any DNs'), + 'body'=>sprintf('%s (%s)',_('Please change your filter parameter, or check your auto_number,search_base configuration'),$query['filter']), + 'type'=>'warn')); + + return false; + + default: + system_message(array( + 'title'=>_('AUTO_NUMBER pool filter returned too many DNs'), + 'body'=>sprintf('%s (%s)',_('Please change your filter parameter, or check your auto_number,search_base configuration'),$query['filter']), + 'type'=>'warn')); + + return false; } - $number = $ldapserver->search($con,$uidpool_dn,$filter,array($attr),'base'); - $numbers = array_change_key_case($number[$uidpool_dn]); + # This should only iterate once. + foreach ($search as $dn => $values) { + $values = array_change_key_case($values); - if (! isset($numbers[$attr])) - error(_('A query on the uidpool_dn did return a valid uidNumber.'),'error','index.php'); - else + $autonum = $values[$attr]; + $poolDN = $values['dn']; + } if ($increment) { - $updatedattr = array($attr => $numbers[$attr] + 1); - $ldapserver->modify($uidpool_dn,$updatedattr); + $updatedattr = array($attr=>$autonum+1); + $server->modify($poolDN,$updatedattr); } - return $numbers[$attr]; - break; + return $autonum; # No other cases allowed. The user has an error in the configuration - default : - error(sprintf(_('You specified an invalid value for auto_uid_number_mechanism ("%s") in your configration. Only "uidpool" and "search" are valid. - Please correct this problem.'),$mechanism),'error','index.php'); + default: + system_message(array( + 'title'=>_('Invalid AUTO_NUMBER mechanism'), + 'body'=>sprintf('%s (%s)',_('Your config file specifies an unknown AUTO_NUMBER search mechanism.'),$server->getValue('auto_number','mechanism')), + 'type'=>'warn')); + + return false; } } @@ -1334,184 +1545,179 @@ function get_next_number(&$ldapserver,$startbase='',$type='uid',$increment=false * are general to an LDAP audience, the phpLDAPadmin team will gladly accept them * as a patch. * - * @param int $server_id The ID of the LDAP server housing the DN of interest. - * @param string $dn The DN of the entry whose icon you wish to fetch. - * + * @param string The DN of the entry whose icon you wish to fetch. * @return string */ -function get_icon( $ldapserver, $dn ) { +function get_icon($server_id,$dn,$object_classes=array()) { if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $ldapserver->server_id,$dn); + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); - // fetch and lowercase all the objectClasses in an array - $object_classes = $ldapserver->getDNAttr($dn,'objectClass',true); - if (! is_array($object_classes)) - $object_classes = array($object_classes); + $server = $_SESSION[APPCONFIG]->getServer($server_id); - if( $object_classes === null || $object_classes === false || ! is_array( $object_classes ) ) - $object_classes = array(); + # Fetch and lowercase all the objectClasses in an array + if (! count($object_classes)) + $object_classes = $server->getDNAttrValue($dn,'objectClass'); - foreach( $object_classes as $i => $class ) - $object_classes[$i] = strtolower( $class ); + foreach ($object_classes as $index => $value) + $object_classes[$index] = strtolower($value); - $rdn = get_rdn( $dn ); - $rdn_parts = explode( '=', $rdn, 2 ); - $rdn_value = isset( $rdn_parts[0] ) ? $rdn_parts[0] : null; - $rdn_attr = isset( $rdn_parts[1] ) ? $rdn_parts[1] : null; - unset( $rdn_parts ); + $rdn = get_rdn($dn); + $rdn_parts = explode('=',$rdn,2); + $rdn_value = isset($rdn_parts[0]) ? $rdn_parts[0] : null; + $rdn_attr = isset($rdn_parts[1]) ? $rdn_parts[1] : null; + unset($rdn_parts); - // return icon filename based upon objectClass value - if( in_array( 'sambaaccount', $object_classes ) && - '$' == $rdn{ strlen($rdn) - 1 } ) + # Return icon filename based upon objectClass value + if (in_array('sambaaccount',$object_classes) && + '$' == $rdn{ strlen($rdn) - 1 }) return 'nt_machine.png'; - if( in_array( 'sambaaccount', $object_classes ) ) + if (in_array('sambaaccount',$object_classes)) return 'nt_user.png'; - elseif( in_array( 'person', $object_classes ) || - in_array( 'organizationalperson', $object_classes ) || - in_array( 'inetorgperson', $object_classes ) || - in_array( 'account', $object_classes ) || - in_array( 'posixaccount', $object_classes ) ) + elseif (in_array('person',$object_classes) || + in_array('organizationalperson',$object_classes) || + in_array('inetorgperson',$object_classes) || + in_array('account',$object_classes) || + in_array('posixaccount',$object_classes)) return 'user.png'; - elseif( in_array( 'organization', $object_classes ) ) + elseif (in_array('organization',$object_classes)) return 'o.png'; - elseif( in_array( 'organizationalunit', $object_classes ) ) + elseif (in_array('organizationalunit',$object_classes)) return 'ou.png'; - elseif( in_array( 'organizationalrole', $object_classes ) ) + elseif (in_array('organizationalrole',$object_classes)) return 'uid.png'; - elseif( in_array( 'dcobject', $object_classes ) || - in_array( 'domainrelatedobject', $object_classes ) || - in_array( 'domain', $object_classes ) || - in_array( 'builtindomain', $object_classes )) + elseif (in_array('dcobject',$object_classes) || + in_array('domainrelatedobject',$object_classes) || + in_array('domain',$object_classes) || + in_array('builtindomain',$object_classes)) return 'dc.png'; - elseif( in_array( 'alias', $object_classes ) ) + elseif (in_array('alias',$object_classes)) return 'go.png'; - elseif( in_array( 'room', $object_classes ) ) + elseif (in_array('room',$object_classes)) return 'door.png'; - elseif( in_array( 'device', $object_classes ) ) + elseif (in_array('device',$object_classes)) return 'device.png'; - elseif( in_array( 'document', $object_classes ) ) + elseif (in_array('document',$object_classes)) return 'document.png'; - elseif( in_array( 'country', $object_classes ) ) { - $tmp = pla_explode_dn( $dn ); - $cval = explode( '=', $tmp[0], 2 ); - $cval = isset( $cval[1] ) ? $cval[1] : false; - if( $cval && false === strpos( $cval, ".." ) && + elseif (in_array('country',$object_classes)) { + $tmp = pla_explode_dn($dn); + $cval = explode('=',$tmp[0],2); + $cval = isset($cval[1]) ? $cval[1] : false; + if ($cval && false === strpos($cval,'..') && file_exists(realpath(sprintf('%s/countries/%s.png',IMGDIR,strtolower($cval))))) - return sprintf("countries/%s.png",strtolower($cval)); + return sprintf('countries/%s.png',strtolower($cval)); else return 'country.png'; } - elseif( in_array( 'jammvirtualdomain', $object_classes ) ) + elseif (in_array('jammvirtualdomain',$object_classes)) return 'mail.png'; - elseif( in_array( 'locality', $object_classes ) ) + elseif (in_array('locality',$object_classes)) return 'locality.png'; - elseif( in_array( 'posixgroup', $object_classes ) || - in_array( 'groupofnames', $object_classes ) || - in_array( 'group', $object_classes ) ) + elseif (in_array('posixgroup',$object_classes) || + in_array('groupofnames',$object_classes) || + in_array('group',$object_classes)) return 'ou.png'; - elseif( in_array( 'applicationprocess', $object_classes ) ) + elseif (in_array('applicationprocess',$object_classes)) return 'process.png'; - elseif( in_array( 'groupofuniquenames', $object_classes ) ) + elseif (in_array('groupofuniquenames',$object_classes)) return 'uniquegroup.png'; - elseif( in_array( 'iphost', $object_classes ) ) + elseif (in_array('iphost',$object_classes)) return 'host.png'; - elseif( in_array( 'nlsproductcontainer', $object_classes ) ) + elseif (in_array('nlsproductcontainer',$object_classes)) return 'n.png'; - elseif( in_array( 'ndspkikeymaterial', $object_classes ) ) + elseif (in_array('ndspkikeymaterial',$object_classes)) return 'lock.png'; - elseif( in_array( 'server', $object_classes ) ) + elseif (in_array('server',$object_classes)) return 'server-small.png'; - elseif( in_array( 'volume', $object_classes ) ) + elseif (in_array('volume',$object_classes)) return 'hard-drive.png'; - elseif( in_array( 'ndscatcatalog', $object_classes ) ) + elseif (in_array('ndscatcatalog',$object_classes)) return 'catalog.png'; - elseif( in_array( 'resource', $object_classes ) ) + elseif (in_array('resource',$object_classes)) return 'n.png'; - elseif( in_array( 'ldapgroup', $object_classes ) ) + elseif (in_array('ldapgroup',$object_classes)) return 'ldap-server.png'; - elseif( in_array( 'ldapserver', $object_classes ) ) + elseif (in_array('ldapserver',$object_classes)) return 'ldap-server.png'; - elseif( in_array( 'nisserver', $object_classes ) ) + elseif (in_array('nisserver',$object_classes)) return 'ldap-server.png'; - elseif( in_array( 'rbscollection', $object_classes ) ) + elseif (in_array('rbscollection',$object_classes)) return 'ou.png'; - elseif( in_array( 'dfsconfiguration', $object_classes ) ) + elseif (in_array('dfsconfiguration',$object_classes)) return 'nt_machine.png'; - elseif( in_array( 'applicationsettings', $object_classes ) ) + elseif (in_array('applicationsettings',$object_classes)) return 'server-settings.png'; - elseif( in_array( 'aspenalias', $object_classes ) ) + elseif (in_array('aspenalias',$object_classes)) return 'mail.png'; - elseif( in_array( 'container', $object_classes ) ) + elseif (in_array('container',$object_classes)) return 'folder.png'; - elseif( in_array( 'ipnetwork', $object_classes ) ) + elseif (in_array('ipnetwork',$object_classes)) return 'network.png'; - elseif( in_array( 'samserver', $object_classes ) ) + elseif (in_array('samserver',$object_classes)) return 'server-small.png'; - elseif( in_array( 'lostandfound', $object_classes ) ) + elseif (in_array('lostandfound',$object_classes)) return 'find.png'; - elseif( in_array( 'infrastructureupdate', $object_classes ) ) + elseif (in_array('infrastructureupdate',$object_classes)) return 'server-small.png'; - elseif( in_array( 'filelinktracking', $object_classes ) ) + elseif (in_array('filelinktracking',$object_classes)) return 'files.png'; - elseif( in_array( 'automountmap', $object_classes ) || - in_array( 'automount', $object_classes ) ) + elseif (in_array('automountmap',$object_classes) || + in_array('automount',$object_classes)) return 'hard-drive.png'; - elseif( 0 === strpos( $rdn_value, "ipsec" ) || - 0 == strcasecmp( $rdn_value, "IP Security" ) || - 0 == strcasecmp( $rdn_value, "MSRADIUSPRIVKEY Secret" ) || - 0 === strpos( $rdn_value, "BCKUPKEY_" ) ) + elseif (strpos($rdn_value,'ipsec') === 0 || + strcasecmp($rdn_value,'IP Security') == 0|| + strcasecmp($rdn_value,'MSRADIUSPRIVKEY Secret') == 0 || + strpos($rdn_value,'BCKUPKEY_') === 0) return 'lock.png'; - elseif( 0 == strcasecmp( $rdn_value, "MicrosoftDNS" ) ) + elseif (strcasecmp($rdn_value,'MicrosoftDNS') == 0) return 'dc.png'; - // Oh well, I don't know what it is. Use a generic icon. + # Oh well, I don't know what it is. Use a generic icon. else return 'object.png'; } @@ -1519,59 +1725,26 @@ function get_icon( $ldapserver, $dn ) { /** * Appends a servers base to a "sub" dn or returns the base. * - * @param string $base The baseDN to be added if the DN is relative - * @param string $sub_dn The DN to be made absolute - * @return string|null Returns null if both base is null and sub_dn is null or empty + * @param string The baseDN to be added if the DN is relative + * @param string The DN to be made absolute + * @return string|null Returns null if both base is null and sub_dn is null or empty */ -function expand_dn_with_base( $base,$sub_dn ) { +function expand_dn_with_base($base,$sub_dn) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__, $base,$sub_dn); - $empty_str = ( is_null($sub_dn) || ( ( $len = strlen( trim( $sub_dn ) ) ) == 0 ) ); + $empty_str = (is_null($sub_dn) || (($len=strlen(trim($sub_dn))) == 0)); - if ( $empty_str ) { + if ($empty_str) return $base; - } elseif ( $sub_dn[$len - 1] != ',' ) { - // If we have a string which doesn't need a base + # If we have a string which doesn't need a base + elseif ($sub_dn[$len-1] != ',') return $sub_dn; - } else { - return $sub_dn . $base; - } -} -/** - * Reads the query, checks all values and sets defaults. - * - * @param int $query_id The ID of the predefined query. - * @return array The fixed query or null on error - */ -function get_cleaned_up_predefined_search($query_id) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$query_id); - - if (! isset($_SESSION[APPCONFIG]->queries[$query_id])) - return null; - - $query = $_SESSION[APPCONFIG]->queries[$query_id]; - - $base = (isset($query['base'])) ? $query['base'] : null; - - if (isset($query['filter']) && trim($query['filter'])) - $filter = $query['filter']; else - $filter = 'objectclass=*'; - - $scope = isset($query['scope']) && (in_array($query['scope'],array('base','sub','one'))) ? - $query['scope'] : 'sub'; - - if (isset($query['attributes']) && trim($query['filter'])) - $attrib = $query['attributes']; - else - $attrib = 'dn, cn, sn, objectClass'; - - return array('base'=>$base,'filter'=>$filter,'scope'=>$scope,'attributes'=>$attrib); + return sprintf('%s%s',$sub_dn,$base); } /** @@ -1580,13 +1753,10 @@ function get_cleaned_up_predefined_search($query_id) { * not only the user's password but also a randomly generated string. The string is * stored as the first N characters of the hash for reference of hashing algorithms later. * - * --- added 20021125 by bayu irawan --- - * --- ammended 20030625 by S C Rigler --- - * - * @param int $length The length of the salt string to generate. + * @param int The length of the salt string to generate. * @return string The generated salt string. */ -function random_salt( $length ) { +function random_salt($length) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$length); @@ -1594,32 +1764,23 @@ function random_salt( $length ) { 'abcdefghijklmnopqrstuvwxyz'. 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. './'; - $str = ""; + $str = ''; mt_srand((double)microtime() * 1000000); - while( strlen( $str ) < $length ) - $str .= substr( $possible, ( rand() % strlen( $possible ) ), 1 ); + while (strlen($str) < $length) + $str .= substr($possible,(rand()%strlen($possible)),1); - /** - * Commented out following line because of problem - * with crypt function in update.php - * --- 20030625 by S C Rigler --- - */ - //$str = "\$1\$".$str."\$"; return $str; } /** * Given a DN string, this returns the 'RDN' portion of the string. * For example. given 'cn=Manager,dc=example,dc=com', this function returns - * 'cn=Manager' (it is really the exact opposite of get_container()). - * - * @param string $dn The DN whose RDN to return. - * @param bool $include_attrs If true, include attributes in the RDN string. - * See http://php.net/ldap_explode_dn for details + * 'cn=Manager' (it is really the exact opposite of ds_ldap::getContainer()). * + * @param string The DN whose RDN to return. + * @param boolean If true, include attributes in the RDN string. See http://php.net/ldap_explode_dn for details * @return string The RDN - * @see get_container */ function get_rdn($dn,$include_attrs=0,$decode=false) { if (DEBUG_ENABLED) @@ -1641,36 +1802,24 @@ function get_rdn($dn,$include_attrs=0,$decode=false) { } /** - * Given a DN string, this returns the parent container portion of the string. - * For example. given 'cn=Manager,dc=example,dc=com', this function returns - * 'dc=example,dc=com'. - * - * @param string $dn The DN whose container string to return. - * @param boolean $lower The DN returned will be in lower case. - * - * @return string The container - * @see get_rdn + * Split an RDN into its attributes */ -function get_container($dn,$lower=true) { - $parts = pla_explode_dn($dn); +function rdn_explode($rdn) { + # Setup to work out our RDN. + $rdnarray = explode('\+',$rdn); - if (count($parts) <= 1) - $container = null; + # Capture items that have +, but are not an attribute + foreach ($rdnarray as $index => $val) { + if (preg_match('/=/',$val)) + $validindex = $index; - else { - $container = $parts[1]; - for ($i=2;$i + * Array ( + * [title] => "Invalid Credentials" + * [description] => "An invalid username and/or password was supplied to the LDAP server." + * ) + * + * + * @param string The hex error number (ie, "0x42") of the LDAP error of interest. * @return array An associative array contianing the error title and description like so: - * - * Array - * ( - * [title] => "Invalid Credentials" - * [description] => "An invalid username and/or password was supplied to the LDAP server." - * ) - * */ -function pla_verbose_error( $err_no ) { +function pla_verbose_error($key) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$err_no); + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$key); - static $err_codes; + static $CACHE = array(); - if( count($err_codes) <= 0 ) { - $err_codes_file = LIBDIR.'ldap_error_codes.txt'; + if (! count($CACHE)) { + $source_file = LIBDIR.'ldap_error_codes.txt'; - if (! file_exists($err_codes_file) || ! is_readable($err_codes_file) || ! ($f = fopen($err_codes_file,'r'))) + if (! file_exists($source_file) || ! is_readable($source_file) || ! ($f = fopen($source_file,'r'))) return false; - $contents = fread( $f, filesize( $err_codes_file ) ); - fclose( $f ); + $contents = fread($f,filesize($source_file)); + fclose($f); $entries = array(); - preg_match_all( "/0x[A-Fa-f0-9][A-Za-z0-9]\s+[0-9A-Za-z_]+\s+\"[^\"]*\"\n/", - $contents, $entries ); - $err_codes = array(); - foreach( $entries[0] as $e ) { + preg_match_all("/0x[A-Fa-f0-9][A-Za-z0-9]\s+[0-9A-Za-z_]+\s+\"[^\"]*\"\n/", + $contents,$entries); + + foreach ($entries[0] as $values) { $entry = array(); - preg_match( "/(0x[A-Za-z0-9][A-Za-z0-9])\s+([0-9A-Za-z_]+)\s+\"([^\"]*)\"/", $e, $entry ); - $hex_code = isset( $entry[1] ) ? $entry[1] : null; - $title = isset( $entry[2] ) ? $entry[2] : null; - $desc = isset( $entry[3] ) ? $entry[3] : null; - $desc = preg_replace( "/\s+/", " ", $desc ); - $err_codes[ "$hex_code" ] = array( 'title' => $title, 'desc' => $desc ); + preg_match("/(0x[A-Za-z0-9][A-Za-z0-9])\s+([0-9A-Za-z_]+)\s+\"([^\"]*)\"/",$values,$entry); + + $hex_code = isset($entry[1]) ? $entry[1] : null; + $title = isset($entry[2]) ? $entry[2] : null; + $desc = isset($entry[3]) ? $entry[3] : null; + $desc = preg_replace('/\s+/',' ',$desc); + $CACHE[$hex_code] = array('title'=>$title,'desc'=>$desc); } } - if( isset( $err_codes[ $err_no ] ) ) - return $err_codes[ $err_no ]; + if (isset($CACHE[$key])) + return $CACHE[$key]; else - return array( 'title' => null, 'desc' => null ); + return array('title' => null,'desc' => null); } -// @todo: describe this function -function support_oid_to_text($oid_id) { +/** + * Given an LDAP OID number, returns a verbose description of the OID. + * This function parses ldap_supported_oids.txt and looks up the specified + * OID, and returns the verbose message defined in that file. + * + * + * Array ( + * [title] => All Operational Attribute + * [ref] => RFC 3673 + * [desc] => An LDAP extension which clients may use to request the return of all operational attributes. + * ) + * + * + * @param string The OID number (ie, "1.3.6.1.4.1.4203.1.5.1") of the OID of interest. + * @return array An associative array contianing the OID title and description like so: + */ +function support_oid_to_text($key) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$oid_id); + debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$key); - static $oid; + static $CACHE = array(); + $unknown = array(); + $unknown['desc'] = 'We have no description for this OID, if you know what this OID provides, please let us know. Please also include an RFC reference if it is available.'; + $unknown['title'] = 'Can you help with this OID info?'; - if( count($oid) <= 0 ) { - $oid_codes_file = LIBDIR.'ldap_supported_oids.txt'; + if (! count($CACHE)) { + $source_file = LIBDIR.'ldap_supported_oids.txt'; - if(! file_exists($oid_codes_file) || ! is_readable($oid_codes_file) || ! ($f = fopen($oid_codes_file,'r'))) + if (! file_exists($source_file) || ! is_readable($source_file) || ! ($f = fopen($source_file,'r'))) return false; - $contents = fread( $f, filesize( $oid_codes_file ) ); - fclose( $f ); + $contents = fread($f,filesize($source_file)); + fclose($f); $entries = array(); - preg_match_all( "/[0-9]\..+\s+\"[^\"]*\"\n/", $contents, $entries ); - $err_codes = array(); - foreach( $entries[0] as $e ) { - $entry = array(); - preg_match( "/([0-9]\.([0-9]+\.)*[0-9]+)(\s+\"([^\"]*)\")?(\s+\"([^\"]*)\")?(\s+\"([^\"]*)\")?/", $e, $entry ); - $oid_id_a = isset( $entry[1] ) ? $entry[1] : null; + preg_match_all("/[0-9]\..+\s+\"[^\"]*\"\n/",$contents,$entries); - if ($oid_id_a) { - $oid[$oid_id_a]['title'] = isset( $entry[4] ) ? $entry[4] : null; - $oid[$oid_id_a]['ref'] = isset( $entry[6] ) ? $entry[6] : null; - $desc = isset( $entry[8] ) ? $entry[8] : null; - $oid[$oid_id_a]['desc'] = preg_replace( "/\s+/", " ", $desc ); + foreach ($entries[0] as $values) { + $entry = array(); + preg_match("/([0-9]\.([0-9]+\.)*[0-9]+)(\s+\"([^\"]*)\")?(\s+\"([^\"]*)\")?(\s+\"([^\"]*)\")?/",$values,$entry); + $oid_id = isset($entry[1]) ? $entry[1] : null; + + if ($oid_id) { + $CACHE[$oid_id]['title'] = isset($entry[4]) ? $entry[4] : null; + $CACHE[$oid_id]['ref'] = isset($entry[6]) ? $entry[6] : null; + $desc = isset($entry[8]) ? $entry[8] : sprintf('%s',$unknown['desc'],$unknown['title']); + $CACHE[$oid_id]['desc'] = preg_replace('/\s+/',' ',$desc); } } } - if( isset( $oid[ $oid_id ] ) ) - return $oid[ $oid_id ]; + if (isset($CACHE[$key])) + return $CACHE[$key]; else - return null; + return array( + 'title'=>$key, + 'ref'=>null, + 'desc'=>sprintf('%s',$unknown['desc'],$unknown['title'])); } /** @@ -1770,7 +1941,7 @@ function ldap_error_msg($msg,$errnum) { $errnum = ('0x'.str_pad(dechex($errnum),2,0,STR_PAD_LEFT)); $verbose_error = pla_verbose_error($errnum); - $body .= sprintf('%s:%s',_('LDAP said'),htmlspecialchars($msg)); + $body .= sprintf('%s:%s',_('LDAP said'),$msg); if ($verbose_error) { $body .= sprintf('%s:%s (%s)',_('Error number'),$errnum,$verbose_error['title']); @@ -1792,206 +1963,222 @@ function ldap_error_msg($msg,$errnum) { * * Usage Examples: * - * draw_jpeg_photos( 0, "cn=Bob,ou=People,dc=example,dc=com", "jpegPhoto" true, false, "border: 1px; width: 150px" ); - * draw_jpeg_photos( 1, "cn=Fred,ou=People,dc=example,dc=com" ); + * draw_jpeg_photo(0,'cn=Bob,ou=People,dc=example,dc=com',"jpegPhoto",0,true,array('img_opts'=>"border: 1px; width: 150px")); + * draw_jpeg_photo(1,'cn=Fred,ou=People,dc=example,dc=com',null,1); * * - * @param int $server_id The ID of the server of interest. - * @param string $dn The DN of the entry that contains the jpeg attribute you want to draw. - * @param string $attr_name The name of the attribute containing the jpeg data (usually 'jpegPhoto'). - * @param bool $draw_delete_buttons If true, draws a button beneath the image titled 'Delete' allowing the user - * to delete the jpeg attribute by calling JavaScript function deleteAttribute() provided - * in the default modification template. - * @param bool $draw_bytes_and_size If true, draw text below the image indicating the byte size and dimensions. - * @param string $table_html_attrs Specifies optional CSS style attributes for the table tag. - * - * @return void + * @param object The Server to get the image from. + * @param string The DN of the entry that contains the jpeg attribute you want to draw. + * @param string The name of the attribute containing the jpeg data (usually 'jpegPhoto'). + * @param int Index of the attribute to draw + * @param boolean If true, draws a button beneath the image titled 'Delete' allowing the user + * to delete the jpeg attribute by calling JavaScript function deleteAttribute() provided + * in the default modification template. + * @param array Specifies optional image and CSS style attributes for the table tag. Supported keys are + * fixed_width, fixed_height, img_opts. */ -function draw_jpeg_photos($ldapserver,$dn,$attr_name='jpegPhoto',$draw_delete_buttons=false, - $draw_bytes_and_size=true,$table_html_attrs='align="left"',$img_html_attrs='') { +function draw_jpeg_photo($server,$dn,$attr_name='jpegphoto',$index,$draw_delete_buttons=false,$options=array()) { + global $app; if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s,%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $ldapserver->server_id,$dn,$attr_name,$draw_delete_buttons, - $draw_bytes_and_size,$table_html_attrs,$img_html_attrs); + debug_log('Entered with (%s,%s,%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, + is_object($server),$dn,$attr_name,$index,$draw_delete_buttons,$img_html_attrs); - $fixed_width = false; - $fixed_height = false; - if (eregi(' width',$img_html_attrs) || eregi('^width',$img_html_attrs)) - $fixed_width = true; - if (eregi(' height=',$img_html_attrs) || eregi('^height=',$img_html_attrs)) - $fixed_height = true; + $fixed = array(); + $fixed['width'] = isset($options['fixed_width']) ? $options['fixed_width'] : false; + $fixed['height'] = isset($options['fixed_height']) ? $options['fixed_height'] : false; - if (isset($table_html_attrs) && trim($table_html_attrs) ) - printf('
',$table_html_attrs); + if (is_null($server)) + $jpeg_data = $_SESSION['tmp']; + else + $jpeg_data = $server->getDNAttrValues($dn,null,LDAP_DEREF_NEVER,array($attr_name)); + + if (! isset($jpeg_data[$attr_name][$index]) || ! $jpeg_data[$attr_name][$index]) { + system_message(array( + 'title'=>_('Unable to retrieve image'), + 'body'=>sprintf('%s %s', + _('Could not fetch jpeg data for attribute'),$attr_name), + 'type'=>'warn')); + + # This should atleast generate some text that says "Image not available" + echo 'Photo'; - $jpeg_data = $ldapserver->search(null,$dn,'objectClass=*',array($attr_name),'base'); - $jpeg_data = array_pop($jpeg_data); - if (! $jpeg_data) { - printf(_('Could not fetch jpeg data from LDAP server for attribute %s.'),htmlspecialchars($attr_name)); return; } - $jpeg_temp_dir = realpath($_SESSION[APPCONFIG]->GetValue('jpeg','tmpdir').'/'); - if (! is_writable($jpeg_temp_dir)) - error(_('Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config.php'),'error','index.php'); + $width = 0; + $height = 0; - if (! is_array($jpeg_data[$attr_name])) - $jpeg_data[$attr_name] = array($jpeg_data[$attr_name]); + if (function_exists('getimagesize')) { + $jpeg_temp_dir = realpath($_SESSION[APPCONFIG]->getValue('jpeg','tmpdir').'/'); + if (! is_writable($jpeg_temp_dir)) + system_message(array( + 'title'=>_('Unable to write to jpeg tmp directory'), + 'body'=>_('Please set jpeg,tmpdir to a writable directory in the phpLDAPadmin config.php'), + 'type'=>'warn')); - foreach ($jpeg_data[$attr_name] as $jpeg) { - $jpeg_filename = tempnam($jpeg_temp_dir.'/','pla'); - $outjpeg = @fopen($jpeg_filename,'wb'); - if (! $outjpeg) - error(sprintf(_('Could not write to the $jpeg_temp_dir directory %s. Please verify that your web server can write files there.'),$jpeg_temp_dir), - 'error','index.php'); - fwrite($outjpeg,$jpeg); - fclose ($outjpeg); + else { + # We have an image to display + $jpeg_filename = tempnam($jpeg_temp_dir.'/','pla'); + $outjpeg = @file_put_contents($jpeg_filename,$jpeg_data[$attr_name][$index]); - $jpeg_data_size = filesize($jpeg_filename); - if ($jpeg_data_size < 6 && $draw_delete_buttons) { - echo _('jpegPhoto contains errors
'); - printf('%s',$attr_name,_('Delete Photo')); - continue; - } + if (! $outjpeg) { + system_message(array( + 'title'=>_('Error writing to jpeg tmp directory'), + 'body'=>sprintf(_('Please check jpeg,tmpdir is a writable directory in the phpLDAPadmin config.php'),$jpeg_temp_dir), + 'type'=>'warn')); - if (function_exists('getimagesize')) { - $jpeg_dimensions = @getimagesize($jpeg_filename); - $width = $jpeg_dimensions[0]; - $height = $jpeg_dimensions[1]; + } elseif ($outjpeg < 6) { + system_message(array( + 'title'=>sprintf('%s %s',$attr_name,_('contains errors')), + 'body'=>_('It appears that the jpeg image may not be a jpeg image'), + 'type'=>'warn')); - } else { - $width = 0; - $height = 0; - } - - if ($width > 300) { - $scale_factor = 300 / $width; - $img_width = 300; - $img_height = intval($height * $scale_factor); - - } else { - $img_width = $width; - $img_height = $height; - } - - printf('Photo
', - ($fixed_width ? '' : 'width="'.$img_width.'" '), - ($fixed_height ? '' : 'height="'.$img_height.'"'), - ($img_html_attrs ? $img_html_attrs : ''),basename($jpeg_filename)); - - if ($draw_bytes_and_size) - printf('%s %s. %s x %s pixels.
',number_format($jpeg_data_size),_('bytes'),$width,$height); - - if ($draw_delete_buttons) - # - printf('%s', - $attr_name,_('Delete photo')); - } - - if (isset($table_html_attrs) && trim($table_html_attrs)) - echo '
'; - - # Delete old jpeg files. - $jpegtmp_wildcard = "/^pla/"; - $handle = @opendir($jpeg_temp_dir); - if ($handle !== false) { - while (($file = readdir($handle)) != false) { - if (preg_match($jpegtmp_wildcard,$file)) { - $file = "$jpeg_temp_dir/$file"; - if ((time() - filemtime($file)) > $_SESSION[APPCONFIG]->GetValue('jpeg','tmp_keep_time')) - @unlink($file); + } else { + $jpeg_dimensions = getimagesize($jpeg_filename); + $width = $jpeg_dimensions[0]; + $height = $jpeg_dimensions[1]; } + + unlink($jpeg_filename); } - closedir($handle); - } else { - error(sprintf('failed to open dir %s : permission denied',$jpeg_temp_dir),'error'); } + + if ($width > 300) { + $scale_factor = 300 / $width; + $img_width = 300; + $img_height = intval($height * $scale_factor); + + } else { + $img_width = $width; + $img_height = $height; + } + + $href = sprintf('view_jpeg_photo.php?dn=%s&index=%s',rawurlencode($dn),$index); + + printf('',number_format($outjpeg),_('bytes'),$width,$height,_('pixels')); + + printf('Photo', + htmlspecialchars($href), + is_null($server) ? 'location=session' : sprintf('server_id=%s',$server->getIndex()), + (! $img_width || $fixed['width'] ? '' : sprintf('width="%s"',$img_width)), + (! $img_height || $fixed['height'] ? '' : sprintf('height="%s"',$img_height)), + (isset($options['img_opts']) ? $options['img_opts'] : '')); + + echo ''; + + if ($draw_delete_buttons) + # + printf('
%s', + $attr_name,_('Delete photo')); +} + +/** + * Return the list of available password types + * + * @todo Dynamically work this list out so we only present hashes that we can encrypt + */ +function password_types() { + return array( + 'blowfish', + 'clear', + 'crypt', + 'ext_des', + 'md5', + 'md5crypt', + 'sha', + 'smd5', + 'ssha' + ); } /** * Hashes a password and returns the hash based on the specified enc_type. * - * @param string $password_clear The password to hash in clear text. - * @param string $enc_type Standard LDAP encryption type which must be one of + * @param string The password to hash in clear text. + * @param string Standard LDAP encryption type which must be one of * crypt, ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, or clear. * @return string The hashed password. */ -function password_hash( $password_clear, $enc_type ) { +function password_hash($password_clear,$enc_type) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__, $password_clear,$enc_type); - $enc_type = strtolower( $enc_type ); + $enc_type = strtolower($enc_type); - switch( $enc_type ) { + switch($enc_type) { case 'crypt': - if ($_SESSION[APPCONFIG]->GetValue('password', 'no_random_crypt_salt')) - $new_value = '{CRYPT}' . crypt($password_clear,substr($password_clear,0,2)); + if ($_SESSION[APPCONFIG]->getValue('password', 'no_random_crypt_salt')) + $new_value = sprintf('{CRYPT}%s',crypt($password_clear,substr($password_clear,0,2))); else - $new_value = '{CRYPT}' . crypt($password_clear,random_salt(2)); + $new_value = sprintf('{CRYPT}%s',crypt($password_clear,random_salt(2))); + break; case 'ext_des': - // extended des crypt. see OpenBSD crypt man page. - if ( ! defined( 'CRYPT_EXT_DES' ) || CRYPT_EXT_DES == 0 ) + # Extended des crypt. see OpenBSD crypt man page. + if (! defined('CRYPT_EXT_DES') || CRYPT_EXT_DES == 0) error(_('Your system crypt library does not support extended DES encryption.'),'error','index.php'); - $new_value = '{CRYPT}' . crypt( $password_clear, '_' . random_salt(8) ); + $new_value = sprintf('{CRYPT}%s',crypt($password_clear,'_'.random_salt(8))); + break; case 'md5crypt': - if( ! defined( 'CRYPT_MD5' ) || CRYPT_MD5 == 0 ) + if (! defined('CRYPT_MD5') || CRYPT_MD5 == 0) error(_('Your system crypt library does not support md5crypt encryption.'),'error','index.php'); - $new_value = '{CRYPT}' . crypt( $password_clear , '$1$' . random_salt(9) ); + $new_value = sprintf('{CRYPT}%s',crypt($password_clear,'$1$'.random_salt(9))); + break; case 'blowfish': - if( ! defined( 'CRYPT_BLOWFISH' ) || CRYPT_BLOWFISH == 0 ) + if (! defined('CRYPT_BLOWFISH') || CRYPT_BLOWFISH == 0) error(_('Your system crypt library does not support blowfish encryption.'),'error','index.php'); - // hardcoded to second blowfish version and set number of rounds - $new_value = '{CRYPT}' . crypt( $password_clear , '$2a$12$' . random_salt(13) ); + # Hardcoded to second blowfish version and set number of rounds + $new_value = sprintf('{CRYPT}%s',crypt($password_clear,'$2a$12$'.random_salt(13))); + break; case 'md5': - $new_value = '{MD5}' . base64_encode( pack( 'H*' , md5( $password_clear) ) ); + $new_value = sprintf('{MD5}%s',base64_encode(pack('H*',md5($password_clear)))); break; case 'sha': - if( function_exists('sha1') ) { - // use php 4.3.0+ sha1 function, if it is available. - $new_value = '{SHA}' . base64_encode( pack( 'H*' , sha1( $password_clear) ) ); - - } elseif( function_exists( 'mhash' ) ) { - $new_value = '{SHA}' . base64_encode( mhash( MHASH_SHA1, $password_clear) ); - - } else { + # Use php 4.3.0+ sha1 function, if it is available. + if (function_exists('sha1')) + $new_value = sprintf('{SHA}%s',base64_encode(pack('H*',sha1($password_clear)))); + elseif (function_exists('mhash')) + $new_value = sprintf('{SHA}%s',base64_encode(mhash(MHASH_SHA1,$password_clear))); + else error(_('Your PHP install does not have the mhash() function. Cannot do SHA hashes.'),'error','index.php'); - } + break; case 'ssha': - if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { - mt_srand( (double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k( MHASH_SHA1, $password_clear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); - $new_value = "{SSHA}".base64_encode( mhash( MHASH_SHA1, $password_clear.$salt ).$salt ); + if (function_exists('mhash') && function_exists('mhash_keygen_s2k')) { + mt_srand((double)microtime()*1000000); + $salt = mhash_keygen_s2k(MHASH_SHA1,$password_clear,substr(pack('h*',md5(mt_rand())),0,8),4); + $new_value = sprintf('{SSHA}%s',base64_encode(mhash(MHASH_SHA1,$password_clear.$salt).$salt)); } else { - error(_('Your PHP install does not have the mhash() function. Cannot do SHA hashes.'),'error','index.php'); + error(_('Your PHP install does not have the mhash() or mhash_keygen_s2k() function. Cannot do S2K hashes.'),'error','index.php'); } + break; case 'smd5': - if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) { - mt_srand( (double) microtime() * 1000000 ); - $salt = mhash_keygen_s2k( MHASH_MD5, $password_clear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 ); - $new_value = "{SMD5}".base64_encode( mhash( MHASH_MD5, $password_clear.$salt ).$salt ); + if (function_exists('mhash') && function_exists('mhash_keygen_s2k')) { + mt_srand((double)microtime()*1000000); + $salt = mhash_keygen_s2k(MHASH_MD5,$password_clear,substr(pack('h*',md5(mt_rand())),0,8),4); + $new_value = spritnf('{SMD5}%s',base64_encode(mhash(MHASH_MD5,$password_clear.$salt).$salt)); } else { - error(_('Your PHP install does not have the mhash() function. Cannot do SHA hashes.'),'error','index.php'); + error(_('Your PHP install does not have the mhash() or mhash_keygen_s2k() function. Cannot do S2K hashes.'),'error','index.php'); } + break; case 'clear': @@ -2006,34 +2193,35 @@ function password_hash( $password_clear, $enc_type ) { * Given a clear-text password and a hash, this function determines if the clear-text password * is the password that was used to generate the hash. This is handy to verify a user's password * when all that is given is the hash and a "guess". - * @param String $hash The hash. - * @param String $clear The password in clear text to test. + * @param String The hash. + * @param String The password in clear text to test. * @return Boolean True if the clear password matches the hash, and false otherwise. */ -function password_check( $cryptedpassword, $plainpassword ) { +function password_check($cryptedpassword,$plainpassword) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__, $cryptedpassword,$plainpassword); - if( preg_match( "/{([^}]+)}(.*)/", $cryptedpassword, $cypher ) ) { - $cryptedpassword = $cypher[2]; - $_cypher = strtolower($cypher[1]); + if (preg_match('/{([^}]+)}(.*)/',$cryptedpassword,$matches)) { + $cryptedpassword = $matches[2]; + $cypher = strtolower($matches[1]); } else { - $_cypher = NULL; + $cypher = null; } - switch( $_cypher ) { - // SSHA crypted passwords + switch($cypher) { + # SSHA crypted passwords case 'ssha': - // check php mhash support before using it - if( function_exists( 'mhash' ) ) { + # Check php mhash support before using it + if (function_exists('mhash')) { $hash = base64_decode($cryptedpassword); + # OpenLDAP uses a 4 byte salt, SunDS uses an 8 byte salt - both from char 20. $salt = substr($hash,20); - $new_hash = base64_encode( mhash( MHASH_SHA1, $plainpassword.$salt).$salt ); + $new_hash = base64_encode(mhash(MHASH_SHA1,$plainpassword.$salt).$salt); - if( strcmp( $cryptedpassword, $new_hash ) == 0 ) + if (strcmp($cryptedpassword,$new_hash) == 0) return true; else return false; @@ -2041,17 +2229,18 @@ function password_check( $cryptedpassword, $plainpassword ) { } else { error(_('Your PHP install does not have the mhash() function. Cannot do SHA hashes.'),'error','index.php'); } + break; - // Salted MD5 + # Salted MD5 case 'smd5': - // check php mhash support before using it - if( function_exists( 'mhash' ) ) { + # Check php mhash support before using it + if (function_exists('mhash')) { $hash = base64_decode($cryptedpassword); - $salt = substr($hash, -4); - $new_hash = base64_encode( mhash( MHASH_MD5, $plainpassword.$salt).$salt ); + $salt = substr($hash,-4); + $new_hash = base64_encode(mhash(MHASH_MD5,$plainpassword.$salt).$salt); - if( strcmp( $cryptedpassword, $new_hash ) == 0) + if (strcmp($cryptedpassword,$new_hash) == 0) return true; else return false; @@ -2059,87 +2248,89 @@ function password_check( $cryptedpassword, $plainpassword ) { } else { error(_('Your PHP install does not have the mhash() function. Cannot do SHA hashes.'),'error','index.php'); } + break; - // SHA crypted passwords + # SHA crypted passwords case 'sha': - if( strcasecmp( password_hash($plainpassword,'sha' ), "{SHA}".$cryptedpassword ) == 0 ) + if (strcasecmp(password_hash($plainpassword,'sha'),'{SHA}'.$cryptedpassword) == 0) return true; else return false; + break; - // MD5 crypted passwords + # MD5 crypted passwords case 'md5': - if( strcasecmp( password_hash( $plainpassword,'md5' ), "{MD5}".$cryptedpassword ) == 0 ) + if( strcasecmp(password_hash($plainpassword,'md5'),'{MD5}'.$cryptedpassword) == 0) return true; else return false; + break; - // Crypt passwords + # Crypt passwords case 'crypt': - // Check if it's blowfish crypt - if( preg_match("/^\\$2+/",$cryptedpassword ) ) { + # Check if it's blowfish crypt + if (preg_match('/^\\$2+/',$cryptedpassword)) { - // make sure that web server supports blowfish crypt - if( ! defined( 'CRYPT_BLOWFISH' ) || CRYPT_BLOWFISH == 0 ) + # Make sure that web server supports blowfish crypt + if (! defined('CRYPT_BLOWFISH') || CRYPT_BLOWFISH == 0) error(_('Your system crypt library does not support blowfish encryption.'),'error','index.php'); - list(,$version,$rounds,$salt_hash) = explode('$',$cryptedpassword); + list($version,$rounds,$salt_hash) = explode('$',$cryptedpassword); - if( crypt( $plainpassword, '$'. $version . '$' . $rounds . '$' .$salt_hash ) == $cryptedpassword ) + if (crypt($plainpassword,'$'.$version.'$'.$rounds.'$'.$salt_hash) == $cryptedpassword) return true; else return false; } - // Check if it's an crypted md5 - elseif( strstr( $cryptedpassword, '$1$' ) ) { + # Check if it's an crypted md5 + elseif (strstr($cryptedpassword,'$1$')) { - // make sure that web server supports md5 crypt - if( ! defined( 'CRYPT_MD5' ) || CRYPT_MD5 == 0 ) + # Make sure that web server supports md5 crypt + if (! defined('CRYPT_MD5') || CRYPT_MD5 == 0) error(_('Your system crypt library does not support md5crypt encryption.'),'error','index.php'); - list(,$type,$salt,$hash) = explode('$',$cryptedpassword); + list($type,$salt,$hash) = explode('$',$cryptedpassword); - if( crypt( $plainpassword, '$1$' .$salt ) == $cryptedpassword ) + if (crypt($plainpassword,'$1$'.$salt) == $cryptedpassword) return true; else return false; } - // Check if it's extended des crypt - elseif (strstr( $cryptedpassword, '_' ) ) { + # Check if it's extended des crypt + elseif (strstr($cryptedpassword,'_')) { - // make sure that web server supports ext_des - if ( ! defined( 'CRYPT_EXT_DES' ) || CRYPT_EXT_DES == 0 ) + # Make sure that web server supports ext_des + if (! defined('CRYPT_EXT_DES') || CRYPT_EXT_DES == 0) error(_('Your system crypt library does not support extended DES encryption.'),'error','index.php'); - if( crypt($plainpassword, $cryptedpassword ) == $cryptedpassword ) + if (crypt($plainpassword,$cryptedpassword) == $cryptedpassword) return true; else return false; } - // Password is plain crypt + # Password is plain crypt else { - if( crypt($plainpassword, $cryptedpassword ) == $cryptedpassword ) + if (crypt($plainpassword,$cryptedpassword) == $cryptedpassword) return true; else return false; } + break; - // No crypt is given assume plaintext passwords are used + # No crypt is given assume plaintext passwords are used default: - if( $plainpassword == $cryptedpassword ) + if ($plainpassword == $cryptedpassword) return true; else return false; - - break; } } @@ -2150,100 +2341,83 @@ function password_check( $cryptedpassword, $plainpassword ) { * returns crypto detected in password hash. Function should detect * md5crypt, blowfish and extended DES crypt. If function fails to detect * encryption type, it returns NULL. - * @param string hashed password + * @param string Hashed password * @return string */ -function get_enc_type( $user_password ) { +function get_enc_type($user_password) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$user_password); - /* Capture the stuff in the { } to determine if this is crypt, md5, etc. */ + # Capture the stuff in the { } to determine if this is crypt, md5, etc. $enc_type = null; - if( preg_match( "/{([^}]+)}/", $user_password, $enc_type) ) - $enc_type = strtolower( $enc_type[1] ); + if (preg_match('/{([^}]+)}/',$user_password,$enc_type)) + $enc_type = strtolower($enc_type[1]); else return null; - /* handle crypt types */ - if( strcasecmp( $enc_type, 'crypt') == 0 ) { + # Handle crypt types + if (strcasecmp($enc_type,'crypt') == 0) { - if( preg_match( "/{[^}]+}\\$1\\$+/", $user_password) ) { - $enc_type = "md5crypt"; + # No need to check for standard crypt, because enc_type is already equal to 'crypt'. + if (preg_match('/{[^}]+}\\$1\\$+/',$user_password)) + $enc_type = 'md5crypt'; - } elseif ( preg_match( "/{[^}]+}\\$2+/", $user_password) ) { - $enc_type = "blowfish"; + elseif (preg_match('/{[^}]+}\\$2+/',$user_password)) + $enc_type = 'blowfish'; - } elseif ( preg_match( "/{[^}]+}_+/", $user_password) ) { - $enc_type = "ext_des"; - } - - /* - * No need to check for standard crypt, - * because enc_type is already equal to 'crypt'. - */ + elseif (preg_match('/{[^}]+}_+/',$user_password)) + $enc_type = 'ext_des'; } + return $enc_type; } -/** - * Gets the default enc_type configured in config.php for the server indicated by $server_id; - * @param int $server_id The ID of the server of interest. - * @return String The enc_type, like 'sha', 'md5', 'ssha', 'md5crypt', for example. - */ -function get_default_hash($server_id) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$server_id); - - return $_SESSION[APPCONFIG]->ldapservers->GetValue($server_id,'appearance','password_hash'); -} - /** * Draws an HTML browse button which, when clicked, pops up a DN chooser dialog. - * @param string $form_element The name of the form element to which this chooser + * @param string The name of the form element to which this chooser * dialog will publish the user's choice. The form element must be a member * of a form with the "name" or "id" attribute set in the form tag, and the element * must also define "name" or "id" for JavaScript to uniquely identify it. * Example $form_element values may include "creation_form.container" or * "edit_form.member_uid". See /templates/modification/default.php for example usage. - * @param bool $include_choose_text (optional) If true, the function draws the localized text "choose" to the right of the button. + * @param boolean (optional) If true, the function draws the localized text "choose" to the right of the button. */ -function draw_chooser_link( $form_element, $include_choose_text=true, $rdn="none" ) { +function draw_chooser_link($form_element,$include_choose_text=true,$rdn='none') { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, $form_element,$include_choose_text,$rdn); - if ($rdn == 'none') { - $href = "javascript:dnChooserPopup('$form_element','');"; - - } else { - $href = "javascript:dnChooserPopup('$form_element','$rdn');"; - } + if ($rdn == 'none') + $href = sprintf("javascript:dnChooserPopup('%s','');",$form_element); + else + $href = sprintf("javascript:dnChooserPopup('%s','%s');",$form_element,$rdn); $title = _('Click to popup a dialog to select an entry (DN) graphically'); printf('Find',$href,$title,IMGDIR); + if ($include_choose_text) printf('%s',$href,$title,_('browse')); } /** * Explode a DN into an array of its RDN parts. - * @param string $dn The DN to explode. - * @param int $with_attriutes (optional) Whether to include attribute names (see http://php.net/ldap_explode_dn for details) - * - * @return array An array of RDN parts of this format: - * - * Array - * ( - * [0] => uid=ppratt - * [1] => ou=People - * [2] => dc=example - * [3] => dc=com - * ) - * * * NOTE: When a multivalue RDN is passed to ldap_explode_dn, the results returns with 'value + value'; + * + * + * Array ( + * [0] => uid=ppratt + * [1] => ou=People + * [2] => dc=example + * [3] => dc=com + * ) + * + * + * @param string The DN to explode. + * @param int (optional) Whether to include attribute names (see http://php.net/ldap_explode_dn for details) + * @return array An array of RDN parts of this format: */ function pla_explode_dn($dn,$with_attributes=0) { global $CACHE; @@ -2280,8 +2454,8 @@ function pla_explode_dn($dn,$with_attributes=0) { # translate hex code into ascii for display $result[$key] = dn_unescape($value); - $CACHE['explode'][join(',',$result[0])][$key] = $result[$key]; - $CACHE['explode'][join(',',array_reverse($result[0]))][$key] = array_reverse($result[$key]); + $CACHE['explode'][implode(',',$result[0])][$key] = $result[$key]; + $CACHE['explode'][implode(',',array_reverse($result[0]))][$key] = array_reverse($result[$key]); } if (DEBUG_ENABLED) @@ -2328,8 +2502,8 @@ function dn_unescape($dn) { * Fetches the URL for the specified item. This is a convenience function for * fetching project HREFs (like bugs) * - * @param string $type One of "open_bugs", "add_bug", "donate", or "add_rfe" - * (rfe = request for enhancement) + * @param string One of "open_bugs", "add_bug", "donate", or "add_rfe" + * (rfe = request for enhancement) * @return string The URL to the requested item. */ function get_href($type,$extra_info='') { @@ -2338,7 +2512,7 @@ function get_href($type,$extra_info='') { $group_id = '61828'; $bug_atid = '498546'; $rfe_atid = '498549'; - $forum_id = '34809'; + $forum_id = 'phpldapadmin-users'; switch($type) { case 'add_bug': @@ -2349,16 +2523,16 @@ function get_href($type,$extra_info='') { return sprintf('%s/Credits',$pla); case 'documentation': return sprintf('%s/Documentation',$pla); - case 'forum': - return sprintf('%s/mailarchive/forum.php?forum_id=%s',$sf,$forum_id); - case 'open_bugs': - return sprintf('%s/tracker/?group_id=%s&atid=%s',$sf,$group_id,$bug_atid); - case 'search_bug': - return sprintf('%s/tracker/?func=search&group_id=%s&atid=%s&set=custom&_status=100&_group=100&order=summary%s',$sf,$group_id,$bug_atid,$extra_info); case 'donate': return sprintf('%s/donate/index.php?group_id=%s',$sf,$group_id); - case 'help': - return sprintf('help.php'); + case 'forum': + return sprintf('%s/mailarchive/forum.php?forum_name=%s',$sf,$forum_id); + case 'logo': + return sprintf('http://sflogo.sourceforge.net/sflogo.php?group_id=%s&type=8',$group_id); + case 'sf': + return sprintf('%s/projects/phpldapadmin',$sf); + case 'web': + return sprintf('%s',$pla); default: return null; } @@ -2369,11 +2543,11 @@ function get_href($type,$extra_info='') { * * @return double The current time in seconds since the beginning of the UNIX epoch (Midnight Jan. 1, 1970) */ -function utime () { +function utime() { $time = explode(' ',microtime()); - $usec = (double)$time[0]; - $sec = (double)$time[1]; - return $sec + $usec; + $usec = (double)$time[0]; + $sec = (double)$time[1]; + return $sec + $usec; } /** @@ -2382,55 +2556,46 @@ function utime () { * current GET query string or POST array into a string and replace certain * variables with their own. * - * @param array $array The associate array to convert whose form is such that the keys are the - * names of the variables and the values are said variables' values like this: - * - * Array - * ( - * [server_id] = 0, - * [dn] = "dc=example,dc=com", - * [attr] = "sn" - * ) - * - * This will produce a string like this: "server_id=0&dn=dc=example,dc=com&attr=sn" - * @param array $exclude_vars (optional) An array of variables to exclude in the resulting string - * @param bool $url_encode_ampersands (optional) By default, this function encodes all ampersand-separators - * as & but callers may dislabe this by specifying false here. For example, URLs on HTML - * pages should encode the ampersands but URLs in header( "Location: http://example.com" ) should - * not be encoded. + * @param array The associate array to convert whose form is such that the keys are the + * names of the variables and the values are said variables' values like this: + * + * Array ( + * [server_id] = 0, + * [dn] = "dc=example,dc=com", + * [attr] = "sn" + * ) + * + * This will produce a string like this: "server_id=0&dn=dc=example,dc=com&attr=sn" + * @param array (optional) An array of variables to exclude in the resulting string * @return string The string created from the array. */ -function array_to_query_string( $array, $exclude_vars=array(), $url_encode_ampersands=true ) { +function array_to_query_string($array,$exclude_vars=array()) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - count($array),count($exclude_vars),$url_encode_ampersands); + $array,$exclude_vars,$url_encode_ampersands); - if (! is_array($array)) - return ''; - if (! $array) + if (! is_array($array) || ! count($array)) return ''; $str = ''; $i = 0; - foreach($array as $name => $val) { - if(! in_array($name, $exclude_vars)) { - if (is_array($val)) { - foreach($val as $v) { - if ($i > 0) - if($url_encode_ampersands) $str .= '&'; - else $str .= '&'; - $str .= rawurlencode($name) . '[]=' . rawurlencode($v); - $i++; + foreach ($array as $name => $val) + if (! in_array($name,$exclude_vars)) + if (is_array($val)) + foreach ($val as $v) { + if ($i++ > 0) + $str .= '&'; + + $str .= sprintf('%s[]=%s',rawurlencode($name),rawurlencode($v)); } - } else { - if ($i > 0) - if($url_encode_ampersands) $str .= '&'; - else $str .= '&'; - $str .= rawurlencode($name) . '=' . rawurlencode($val); - $i++; + + else { + if ($i++ > 0) + $str .= '&'; + + $str .= sprintf('%s=%s',rawurlencode($name),rawurlencode($val)); } - } - } + return $str; } @@ -2446,7 +2611,7 @@ function array_to_query_string( $array, $exclude_vars=array(), $url_encode_amper * * This makes it possible to sort lists of DNs such that they are grouped by container. * - * @param string $dn The DN to reverse + * @param string The DN to reverse * @return string The reversed DN * * @see pla_compare_dns @@ -2456,71 +2621,47 @@ function pla_reverse_dn($dn) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$dn); - return (join(',',array_reverse(pla_explode_dn($dn)))); + return (implode(',',array_reverse(pla_explode_dn($dn)))); } /** - * + * Attribute sorting */ function sortAttrs($a,$b) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__,$a,$b); - $attrs_display_order = isset($_SESSION[APPCONFIG]->attrs_display_order) ? $_SESSION[APPCONFIG]->attrs_display_order : array(); - if ($a == $b) return 0; + $server = $_SESSION[APPCONFIG]->getServer(get_request('server_id','REQUEST')); + $attrs_display_order = arrayLower($_SESSION[APPCONFIG]->getValue('appearance','attr_display_order')); + # Check if $a is in $attrs_display_order, get its key - $a_key = array_search($a,$attrs_display_order); + $a_key = array_search($a->getName(),$attrs_display_order); + $b_key = array_search($b->getName(),$attrs_display_order); - # If not, check if its friendly name is $attrs_display_order, get its key - # If not, assign one greater than number of elements. - if ( $a_key === false ) { - if ($_SESSION[APPCONFIG]->haveFriendlyName($a)) { - $a_key = array_search($_SESSION[APPCONFIG]->getFriendlyName($a),$attrs_display_order); - if ($a_key == '') - $a_key = count($attrs_display_order)+1; - - } else { + if ((! $a_key) && ($a_key !== 0)) + if ((! $a_key = array_search(strtolower($a->getFriendlyName()),$attrs_display_order)) && ($a_key !== 0)) $a_key = count($attrs_display_order)+1; - } - } - $b_key = array_search($b,$attrs_display_order); - if ($b_key === false) { - if ($_SESSION[APPCONFIG]->haveFriendlyName($b)) { - $b_key = array_search($_SESSION[APPCONFIG]->getFriendlyName($b),$attrs_display_order); - if ($b_key == '') - $b_key = count($attrs_display_order)+1; - - } else { + if ((! $b_key) && ($b_key !== 0)) + if ((! $b_key = array_search(strtolower($b->getFriendlyName()),$attrs_display_order)) && ($b_key !== 0)) $b_key = count($attrs_display_order)+1; - } - } # Case where neither $a, nor $b are in $attrs_display_order, $a_key = $b_key = one greater than num elements. # So we sort them alphabetically - if ($a_key === $b_key) { - $a = strtolower($_SESSION[APPCONFIG]->getFriendlyName($a)); - $b = strtolower($_SESSION[APPCONFIG]->getFriendlyName($b)); - return strcmp($a,$b); - } + if ($a_key === $b_key) + return strcasecmp($a->getFriendlyName(),$b->getFriendlyName()); # Case where at least one attribute or its friendly name is in $attrs_display_order # return -1 if $a before $b in $attrs_display_order return ($a_key < $b_key) ? -1 : 1; } -/** - * Compare the names of two Atrribute objects - */ -function attrcmp($a1, $a2) { - return strcmp(strtolower($a1->getFriendlyName()), strtolower($a2->getFriendlyName())); -} - /** * Reads an array and returns the array values back in lower case + * * @param array $array The array to convert the values to lowercase. * @returns array Array with values converted to lowercase. */ @@ -2532,120 +2673,18 @@ function arrayLower($array) { return $array; $newarray = array(); - foreach ($array as $key => $value) { + foreach ($array as $key => $value) $newarray[$key] = strtolower($value); - } return $newarray; } -/** - * Strips all slashes from the specified array in place (pass by ref). - * @param Array $array The array to strip slashes from, typically one of - * $_GET, $_POST, or $_COOKIE. - */ -function array_stripslashes(&$array) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$array); - - if (is_array($array)) - while (list($key) = each($array)) - if (is_array($array[$key]) && $key != $array) - array_stripslashes($array[$key]); - else - $array[$key] = stripslashes($array[$key]); -} - -/** - * Gets the USER_AGENT string from the $_SERVER array, all in lower case in - * an E_NOTICE safe manner. - * @return string|false The user agent string as reported by the browser. - */ -function get_user_agent_string() { - if( isset( $_SERVER['HTTP_USER_AGENT'] ) ) - $return = strtolower( $_SERVER['HTTP_USER_AGENT'] ); - else - $return = false; - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,$return); - - return $return; -} - -/** - * Determines whether the browser's operating system is UNIX (or something like UNIX). - * @return boolean True if the brower's OS is UNIX, false otherwise. - */ -function is_browser_os_unix() { - $agent_strs = array( - 'sunos','sunos 4','sunos 5', - 'i86', - 'irix','irix 5','irix 6','irix6', - 'hp-ux','09.','10.', - 'aix','aix 1','aix 2','aix 3','aix 4', - 'inux', - 'sco', - 'unix_sv','unix_system_v','ncr','reliant','dec','osf1', - 'dec_alpha','alphaserver','ultrix','alphastation', - 'sinix', - 'freebsd','bsd', - 'x11','vax','openvms' - ); - - $return = string_in_array_value(get_user_agent_string(),$agent_strs); - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,$return); - - return $return; -} - -/** - * Determines whether the browser's operating system is Windows. - * @return boolean True if the brower's OS is Windows, false otherwise. - */ -function is_browser_os_windows() { - $agent_strs = array( - 'win','win95','windows 95', - 'win16','windows 3.1','windows 16-bit','windows','win31','win16','winme', - 'win2k','winxp', - 'win98','windows 98','win9x', - 'winnt','windows nt','win32', - '32bit' - ); - - $return = string_in_array_value(get_user_agent_string(),$agent_strs); - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,$return); - - return $return; -} - -/** - * Determines whether the browser's operating system is Macintosh. - * @return boolean True if the brower's OS is mac, false otherwise. - */ -function is_browser_os_mac() { - $agent_strs = array( - 'mac','68000','ppc','powerpc' - ); - - $return = string_in_array_value(get_user_agent_string(),$agent_strs); - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,$return); - - return $return; -} - /** * Checks if a string exists in an array, ignoring case. * - * @param string $needle What you are looking for - * @param array $haystack The array that you think it is in. - * @return bool True if its there, false if its not. + * @param string What you are looking for + * @param array The array that you think it is in. + * @return boolean True if its there, false if its not. */ function in_array_ignore_case($needle,$haystack) { if (DEBUG_ENABLED) @@ -2658,12 +2697,12 @@ function in_array_ignore_case($needle,$haystack) { return false; $return = false; - foreach ($haystack as $element) { - if (DEBUG_ENABLED) - debug_log('Comparing (%s) with (%s)',64,__FILE__,__LINE__,__METHOD__,$needle,$element); - if (is_string($element) && 0 == strcasecmp($needle,$element)) + foreach ($haystack as $element) { + if (is_string($element) && (strcasecmp($needle,$element) == 0)) { $return = true; + break; + } } if (DEBUG_ENABLED) @@ -2672,220 +2711,88 @@ function in_array_ignore_case($needle,$haystack) { return $return; } -/** - * Checks if a string exists in part in an array value, ignoring case. - * - * @param string $needle What you are looking for - * @param array $haystack The array that you think it is in. - * @return bool True if its there, false if its not. - */ -function string_in_array_value( $needle, $haystack ) { - # Set default return - $return = false; - - if (! is_string($needle)) return $return; - if (! is_array($haystack)) return $return; - - foreach ($haystack as $element) - if (is_string($element) && (strpos($needle,$element) !== false)) { - $return = true; - break; - } - - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s), Returning (%s)',1,__FILE__,__LINE__,__METHOD__, - $needle,$haystack,$return); - - return $return; -} - -/** - * String padding - * - * @param string input string - * @param integer length of the result - * @param string the filling string - * @param integer padding mode - * - * @return string the padded string - */ -function full_str_pad($input, $pad_length, $pad_string = '', $pad_type = 0) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $input,$pad_length,$pad_string,$pad_type); - - $str = ''; - $length = $pad_length - strlen($input); - - if ($length > 0) { // str_repeat doesn't like negatives - if ($pad_type == STR_PAD_RIGHT) { // STR_PAD_RIGHT == 1 - $str = $input.str_repeat($pad_string, $length); - } elseif ($pad_type == STR_PAD_BOTH) { // STR_PAD_BOTH == 2 - $str = str_repeat($pad_string, floor($length/2)); - $str .= $input; - $str .= str_repeat($pad_string, ceil($length/2)); - } else { // defaults to STR_PAD_LEFT == 0 - $str = str_repeat($pad_string, $length).$input; - } - - } else { // if $length is negative or zero we don't need to do anything - $str = $input; - } - return $str; -} - /** * Gets a DN string using the user-configured tree_display_format string to format it. */ -function draw_formatted_dn($ldapserver,$entry) { +function draw_formatted_dn($server,$entry) { $dn = $entry->getDn(); if (DEBUG_ENABLED) debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $ldapserver->server_id,$dn); + $server->getIndex(),$dn); - $format = $_SESSION[APPCONFIG]->GetValue('appearance','tree_display_format'); - preg_match_all('/%[a-zA-Z_0-9]+/',$format,$tokens); - $tokens = $tokens[0]; + $formats = $_SESSION[APPCONFIG]->getValue('appearance','tree_display_format'); - if (DEBUG_ENABLED) - debug_log('The tokens are (%s)',1,__FILE__,__LINE__,__METHOD__,$tokens); + foreach ($formats as $format) { + $has_none = false; + preg_match_all('/%[a-zA-Z_0-9]+/',$format,$tokens); + $tokens = $tokens[0]; - foreach ($tokens as $token) { - if (strcasecmp($token,'%dn') == 0) - $format = str_replace($token,pretty_print_dn($dn),$format); + if (DEBUG_ENABLED) + debug_log('The tokens are (%s)',1,__FILE__,__LINE__,__METHOD__,$tokens); - elseif (strcasecmp($token,'%rdn') == 0) - $format = str_replace($token,pretty_print_dn($entry->getRdn()),$format); + foreach ($tokens as $token) { + if (strcasecmp($token,'%dn') == 0) + $format = str_replace($token,pretty_print_dn($dn),$format); - elseif (strcasecmp($token,'%rdnvalue') == 0) { - $rdn = get_rdn($dn,0,true); - $rdn_value = explode('=',$rdn,2); - $rdn_value = $rdn_value[1]; - $format = str_replace($token,$rdn_value,$format); + elseif (strcasecmp($token,'%rdn') == 0) + $format = str_replace($token,pretty_print_dn($entry->getRDN()),$format); - } else { - $attr_name = str_replace('%','',$token); - $attr_values = $ldapserver->getDNAttr($dn,$attr_name); + elseif (strcasecmp($token,'%rdnvalue') == 0) { + $rdn = get_rdn($dn,0,true); + $rdn_value = explode('=',$rdn,2); + $rdn_value = $rdn_value[1]; + $format = str_replace($token,$rdn_value,$format); - if (is_null($attr_values) || (count($attr_values) <= 0)) - $display = '<'._('none').'>'; + } else { + $attr_name = str_replace('%','',$token); + $attr_values = $server->getDNAttrValue($dn,$attr_name); - elseif (is_array($attr_values)) - $display = htmlspecialchars(implode(', ',$attr_values)); + if (is_null($attr_values) || (count($attr_values) <= 0)) { + $display = '<'._('none').'>'; + $has_none = true; - else - $display = htmlspecialchars($attr_values); + } elseif (is_array($attr_values)) + $display = implode(', ',$attr_values); - $format = str_replace($token,$display,$format); + else + $display = $attr_values; + + $format = str_replace($token,$display,$format); + } } + + # If this format has all values available, use it. Otherwise, try the next one + if (!$has_none) + return $format; } return $format; } -/** - * Takes a shadow* attribute and returns the date as an integer. - * @param $attrs array of Attribute objects - * @param $attr a shadow attribute name - */ -function shadow_date( $attrs, $attr) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $attrs,$attr); - - $shadowlastchange_attribute = null; - $shadowmax_attribute = null; - $shadowdate_attribute = null; - foreach ($attrs as $attribute) { - if ($attribute->getName() == 'shadowLastChange' || $attribute->getName() == 'shadowlastchange') { - $shadowlastchange_attribute = $attribute; - } elseif ($attribute->getName() == 'shadowMax' || $attribute->getName() == 'shadowmax') { - $shadowmax_attribute = $attribute; - } elseif ($attribute->getName() == $attr || $attribute->getName() == $attr) { - $shadowdate_attribute = $attribute; - } - if ($shadowlastchange_attribute && $shadowmax_attribute && $shadowdate_attribute) { - break; - } - } - - $shadowLastChange = $shadowlastchange_attribute ? $shadowlastchange_attribute->getValue(0) : null; - $shadowMax = $shadowmax_attribute ? $shadowmax_attribute->getValue(0) : null; - - if( 0 == strcasecmp( $attr, 'shadowLastChange' ) && $shadowLastChange) - $shadow_date = $shadowLastChange; - - elseif ( 0 == strcasecmp( $attr, 'shadowMax' ) && ($shadowMax > 0) && $shadowLastChange ) - $shadow_date = $shadowLastChange+$shadowMax; - - elseif (0 == strcasecmp($attr, 'shadowWarning') && ($shadowdate_attribute->getValue(0) > 0) - && $shadowLastChange && $shadowMax && $shadowMax > 0) - $shadow_date = $shadowLastChange+$shadowMax-$shadowdate_attribute->getValue(0); - - elseif (0 == strcasecmp($attr, 'shadowInactive') && ($shadowdate_attribute->getValue(0) > 0) - && $shadowLastChange && $shadowMax && $shadowMax > 0) - $shadow_date = $shadowLastChange+$shadowMax+$shadowdate_attribute->getValue(0); - - elseif (0 == strcasecmp($attr, 'shadowMin') && ($shadowdate_attribute->getValue(0) > 0) - && $shadowLastChange) - $shadow_date = $shadowLastChange+$shadowdate_attribute->getValue(0); - - elseif (0 == strcasecmp($attr, 'shadowExpire') && ($shadowdate_attribute->getValue(0) > 0)) - $shadow_date = $shadowdate_attribute->getValue(0); - - else // Couldn't interpret the shadow date (could be 0 or -1 or something) - return false; - - return $shadow_date*24*3600; -} - -/** - * This function will clean up the values use during a search - namely, values that have brackets - * as that messes up the search filter. - * @param string $val String that will be used in the search filter. - * @return string $result String that is ready for the search filter. - */ -function clean_search_vals( $val ) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$val); - - # Remove any escaped brackets already. - $val = preg_replace('/\\\\([\(\)])/','$1',$val); - - # The string might be a proper search filter - if (preg_match('/^\([&\|!]\(/',$val) || (preg_match('/\(([^\(|\)])*\)/',$val))) - return $val; - - else - return preg_replace('/([\(\)])/','\\\\$1',$val); -} - /** * Server html select list */ -function server_select_list ($select_id=null,$only_logged_on=true,$select_name='server_id',$js_script=null) { +function server_select_list($selected=null,$logged_on=false,$name='index',$isVisible=true,$js=null) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $select_id,$only_logged_on,$select_name,$js_script); + $selected,$logged_on,$name,$js); $count = 0; - $server_menu_html = sprintf('',$name,$name,$js); - foreach ($_SESSION[APPCONFIG]->ldapservers->GetServerList() as $id) { + foreach ($_SESSION[APPCONFIG]->getServerList($isVisible) as $index => $server) { + if ($server->isVisible()) { - $ldapserver = $_SESSION[APPCONFIG]->ldapservers->Instance($id); - - if ($ldapserver->isVisible()) { - - if ($only_logged_on && ! $ldapserver->haveAuthInfo()) + if ($logged_on && ! $server->isLoggedIn()) continue; $count++; - $server = $ldapserver; - $server_menu_html .= sprintf('', - $ldapserver->server_id,($ldapserver->server_id == $select_id ? 'selected' : ''),$ldapserver->name); + $server->getIndex(),($server->getIndex() == $selected ? 'selected' : ''),$server->getName()); + + # We will set this variable, in case there is only 1 hit. + $selected_server = $server; } } @@ -2896,60 +2803,22 @@ function server_select_list ($select_id=null,$only_logged_on=true,$select_name=' elseif ($count) return sprintf('%s ', - $server->name,$select_name,$server->server_id); + $selected_server->getName(),$name,$selected_server->getIndex()); else - return null; + return ''; } -function server_info_list($visible=false) { - $server_info_list = array(); - - if (isset($_SESSION[APPCONFIG])) { - foreach ($_SESSION[APPCONFIG]->ldapservers->GetServerList() as $id) { - $ldapserver = $_SESSION[APPCONFIG]->ldapservers->Instance($id); - - if (! $ldapserver->isVisible($id)) - continue; - - $server_info_list[$id]['id'] = $id; - $server_info_list[$id]['name'] = $ldapserver->name; - $server_info_list[$id]['base_dns'] = $ldapserver->getBaseDN(); - } - } - - if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) - debug_log('Entered with (%s), Returning (%s)',1,__FILE__,__LINE__,__METHOD__, - $visible,$server_info_list); - - return $server_info_list; -} - -function enc_type_select_list($enc_type,$id,$attributename,$i) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__,$enc_type,$id,$attributename,$i); - - $html = sprintf('"; - - return $html; -} - -// Converts a little-endian hex-number to one, that 'hexdec' can convert +/** + * Converts a little-endian hex-number to one, that 'hexdec' can convert + */ function littleEndian($hex) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$hex); $result = ''; - for ($x=strlen($hex)-2; $x >= 0; $x=$x-2) + for ($x=strlen($hex)-2;$x>= 0;$x=$x-2) $result .= substr($hex,$x,2); return $result; @@ -2959,127 +2828,69 @@ function binSIDtoText($binsid) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$binsid); - $hex_sid=bin2hex($binsid); + $hex_sid = bin2hex($binsid); $rev = hexdec(substr($hex_sid,0,2)); // Get revision-part of SID $subcount = hexdec(substr($hex_sid,2,2)); // Get count of sub-auth entries $auth = hexdec(substr($hex_sid,4,12)); // SECURITY_NT_AUTHORITY $result = "$rev-$auth"; - for ($x=0;$x < $subcount; $x++) { - $subauth[$x] = - hexdec(littleEndian(substr($hex_sid,16+($x*8),8))); // get all SECURITY_NT_AUTHORITY - $result .= "-".$subauth[$x]; + for ($x=0;$x<$subcount;$x++) { + $subauth[$x] = hexdec(littleEndian(substr($hex_sid,16+($x*8),8))); // get all SECURITY_NT_AUTHORITY + $result .= sprintf('-%s',$subauth[$x]); } return $result; } -/** - * Sort a multi dimensional array. - * @param array $data Multi demension array passed by reference - * @param string $sortby Comma delimited string of sort keys. - * @param bool $rev Whether to reverse sort. - * @returnn array $data Sorted multi demension array. - */ -function masort(&$data,$sortby,$rev=0) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $data,$sortby,$rev); - - # if the array to sort is null or empty - if (! $data) return; - - static $sort_funcs = array(); - - if (empty($sort_funcs[$sortby])) { - $code = "\$c=0;\n"; - foreach (split(',',$sortby) as $key) { - $code .= "if (is_object(\$a) || is_object(\$b)) {\n"; - $code .= " if (\$a->$key != \$b->$key)\n"; - - if ($rev) - $code .= " return (\$a->$key < \$b->$key ? -1 : 1);\n"; - else - $code .= " return (\$a->$key > \$b->$key ? -1 : 1);\n"; - - $code .= "} else {\n"; - - $code .= "if ((! isset(\$a['$key'])) && (! isset(\$b['$key']))) return 0;\n"; - $code .= "if ((! isset(\$a['$key'])) && isset(\$b['$key'])) return -1;\n"; - $code .= "if (isset(\$a['$key']) && (! isset(\$b['$key']))) return 1;\n"; - - - $code .= "if (is_numeric(\$a['$key']) && is_numeric(\$b['$key'])) {\n"; - - $code .= " if (\$a['$key'] != \$b['$key'])\n"; - if ($rev) - $code .= " return (\$a['$key'] < \$b['$key'] ? -1 : 1);\n"; - else - $code .= " return (\$a['$key'] > \$b['$key'] ? -1 : 1);\n"; - - $code .= "} else {\n"; - - if ($rev) - $code .= " if ( (\$c = strcasecmp(\$b['$key'],\$a['$key'])) != 0 ) return \$c;\n"; - else - $code .= " if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return \$c;\n"; - $code .= "}}\n"; - } - $code .= 'return $c;'; - $sort_func = $sort_funcs[$sortby] = create_function('$a, $b',$code); - - } else { - $sort_func = $sort_funcs[$sortby]; - } - - $sort_func = $sort_funcs[$sortby]; - uasort($data,$sort_func); -} - /** * Query LDAP and return a hash. - * @param object $ldapserver The LDAPServer object of the server which the user hsa logged in. - * @param string $base_dn The base DN to use. - * @param string $filter LDAP Query filter. - * @param string $key LDAP attribute to use as key. - * @param array $attrs LDAP attributes to use as values. - * @param bool $sort Specify false to not sort results by DN - * or true to have the returned array sorted by DN (uses ksort) - * or an array of attribute names to sort by attribute values - * @return array $results Array of values keyed by $key. + * + * @param string The base DN to use. + * @param string LDAP Query filter. + * @param string LDAP attribute to use as key. + * @param array Attributes to use as values. + * @param boolean Specify false to not sort results by DN + * or true to have the returned array sorted by DN (uses ksort) + * or an array of attribute names to sort by attribute values + * @return array Array of values keyed by $key. */ -function return_ldap_hash($ldapserver,$base_dn,$filter,$key,$attrs,$sort=true) { +function return_ldap_hash($base,$filter,$key,$attrs,$sort=true) { if (DEBUG_ENABLED) debug_log('Entered with (%s,%s,%s,%s,%s,%s)',1,__FILE__,__LINE__,__METHOD__, - $ldapserver->server_id,$base_dn,$filter,$key,$attrs,$sort); + $server->getIndex(),$base,$filter,$key,$attrs,$sort); - $ldapquery = $ldapserver->search(null,$base_dn,$filter,$attrs,'sub',$sort,LDAP_DEREF_NEVER,0); + $server = $_SESSION[APPCONFIG]->getServer(get_request('server_id','REQUEST')); + + $query = array(); + $query['base'] = $base; + $query['filter'] = $filter; + $query['attrs'] = $attrs; + $search = $server->query($query,null); $results = array(); - foreach ($ldapquery as $dn => $dnattrs) { - if (isset($dnattrs[$key])) { - if (is_array($dnattrs[$key])) { - foreach ($dnattrs[$key] as $i => $k) { + foreach ($search as $dn => $values) + if (isset($values[$key])) + if (is_array($values[$key])) + foreach ($values[$key] as $i => $k) foreach ($attrs as $attr) { - if (isset($dnattrs[$attr])) { + if (isset($values[$attr])) { $v = ''; - if (is_array($dnattrs[$attr]) && isset($dnattrs[$attr][$i])) - $v = $dnattrs[$attr][$i]; + + if (is_array($values[$attr]) && isset($values[$attr][$i])) + $v = $values[$attr][$i]; + if (is_string($v) && (strlen($v) > 0)) $results[$k][$attr] = $v; } } - } - } else { - foreach ($attrs as $attr) { - if (isset($dnattrs[$attr])) - $results[$dnattrs[$key]][$attr] = $dnattrs[$attr]; - } - } - } - } + + else + foreach ($attrs as $attr) + if (isset($values[$attr])) + $results[$values[$key]][$attr] = $values[$attr]; + return $results; } @@ -3088,33 +2899,33 @@ function return_ldap_hash($ldapserver,$base_dn,$filter,$key,$attrs,$sort=true) { * based on the criteria defined in the array $criteria in config.php */ function password_generate() { - $no_use_similiar = ! $_SESSION[APPCONFIG]->GetValue('password','use_similar'); - $lowercase = $_SESSION[APPCONFIG]->GetValue('password','lowercase'); - $uppercase = $_SESSION[APPCONFIG]->GetValue('password','uppercase'); - $digits = $_SESSION[APPCONFIG]->GetValue('password','numbers'); - $punctuation = $_SESSION[APPCONFIG]->GetValue('password','punctuation'); - $length = $_SESSION[APPCONFIG]->GetValue('password','length'); + $no_use_similiar = ! $_SESSION[APPCONFIG]->getValue('password','use_similar'); + $lowercase = $_SESSION[APPCONFIG]->getValue('password','lowercase'); + $uppercase = $_SESSION[APPCONFIG]->getValue('password','uppercase'); + $digits = $_SESSION[APPCONFIG]->getValue('password','numbers'); + $punctuation = $_SESSION[APPCONFIG]->getValue('password','punctuation'); + $length = $_SESSION[APPCONFIG]->getValue('password','length'); $outarray = array(); if ($no_use_similiar) { - $raw_lower = "a b c d e f g h k m n p q r s t u v w x y z"; - $raw_numbers = "2 3 4 5 6 7 8 9"; - $raw_punc = "# $ % ^ & * ( ) _ - + = . , [ ] { } :"; + $raw_lower = 'a b c d e f g h k m n p q r s t u v w x y z'; + $raw_numbers = '2 3 4 5 6 7 8 9'; + $raw_punc = '# $ % ^ & * ( ) _ - + = . , [ ] { } :'; } else { - $raw_lower = "a b c d e f g h i j k l m n o p q r s t u v w x y z"; - $raw_numbers = "1 2 3 4 5 6 7 8 9 0"; - $raw_punc = "# $ % ^ & * ( ) _ - + = . , [ ] { } : |"; + $raw_lower = 'a b c d e f g h i j k l m n o p q r s t u v w x y z'; + $raw_numbers = '1 2 3 4 5 6 7 8 9 0'; + $raw_punc = '# $ % ^ & * ( ) _ - + = . , [ ] { } : |'; } - $llower = explode(" ", $raw_lower); + $llower = explode(' ',$raw_lower); shuffle($llower); - $lupper = explode(" ", strtoupper($raw_lower)); + $lupper = explode(' ',strtoupper($raw_lower)); shuffle($lupper); - $numbers = explode(" ", $raw_numbers); + $numbers = explode(' ',$raw_numbers); shuffle($numbers); - $punc = explode(" ", $raw_punc); + $punc = explode(' ',$raw_punc); shuffle($punc); if ($lowercase > 0) @@ -3134,23 +2945,23 @@ function password_generate() { if ($num_spec < $length) { $leftover = array(); if ($lowercase > 0) - $leftover = array_merge($leftover, $llower); + $leftover = array_merge($leftover,$llower); if ($uppercase > 0) - $leftover = array_merge($leftover, $lupper); + $leftover = array_merge($leftover,$lupper); if ($digits > 0) - $leftover = array_merge($leftover, $numbers); + $leftover = array_merge($leftover,$numbers); if ($punctuation > 0) - $leftover = array_merge($leftover, $punc); + $leftover = array_merge($leftover,$punc); if (count($leftover) == 0) $leftover = array_merge($leftover,$llower,$lupper,$numbers,$punc); shuffle($leftover); - $outarray = array_merge($outarray, a_array_rand($leftover,$length-$num_spec)); + $outarray = array_merge($outarray,a_array_rand($leftover,$length-$num_spec)); } shuffle($outarray); - $return = implode('', $outarray); + $return = implode('',$outarray); if (DEBUG_ENABLED) debug_log('Entered with (), Returning (%s)',1,__FILE__,__LINE__,__METHOD__,$return); @@ -3161,9 +2972,9 @@ function password_generate() { * This function returns an array of $num_req values * randomly picked from the $input array * - * @param array of values - * @param integer, number of values in returned array - * @return string the padded string + * @param array Array of values + * @param integer Number of values in returned array + * @return string The padded string */ function a_array_rand($input,$num_req) { if (count($input) == 0) @@ -3175,12 +2986,12 @@ function a_array_rand($input,$num_req) { $return = array(); if ($num_req > count($input)) { for($i = 0; $i < $num_req; $i++) { - $idx = array_rand($input, 1); + $idx = array_rand($input,1); $return[] = $input[$idx]; } } else { - $idxlist = array_rand($input, $num_req); + $idxlist = array_rand($input,$num_req); if ($num_req == 1) $idxlist = array($idxlist); @@ -3195,19 +3006,6 @@ function a_array_rand($input,$num_req) { return $return; } -/** - * Draws an HTML date selector button which, when clicked, pops up a date selector dialog. - * @param string $attr The name of the date type attribute - */ -function draw_date_selector_link( $attr ) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$attr); - - $href = "javascript:dateSelector('$attr');"; - $title = _('Click to popup a dialog to select a date graphically'); - printf('Calendar',$href,$title,IMGDIR,$attr); -} - /** * This is for Opera. By putting "random junk" in the query string, it thinks * that it does not have a cached version of the page, and will thus @@ -3221,7 +3019,7 @@ function random_junk() { /** * Returns a HTML id that can be used in the URL after the #. * - * @param string $dn The DN to pretty-print. + * @param string The DN to pretty-print. * @return string */ function htmlid($sid,$dn) { @@ -3229,11 +3027,12 @@ function htmlid($sid,$dn) { } /** - * Is compression enabled for output + * Is PLA configured for AJAX display */ -function isCompress() { - return (isset($_SESSION[APPCONFIG]) && $_SESSION[APPCONFIG]->GetValue('appearance','compress') - && ! ini_get('zlib.output_compression') - && eregi('gzip',$_SERVER['HTTP_ACCEPT_ENCODING'])); +function isAjaxEnabled() { + if (isset($_SESSION[APPCONFIG])) + return ($_SESSION[APPCONFIG]->getValue('appearance','tree') == 'AJAXTree'); + else + return false; } ?> diff --git a/lib/hooks.php b/lib/hooks.php index bbbc6dd..6fc3d08 100644 --- a/lib/hooks.php +++ b/lib/hooks.php @@ -1,12 +1,9 @@ and Alc?ve - * @package phpLDAPadmin - * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the @@ -21,6 +18,9 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA + * + * @author Benjamin Drieu and Alc?ve + * @package phpLDAPadmin */ /** @@ -40,10 +40,9 @@ function sort_array_by_priority($a,$b) { /** * Runs procedures attached to a hook. * - * @param hook_name Name of hook to run. - * @param args Array of optional arguments set by - * phpldapadmin. It is normally in a form known - * by call_user_func_array() : + * @param hook_name Name of hook to run. + * @param args Array of optional arguments set by phpldapadmin. It is normally in a form known by call_user_func_array() : + * *
[ 'server_id' => 0,
  * 'dn' => 'uid=epoussa,ou=tech,o=corp,o=fr' ]
* @@ -52,39 +51,53 @@ function sort_array_by_priority($a,$b) { function run_hook($hook_name,$args) { $hooks = isset($_SESSION[APPCONFIG]) ? $_SESSION[APPCONFIG]->hooks : array(); - syslog_debug("Running hook $hook_name."); + if (DEBUG_ENABLED) + debug_log('Running HOOK (%s,%s)',257,__FILE__,__LINE__,__METHOD__, + $hook_name,$args); if (! array_key_exists($hook_name,$hooks)) { - syslog_notice("Hook '$hook_name' not defined !\n"); + if (DEBUG_ENABLED) + debug_log('Returning, HOOK not defined (%s)',257,__FILE__,__LINE__,__METHOD__, + $hook_name); + return true; } - unset($rollbacks); - $rollbacks = array (); + $rollbacks = array(); reset($hooks[$hook_name]); /* Execution of procedures attached is done using a numeric order * since all procedures have been attached to the hook with a * numerical weight. */ while (list($key,$hook) = each($hooks[$hook_name])) { + if (DEBUG_ENABLED) + debug_log('Calling HOOK Function (%s)(%s)',257,__FILE__,__LINE__,__METHOD__, + $hook['hook_function'],$args); + array_push($rollbacks,$hook['rollback_function']); - syslog_debug("Calling ".$hook['hook_function']."\n"); $result = call_user_func_array($hook['hook_function'],$args); - syslog_notice("Called ".$hook['hook_function']."\n"); + if (DEBUG_ENABLED) + debug_log('Called HOOK Function (%s)',257,__FILE__,__LINE__,__METHOD__, + $hook['hook_function']); - /* If a procedure fails, its optional rollback is executed with + /* If a procedure fails (identified by a false return), its optional rollback is executed with * the same arguments. After that, all rollbacks from * previously executed procedures are executed in the reverse * order. */ - if ($result != true) { - syslog_debug("Function ".$hook['hook_function']." returned $result\n"); + if (! is_null($result) && $result == false) { + if (DEBUG_ENABLED) + debug_log('HOOK Function [%s] return (%s)',257,__FILE__,__LINE__,__METHOD__, + $hook['hook_function'],$result); while ($rollbacks) { $rollback = array_pop($rollbacks); if ($rollback != false) { - syslog_debug("Executing rollback $rollback\n"); + if (DEBUG_ENABLED) + debug_log('HOOK Function Rollback (%s)',257,__FILE__,__LINE__,__METHOD__, + $rollback); + call_user_func_array($rollback,$args); } } @@ -99,19 +112,26 @@ function run_hook($hook_name,$args) { /** * Adds a procedure to a hook for later execution. * - * @param hook_name Name of the hook. - * @param priority Numeric priority. Lowest means - * procedure will be executed before. - * @param hook_function Name of the php function called upon - * hook trigger. - * @param rollback_function Name of the php rollback function - * called upon failure. + * @param hook_name Name of the hook. + * @param hook_function Name of the php function called upon hook trigger. + * @param priority Numeric priority. Lowest means procedure will be executed before. + * @param rollback_function Name of the php rollback function called upon failure. */ -function add_hook($hook_name,$priority,$hook_function,$rollback_function) { +function add_hook($hook_name,$hook_function,$priority=0,$rollback_function=null) { + # First, see if the hook function exists. + if (! function_exists($hook_function)) { + system_message(array( + 'title'=>_('Hook function does not exist'), + 'body'=>sprintf('Hook name: %s
Hook function: %s',$hook_name,$hook_function), + 'type'=>'warn')); + + return; + } + if (! array_key_exists($hook_name,$_SESSION[APPCONFIG]->hooks)) $_SESSION[APPCONFIG]->hooks[$hook_name] = array(); - remove_hook($hook_name,-1,$hook_function,''); + remove_hook($hook_name,$hook_function,-1,null); array_push($_SESSION[APPCONFIG]->hooks[$hook_name],array( 'priority' => $priority, @@ -124,19 +144,13 @@ function add_hook($hook_name,$priority,$hook_function,$rollback_function) { /** * Removes a procedure from a hook, based on a filter. * - * @param hook_name Name of the hook. - * @param priority Numeric priority. If set, all - * procedures of that priority will be - * removed. - * @param hook_function Name of the procedure function. If - * set, all procedures that call this - * function will be removed. - * @param rollback_function Name of the php rollback function - * called upon failure. If set, all - * procedures that call this function - * as a rollback will be removed. + * @param hook_name Name of the hook. + * @param priority Numeric priority. If set, all procedures of that priority will be removed. + * @param hook_function Name of the procedure function. If set, all procedures that call this function will be removed. + * @param rollback_function Name of the php rollback function called upon failure. If set, all + * procedures that call this function as a rollback will be removed. */ -function remove_hook($hook_name,$priority,$hook_function,$rollback_function) { +function remove_hook($hook_name,$hook_function,$priority,$rollback_function) { if (array_key_exists($hook_name,$_SESSION[APPCONFIG]->hooks)) { reset($_SESSION[APPCONFIG]->hooks[$hook_name]); @@ -161,17 +175,19 @@ function clear_hooks($hook_name) { unset($_SESSION[APPCONFIG]->hooks[$hook_name]); } +$hooks = array(); + # Evaluating user-made hooks if (is_dir(HOOKSDIR.'functions')) { - $dir = dir(HOOKSDIR.'functions'); + $hooks['dir'] = dir(HOOKSDIR.'functions'); - while (false !== ($hookfile = $dir->read())) { - $filename = sprintf('%s/%s/%s',HOOKSDIR,'functions',$hookfile); + while ($hooks['file'] = $hooks['dir']->read()) { + $script = sprintf('%s/%s/%s',HOOKSDIR,'functions',$hooks['file']); - if (is_file($filename) and eregi('php[0-9]?$',$hookfile)) - require_once "$filename"; + if (is_file($script) && preg_match('/php[0-9]?$/',$hooks['file'])) + require_once $script; } - $dir -> close(); + $hooks['dir']->close(); } ?> diff --git a/lib/import_functions.php b/lib/import_functions.php new file mode 100644 index 0000000..bb68b6b --- /dev/null +++ b/lib/import_functions.php @@ -0,0 +1,611 @@ +server_id = $server_id; + $this->template_id = $template_id; + + $this->accept(); + } + + static function types() { + $type = array(); + + $details = ImportLDIF::getType(); + $type[$details['type']] = $details; + + return $type; + } + + private function accept() { + switch($this->template_id) { + case 'LDIF': + $this->template = new ImportLDIF($this->server_id); + break; + + default: + system_message(array( + 'title'=>sprintf('%s %s',_('Unknown Import Type'),$this->template_id), + 'body'=>_('phpLDAPadmin has not been configured for that import type'), + 'type'=>'warn'),'index.php'); + + die(); + } + + $this->template->accept(); + } + + public function getTemplate() { + return $this->template; + } +} + +/** + * Import Class + * + * This abstract classes provides all the common methods and variables for the + * custom import classes. + * + * @package phpLDAPadmin + * @subpackage Import + */ +abstract class Import { + protected $server_id = null; + protected $input = null; + protected $source = array(); + + public function __construct($server_id) { + $this->server_id = $server_id; + } + + public function accept() { + if (get_request('ldif','REQUEST')) { + $this->input = explode("\n",get_request('ldif','REQUEST')); + $this->source['name'] = 'STDIN'; + $this->source['size'] = strlen(get_request('ldif','REQUEST')); + + } elseif (isset($_FILES['ldif_file']) && is_array($_FILES['ldif_file']) && ! $_FILES['ldif_file']['error']) { + $input = file_get_contents($_FILES['ldif_file']['tmp_name']); + $this->input = preg_split("/\n|\r\n|\r/",$input); + $this->source['name'] = $_FILES['ldif_file']['name']; + $this->source['size'] = $_FILES['ldif_file']['size']; + + } else { + system_message(array( + 'title'=>_('No import input'), + 'body'=>_('You must either upload a file or provide an import in the text box.'), + 'type'=>'error'),sprintf('cmd.php?cmd=import_form&server_id=%s',get_request('server_id','REQUEST'))); + + die(); + } + } + + public function getSource($attr) { + if (isset($this->source[$attr])) + return $this->source[$attr]; + else + return null; + } + + # @todo integrate hooks + public function LDAPimport() { + $template = $this->getTemplate(); + $server = $this->getServer(); + + switch ($template->getType()) { + case 'add': + return $server->add($template->getDN(),$template->getLDAPadd()); + + case 'modify': + return $server->modify($template->getDN(),$template->getLDAPmodify()); + + case 'moddn': + case 'modrdn': + return $server->rename($template->getDN(),$template->modrdn['newrdn'],$template->modrdn['newsuperior'],$template->modrdn['deleteoldrdn']); + + default: + debug_dump_backtrace(sprintf('Unknown template type %s',$template->getType()),1); + } + + return true; + } +} + +/** + * Import entries from LDIF + * + * The LDIF spec is described by RFC2849 + * http://www.ietf.org/rfc/rfc2849.txt + * + * @package phpLDAPadmin + * @subpackage Import + */ +class ImportLDIF extends Import { + private $_currentLineNumber = 0; + private $_currentLine = ''; + private $template; + public $error = array(); + + static public function getType() { + return array('type'=>'LDIF','description' => _('LDIF Import'),'extension'=>'ldif'); + } + + protected function getTemplate() { + return $this->template; + } + + protected function getServer() { + return $_SESSION[APPCONFIG]->getServer($this->server_id); + } + + public function readEntry() { + static $haveVersion = false; + + if ($lines = $this->nextLines()) { + + # If we have a version line. + if (! $haveVersion && preg_match('/^version:/',$lines[0])) { + list($text,$version) = $this->getAttrValue(array_shift($lines)); + + if ($version != 1) + return $this->error(sprintf('%s %s',_('LDIF import only suppports version 1'),$version),$lines); + + $haveVersion = true; + $lines = $this->nextLines(); + } + + $server = $this->getServer(); + + # The first line should be the DN + if (preg_match('/^dn:/',$lines[0])) { + list($text,$dn) = $this->getAttrValue(array_shift($lines)); + + # The second line should be our changetype + if (preg_match('/^changetype:[ ]*(delete|add|modrdn|moddn|modify)/i',$lines[0])) { + $attrvalue = $this->getAttrValue($lines[0]); + $changetype = $attrvalue[1]; + array_shift($lines); + + } else + $changetype = 'add'; + + $this->template = new Template($this->server_id,null,null,$changetype); + + switch ($changetype) { + case 'add': + $rdn = get_rdn($dn); + $container = $server->getContainer($dn); + + $this->template->setContainer($container); + $this->template->accept(); + + $this->getAddDetails($lines); + $this->template->setRDNAttributes($rdn); + + return $this->template; + + break; + + case 'modify': + if (! $server->dnExists($dn)) + return $this->error(sprintf('%s %s',_('DN does not exist'),$dn),$lines); + + $this->template->setDN($dn); + $this->template->accept(); + + return $this->getModifyDetails($lines); + + break; + + case 'moddn': + case 'modrdn': + if (! $server->dnExists($dn)) + return $this->error(sprintf('%s %s',_('DN does not exist'),$dn),$lines); + + $this->template->setDN($dn); + $this->template->accept(); + + return $this->getModRDNAttributes($lines); + + break; + + default: + if (! $server->dnExists($dn)) + return $this->error(_('Unkown change type'),$lines); + } + + } else + return $this->error(_('A valid dn line is required'),$lines); + + } else + return false; + } + + /** + * Get the Attribute and Decoded Value + */ + private function getAttrValue($line) { + list($attr,$value) = explode(':',$line,2); + + # Get the DN + if (substr($value,0,1) == ':') + $value = base64_decode(trim(substr($value,1))); + else + $value = trim($value); + + return array($attr,$value); + } + + /** + * Get the lines of the next entry + * + * @return The lines (unfolded) of the next entry + */ + private function nextLines() { + $current = array(); + $endEntryFound = false; + + if ($this->hasMoreEntries() && ! $this->eof()) { + # The first line is the DN one + $current[0]= trim($this->_currentLine); + + # While we end on a blank line, fetch the attribute lines + $count = 0; + while (! $this->eof() && ! $endEntryFound) { + # Fetch the next line + $this->nextLine(); + + /* If the next line begin with a space, we append it to the current row + * else we push it into the array (unwrap)*/ + if ($this->isWrappedLine()) + $current[$count] .= trim($this->_currentLine); + elseif ($this->isCommentLine()) {} + # Do nothing + elseif (! $this->isBlankLine()) + $current[++$count] = trim($this->_currentLine); + else + $endEntryFound = true; + } + + # Return the LDIF entry array + return $current; + + } else + return false; + } + + /** + * Private method to check if there is more entries in the input. + * + * @return boolean true if an entry was found, false otherwise. + */ + private function hasMoreEntries() { + $entry_found = false; + + while (! $this->eof() && ! $entry_found) { + # If it's a comment or blank line, switch to the next line + if ($this->isCommentLine() || $this->isBlankLine()) { + # Do nothing + $this->nextLine(); + + } else { + $this->_currentDnLine = $this->_currentLine; + $this->dnLineNumber = $this->_currentLineNumber; + $entry_found = true; + } + } + + return $entry_found; + } + + /** + * Helper method to switch to the next line + */ + private function nextLine() { + $this->_currentLineNumber++; + $this->_currentLine = array_shift($this->input); + } + + /** + * Check if it's a comment line. + * + * @return boolean true if it's a comment line,false otherwise + */ + private function isCommentLine() { + return substr(trim($this->_currentLine),0,1) == '#' ? true : false; + } + + /** + * Check if it's a wrapped line. + * + * @return boolean true if it's a wrapped line,false otherwise + */ + private function isWrappedLine() { + return substr($this->_currentLine,0,1) == ' ' ? true : false; + } + + /** + * Check if is the current line is a blank line. + * + * @return boolean if it is a blank line,false otherwise. + */ + private function isBlankLine() { + return(trim($this->_currentLine) == '') ? true : false; + } + + /** + * Returns true if we reached the end of the input. + * + * @return boolean true if it's the end of file, false otherwise. + */ + public function eof() { + return count($this->input) > 0 ? false : true; + } + + private function error($msg,$data) { + $this->error['message'] = sprintf('%s [%s]',$msg,$this->template ? $this->template->getDN() : ''); + $this->error['line'] = $this->_currentLineNumber; + $this->error['data'] = $data; + $this->error['changetype'] = $this->template ? $this->template->getType() : 'Not set'; + + return false; + } + + /** + * Method to retrieve the attribute value of a ldif line, + * and get the base 64 decoded value if it is encoded + */ + private function getAttributeValue($value) { + $return = ''; + + if (substr($value,0,1) == '<') { + $url = trim(substr($value,1)); + + if (preg_match('^file://',$url)) { + $filename = substr(trim($url),7); + + if ($fh = @fopen($filename,'rb')) { + if (! $return = @fread($fh,filesize($filename))) + return $this->error(_('Unable to read file for'),$value); + + @fclose($fh); + + } else + return $this->error(_('Unable to open file for'),$value); + + } else + return $this->error(_('The url attribute value should begin with file:// for'),$value); + + # It's a string + } else + $return = $value; + + return trim($return); + } + + /** + * Build the attributes array when the change type is add. + */ + private function getAddDetails($lines) { + foreach ($lines as $line) { + list($attr,$value) = $this->getAttrValue($line); + + if (is_null($attribute = $this->template->getAttribute($attr))) { + $attribute = $this->template->addAttribute($attr,array('values'=>array($value))); + $attribute->justModified(); + + } else + if ($attribute->hasBeenModified()) + $attribute->addValue($value); + else + $attribute->setValue(array($value)); + } + } + + /** + * Build the attributes array for the entry when the change type is modify + */ + private function getModifyDetails($lines) { + if (! count($lines)) + return $this->error(_('Missing attributes for'),$lines); + + # While the array is not empty + while (count($lines)) { + $processline = false; + $deleteattr = false; + + # Get the current line with the action + $currentLine = array_shift($lines); + $attrvalue = $this->getAttrValue($currentLine); + $action_attribute = $attrvalue[0]; + $action_attribute_value = $attrvalue[1]; + + if (! in_array($action_attribute,array('add','delete','replace'))) + return $this->error(_('Missing modify command add, delete or replace'),array_merge(array($currentLine),$lines)); + + $processline = true; + switch ($action_attribute) { + case 'add': + + break; + + case 'delete': + $attribute = $this->template->getAttribute($action_attribute_value); + + if (is_null($attribute)) + return $this->error(sprintf('%s %s',_('Attempting to delete a non existant attribute'),$action_attribute_value), + array_merge(array($currentLine),$lines)); + + $deleteattr = true; + + break; + + case 'replace': + $attribute = $this->template->getAttribute($action_attribute_value); + + if (is_null($attribute)) + return $this->error(sprintf('%s %s',_('Attempting to replace a non existant attribute'),$action_attribute_value), + array_merge(array($currentLine),$lines)); + + break; + + default: + debug_dump_backtrace(sprintf('Unknown action %s',$action_attribute),1); + } + + # Fetch the attribute for the following line + $currentLine = array_shift($lines); + + while ($processline && trim($currentLine) && (trim($currentLine) != '-')) { + $processline = false; + + # If there is a valid line + if (preg_match('/:/',$currentLine)) { + $attrvalue = $this->getAttrValue($currentLine); + $attr = $attrvalue[0]; + $attribute_value_part = $attrvalue[1]; + + # Check that it correspond to the one specified before + if ($attr == $action_attribute_value) { + # Get the value part of the attribute + $attribute_value = $this->getAttributeValue($attribute_value_part); + + $attribute = $this->template->getAttribute($attr); + + # This should be a add/replace operation + switch ($action_attribute) { + case 'add': + if (is_null($attribute)) + $attribute = $this->template->addAttribute($attr,array('values'=>array($attribute_value_part))); + else + $attribute->addValue($attribute_value_part,-1); + + $attribute->justModified(); + + break; + + case 'delete': + $deleteattr = false; + + if ($key = array_search($attribute_value_part,$attribute->getValues())) + $attribute->delValue($key); + else + return $this->error(sprintf('%s %s',_('Delete value doesnt exist in DN'),$attribute_value_part), + array_merge(array($currentLine),$lines)); + + + break; + + case 'replace': + if ($attribute->hasBeenModified()) + $attribute->addValue($attribute_value_part,-1); + else + $attribute->setValue(array($attribute_value_part)); + + break; + + default: + debug_dump_backtrace(sprintf('Unexpected operation %s',$action_attribute)); + } + + } else + return $this->error(sprintf('%s %s',_('The attribute to modify doesnt match the one specified by'),$action_attribute), + array_merge(array($currentLine),$lines)); + + } else + return $this->error(sprintf('%s %s',_('Attribute not valid'),$currentLine), + array_merge(array($currentLine),$lines)); + + $currentLine = array_shift($lines); + if (trim($currentLine)) + $processline = true; + } + + if ($action_attribute == 'delete' && $deleteattr) + $attribute->setValue(array()); + + } + + return $this->template; + } + + /** + * Build the attributes for the entry when the change type is modrdn + */ + function getModRDNAttributes($lines) { + $server = $this->getServer(); + $attrs = array(); + + # MODRDN MODDN should only be 2 or 3 lines. + if (count($lines) != 2 && count($lines) !=3) + return $this->error(_('Invalid entry'),$lines); + + else { + $currentLine = array_shift($lines); + + # First we need to check if there is an new rdn specified + if (preg_match('/^newrdn:(:?)/',$currentLine)) { + + $attrvalue = $this->getAttrValue($currentLine); + $attrs['newrdn'] = $attrvalue[1]; + + $currentLine = array_shift($lines); + + if (preg_match('/^deleteoldrdn:[ ]*(0|1)/',$currentLine)) { + $attrvalue = $this->getAttrValue($currentLine); + $attrs['deleteoldrdn'] = $attrvalue[1]; + + # Switch to the possible new superior attribute + if (count($lines)) { + $currentLine = array_shift($lines); + + # then the possible new superior attribute + if (preg_match('/^newsuperior:/',$currentLine)) { + $attrvalue = $this->getAttrValue($currentLine); + $attrs['newsuperior'] = $attrvalue[1]; + + } else + return $this->error(_('A valid newsuperier attribute should be specified'),$lines); + + } else + $attrs['newsuperior'] = $server->getContainer($this->template->getDN()); + + } else + return $this->error(_('A valid deleteoldrdn attribute should be specified'),$lines); + + } else + return $this->error(_('A valid newrdn attribute should be specified'),$lines); + } + + # Well do something out of the ordinary here, since our template doesnt handle mod[r]dn yet. + $this->template->modrdn = $attrs; + return $this->template; + } +} +?> diff --git a/lib/ldap_error_codes.txt b/lib/ldap_error_codes.txt index 3eccc67..8d4a2cc 100644 --- a/lib/ldap_error_codes.txt +++ b/lib/ldap_error_codes.txt @@ -66,8 +66,7 @@ (RDN) of an object." 0x44 LDAP_ALREADY_EXISTS "The object already exists. Usually you are trying to create a new object on top of an existing one." -0x45 LDAP_NO_OBJECT_CLASS_MODS "ObjectClass modifications are not - allolwed." +0x45 LDAP_NO_OBJECT_CLASS_MODS "ObjectClass modifications are not allowed." 0x46 LDAP_RESULTS_TOO_LARGE "" 0x47 LDAP_AFFECTS_MULTIPLE_DSAS "" 0x50 LDAP_OTHER "" diff --git a/lib/ldap_supported_oids.txt b/lib/ldap_supported_oids.txt index 692f577..161b971 100644 --- a/lib/ldap_supported_oids.txt +++ b/lib/ldap_supported_oids.txt @@ -1,4 +1,4 @@ -# $Header: /cvsroot/phpldapadmin/phpldapadmin/lib/ldap_supported_oids.txt,v 1.4 2007/12/15 07:50:32 wurley Exp $ +# $Header$ # If you find some reliable and more meaningful descriptions to this OIDS, # then please let the phpldapadmin development know so that this file can be @@ -52,7 +52,7 @@ 1.3.6.1.1.14 "Modify-Increment Extension" "RFC 4525" "An extension to the Lightweight Directory Access Protocol (LDAP) Modify operation to support an increment capability." 1.3.6.1.4.1.42.2.27.8.5.1 "passwordPolicyRequest" 1.3.6.1.4.1.42.2.27.9.5.2 "GetEffectiveRights control" "" "May be used to determine what operations a given user may perform on a specified entry." -1.3.6.1.4.1.1466.101.119.1 "Dynamic Directory Services Refresh Request RFC2589" +1.3.6.1.4.1.1466.101.119.1 "Dynamic Directory Services Refresh Request" "RFC 2589" 1.3.6.1.4.1.1466.20036 "LDAP_NOTICE_OF_DISCONNECTION" 1.3.6.1.4.1.1466.20037 "Transport Layer Security Extension" "RFC 2830" "This operation provides for TLS establishment in an LDAP association and is defined in terms of an LDAP extended request." 1.3.6.1.4.1.1466.29539.1 "LDAP_CONTROL_ATTR_SIZELIMIT" @@ -176,7 +176,7 @@ 2.16.840.1.113730.3.4.15 "Authentication Response Control" 2.16.840.1.113730.3.4.16 "Authentication Request Control" 2.16.840.1.113730.3.4.17 "Real Attributes Only Request Control" -2.16.840.1.113730.3.4.18 "LDAP Proxied Authorization Control" "draft-weltman-ldapv3-proxy-06.txt" "The Proxied Authorization Control allows a client to request that an operation be processed under a provided authorization identity [AUTH] instead of as the current authorization identity associated with the connection. " +2.16.840.1.113730.3.4.18 "LDAP Proxied Authorization Control" "draft-weltman-ldapv3-proxy-06.txt" "The Proxied Authorization Control allows a client to request that an operation be processed under a provided authorization identity [AUTH] instead of as the current authorization identity associated with the connection." 2.16.840.1.113730.3.4.19 "Virtual Attributes Only Request Control" 2.16.840.1.113730.3.4.20 "Use One Backend" 2.16.840.1.113730.3.4.999 "iPlanet Replication Modrdn Extra Mods Control" diff --git a/lib/ldif_functions.php b/lib/ldif_functions.php deleted file mode 100644 index bb1ffef..0000000 --- a/lib/ldif_functions.php +++ /dev/null @@ -1,1046 +0,0 @@ -dn = $dn; - $this->changeType = $changeType; - $this->attributes = $atts; - } - - /** - * Return the dn of the entry - * - * @return String the dn of the entry - */ - function getDn() { - return $this->dn; - } - - /** - * Setter method for the distinguished name - * - * @param String $dn the distinguished name of the entry - */ - function setDn($dn) { - $this->dn = $dn; - } - - /** - * Getter method for the change type - * - * @return String the change type of the entry - */ - function getChangeType() { - return $this->changeType; - } - - /** - * Setter method for the change type of the entry - * - * @param String $changeType the change type of the entry - */ - function setChangeType($changeType) { - $this->changeType = $changeType; - } - - /** - * Add the attributes to the entry - * - * @param String[][] $atts the attributes of the entry - */ - function setAttributes($atts) { - $this->attributes = $atts; - } - - /** - * Get the attributes of the entry - * - * @return String[][] the attributes of the entry - */ - function getAttributes() { - return $this->attributes; - - } -} - -/** - * This exception is similar to the one in LdifReader - * Should be remove latter - * see comment for the class Ldif_LdapEntryReader - * @package phpLDAPadmin - */ -class LdifEntryReaderException { - public $lineNumber; - public $currentLine; - public $message; - - /** - * Constructor of the exception - * - * @param int $lineNumber the number of the line where - * the error occured - * @param String currentLine the line wich raised an exception - * @param String the message associated the exception - */ - - function LdifEntryReaderException($lineNumber,$currentLine,$message) { - $this->lineNumber = $lineNumber; - $this->currentLine =$currentLine; - $this->message = $message; - } -} - -/** - * Class in charge of reading a paricular entry - * @package phpLDAPadmin - */ -class LdifEntryReader { - # The entry - public $entry; - - # The lines of the entry fetch from the file - public $lines; - - # The dn of the entry - public $dn=''; - - # Error flag - public $_error; - - # The current line number of the entry; - public $_currentLineNumber; - - /** - * Constructor of the LdifEntryReader - * - * @param String[] $lines the line of the entry - */ - function LdifEntryReader() {} - - function readLines(&$lines) { - $this->lines = &$lines; - $this->_currentLineNumber = 1; - $this->_error = 0; - } - - /** - * Read the change type action associated with the entry - * - * @return String the change type action of the entry - */ - function _readChangeType() { - $changeType = 'add'; - $arr = array(); - - # No lines after the dn one - if (count($this->lines) == 0) { - $this->lines[0] = ''; - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('Missing attibutes or changetype attribute for entry'),new LdifEntry($this->dn))); - - # Get the change type of the entry - } elseif (ereg('changetype:[ ]*(delete|add|modrdn|moddn|modify)',$this->lines[0],$arr)) { - $changeType = $arr[1]; - array_shift($this->lines); - $this->_currentLineNumber++; - } - - return $changeType; - } - - /** - * Check if the distinguished name is base 64 encoded - * - * @return boolean true if the dn is base 64 encoded, false otherwise - */ - function _isDnBase64Encoded($dn) { - return ereg('dn::',$dn) ? 1 : 0; - } - - /** - * Return the base64 decoded value of an attribute - * - * @param $attr the attribute to be decoded - * @return String base64 decoded value of an attribute - */ - function _getBase64DecodedValue($attr) { - return base64_decode(trim($attr)); - } - - /** - * Fetch the dn value from a line of the ldif file - * - * @param String $currentDnLine line with a distinguished name - * @return the value of the distinguished name - */ - function _getDnValue() { - $currentDnLine = $this->lines[0]; - if ($this->_isDNBase64Encoded($currentDnLine)) - $currentDnValue = $this->_getBase64DecodedValue(substr($currentDnLine,4,strlen($currentDnLine)-1)); - else - $currentDnValue = substr($currentDnLine,3,strlen($currentDnLine)-1); - - # switch to the next line - array_shift($this->lines); - $this->_currentLineNumber++; - - return trim($currentDnValue); - } - - /** - * Check if the dn line is valid - * - * @return boolean true if the dn is valid, false otherwise. - */ - function isValidDn() { - return ereg('^dn:',$this->lines[0]) ? 1 : 0; - } - - /** - * Return the entry read from the ldif lines - * - * @return LdifEntry the entry - */ - function getEntry() { - # the dn is not valid, throw the exception and return the entry with the non valid dn - if (! $this->isValidDn()) { - $dn = $this->lines[0]; - $changeType = $this->_readChangeType(); - - # For the moment, overwrite the exception - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('A valid dn line is required.'),new LdifEntry($this->dn))); - - return new LdifEntry($dn,$changeType); - } - - $dn = $this->_getDnValue(); - $changeType = $this->_readChangeType(); - $this->entry = new LdifEntry($dn,$changeType); - - if ($changeType == 'add') { - $this->_getAddAttributes(); - - } elseif ($changeType == 'delete') { - # Do nothing - - } elseif ($changeType == 'modrdn' || $changeType == 'moddn') { - $this->_getModrdnAttributes(); - - } elseif ($changeType == 'modify') { - $this->_getModifyAttributes(); - } - - return $this->entry; - } - - /** - * Checked if the parsing of the entry has raised some exception - * - * @return bool true if the reading of the entry raised some exceptions, else otherwise. - */ - function hasRaisedException() { - return $this->_error; - } - - /** - * Set the exception handler for the entry reader - * - * @param Ldap_ldifEntryReaderException the exception handler associate - * with the parsing error. - */ - function setLdifEntryReaderException($ldifEntryReaderException) { - $this->_error=1; - $this->_ldifEntryReaderException= $ldifEntryReaderException; - } - - /** - * Return the exception handler of the entry Reader - * - * @return Ldap_LdifEntryReaderException the exception associate with - * the exception wich occur during parsing the file. - */ - function getLdifEntryReaderException() { - return $this->_ldifEntryReaderException; - } - - /** - * Method to retrieve the attribute value of a ldif line, - * and get the base 64 decoded value if it is encoded - */ - function _getAttributeValue($attributeValuePart) { - $attribute_value = ''; - - if (substr($attributeValuePart,0,1) == ':') { - $attribute_value = $this->_getBase64DecodedValue(trim(substr($attributeValuePart,1))); - - } elseif (substr($attributeValuePart,0,1) == '<') { - /* we need to handle the case for the scheme "file://" as it - doesn't seem to be supported by fopen */ - - $file_path_with_scheme = trim(substr($attributeValuePart,1)); - if (ereg('^file://',$file_path_with_scheme)) { - - $file_path = substr(trim($file_path_with_scheme),7); - if ($handle = @fopen($file_path,'rb')) { - if (! $attribute_value = @fread($handle,filesize($file_path))) { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('Unable to read file'),$this->entry)); - } - @fclose($handle); - - } else { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('Unable to open file'),$this->entry)); - } - - } else { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('The url attribute value should begin with file:///'),$this->entry)); - } - - # It's a string - } else { - $attribute_value = $attributeValuePart; - } - - return trim($attribute_value); - } - - /** - * Build the attributes array when the change type is add. - */ - function _getAddAttributes() { - if (count($this->lines) == 0) { - $this->lines[0] = ''; - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('Missing attributes for the entry'),$this->entry)); - } - - while (count($this->lines)!=0 &&$this->_error!=1) { - $currentLine = &$this->lines[0]; - - if (ereg(':',$currentLine)) { - # get the position of the character ":" - $pos = strpos($currentLine,':'); - - # get the description of the attribute - $attributeDescription = substr($currentLine,0, $pos); - - # get the value part of the attribute - $attribute_value_part = trim(substr($currentLine,$pos+1,strlen($currentLine))); - $attribute_value = $this->_getAttributeValue($attribute_value_part); - $this->entry->attributes[$attributeDescription][] = trim($attribute_value); - array_shift($this->lines); - $this->_currentLineNumber++; - - } else { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('Attribute not well formed'),$this->entry)); - - //jetter l'exception - } - } - } - - /** - * Build the attributes array for the entry when the change type is modify - */ - function _getModifyAttributes() { - if (count($this->lines)==0) { - $this->lines[0] = ''; - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('Missing attributes for the entry'),$this->entry)); - } - - $numberModification = 0; - - # while the array is not empty - while (count($this->lines) != 0 && $this->_error != 1) { - $new_entry_mod = 0; - - # get the current line with the action - $currentLine = &$this->lines[0]; - $attribute= explode(':',$currentLine); - - if (count($attribute) == 2) { - $action_attribute = trim($attribute[0]); - $action_attribute_value = trim($attribute[1]); - - if ($action_attribute != 'add' && $action_attribute != 'delete' && $action_attribute != 'replace') { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('The attribute name should be add, delete or replace'),$this->entry)); - } - - # put the action attribute in the array - $this->entry->attributes[$numberModification] = array(); - $this->entry->attributes[$numberModification][$action_attribute] = - $this->_getAttributeValue($action_attribute_value); - $this->entry->attributes[$numberModification][$action_attribute_value] = array(); - - # fetching the attribute for the following line - array_shift($this->lines); - $currentLine = &$this->lines[0]; - $this->_currentLineNumber++; - - while (trim($currentLine)!= '-' && $this->_error != 1 && count($this->lines)!=0) { - # if there is a valid line - if (ereg(':',$currentLine)) { - # get the position of the character ":" - $pos = strpos($currentLine,':'); - - # get the name of the attribute to modify - $attribute_name = substr($currentLine,0,$pos); - - # check that it correspond to the one specified before - if ($attribute_name == $action_attribute_value) { - # get the value part of the attribute - $attribute_value_part = trim(substr($currentLine,$pos+1,strlen($currentLine))); - $attribute_value = $this->_getAttributeValue($attribute_value_part); - $this->entry->attributes[$numberModification][$attribute_name][] = $attribute_value; - $this->_currentLineNumber++; - array_shift($this->lines); - - if (count($this->lines) != 0) - $currentLine = &$this->lines[0]; - - } else { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - sprintf(_('The attribute to modify doesnt match the one specified by the %s attribute.'),$action_attribute), - $this->entry)); - } - - } else { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('Attribute is not valid'),$this->entry)); - } - } # end inner while - - # we get a "-" charachter, we remove it from the array - if ($currentLine == '-') { - array_shift($this->lines); - $this->_currentLineNumber++; - } - - $numberModification++; - } - } - } - - /** - * Build the attributes for the entry when the change type is modrdn - */ - function _getModrdnAttributes() { - $attrs = array(); - $numLines = count($this->lines); - - if ($numLines != 2 && $numLines !=3) { - if ($numLines==0) - $this->lines[0] = ''; - - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('The entry is not valid'),$this->entry)); - - } else { - $currentLine = $this->lines[0]; - - # first we need to check if there is an new rdn specified - if (ereg('^newrdn:(:?)',$currentLine)) { - $attributeValue = $this->_getAttributeValue(trim(substr($currentLine,7))); - $attrs['newrdn']=$attributeValue; - - # /switch to the deleteoldrdn attribute - array_shift($this->lines); - $this->_currentLineNumber++; - $arr=array(); - - if(ereg('^deleteoldrdn:[ ]*(0|1)',$this->lines[0],$arr)) { - $attrs['deleteoldrdn'] = $arr[1]; - - # switch to the possible new superior attribute - if ($numLines>2) { - array_shift($this->lines); - $this->_currentLineNumber++; - $currentLine = $this->lines[0]; - - # then the possible new superior attribute - if(ereg('^newsuperior:',$currentLine)) { - $attrs['newsuperior'] = $this->_getAttributeValue(trim(substr($currentLine,12))); - - } else { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('The attribute name should be newsuperior'),$this->entry)); - } - - } else { - # As the first character is not ,,we "can write it this way for teh moment" - if ($pos = strpos($this->entry->dn,',')) { - $attrs['newsuperior'] = substr($this->entry->dn,$pos+1); - - } else { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('Container is null'),$this->entry)); - } - } - - } else { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('A valid deleteoldrdn attribute should be specified'),$this->entry)); - } - - } else { - $this->setLdifEntryReaderException( - new LdifEntryReaderException($this->_currentLineNumber,$this->lines[0], - _('A valid newrdn attribute should be specified'),$this->entry)); - } - - $this->entry->attributes = $attrs; - } - } -} - -/** - * Exception which can be raised during processing the ldif file - * @package phpLDAPadmin - */ -class LdifReaderException { - public $lineNumber; - public $message; - public $currentLine; - - /** - * Constructor of the exception - * - * @param int $lineNumber the number of the line where the error occured - * @param String currentLine the line wich raised an exception - * @param String the message associated the exception - */ - function LdifReaderException($lineNumber,$currentLine,$message) { - $this->lineNumber = $lineNumber; - $this->currentLine =$currentLine; - $this->message = $message; - } -} - -/** - * Helper base class to read file. - * @package phpLDAPadmin - */ -class Reader { - # The current line number - public $_currentLineNumber; - - # The current line - public $_currentLine; - - # The current entry - public $_currentEntry; - - # Array containing the lines of the current entry - public $_currentLines; - - # Warning message. Only use for the verion number - public $_warningMessage; - - # Warning version number. - public $_warningVersion; - - # Boolean flag for error - public $_error; - - # Continuous mode operation flag - public $continuous_mode; - - /** - * Check if the ldif version is present in the ldif - * - * @return true if a version line was found,false otherwise - */ - function hasVersionNumber() { - $ldifLineFound = 0; - - while (! $this->eof() && ! $ldifLineFound) { - - # fetch the first line - $this->_nextLine(); - - # if it's a ldif comment line or a blank line,leave it and continue - if ($this->_isCommentLine() || $this->_isBlankLine()) { - # Do nothing - - } elseif (ereg('^version',trim($this->_currentLine))) { - $ldifLineFound = 1; - $this->_nextLine(); - - } else { - $this->_warningVersion = 1; - $this->_warningMessage = _('No version found. Assuming 1.'); - $ldifLineFound = 1; - } - } # end while loop - - return $this->_warningVersion; - } - - function getWarningMessage() { - return $this->_warningMessage; - } - - /** - * Check if is the current line is a blank line. - * - * @return bool if it is a blank line,false otherwise. - */ - function _isBlankLine() { - return(trim($this->_currentLine) == '') ? 1 : 0; - } - - /** - * Private constructor of the LDIFReader class. - * Marked as private as we need to instantiate the class - * by using other constructor with parameters - * Use to initialize instance members. - */ - function _LdifReader() { - $this->_error = 0; - $this->_warning = 0; - $this->_currentLineNumber = 0; - $this->_currentLines = array(); - $this->_warningMessage = ''; - $this->_warningVersion = ''; - $this->ldifEntryReader = new LdifEntryReader(); - $this->_currentEntry = new LdifEntry(); - } - - /** - * Returns the lines that generated the Ldif Entry. - * - * @return String[] The lines from the entry. - */ - function getCurrentLines() { - return $this->_currentLines; - } - - /** - * Check if it's a ldif comment line. - * - * @return bool true if it's a comment line,false otherwise - */ - function _isCommentLine() { - return substr(trim($this->_currentLine),0,1) == '#' ? 1 : 0; - } - - /** - * Check if the current line is a line containing the distinguished - * name of an entry. - * - * @return bool true if the line contains a dn line, false otherwise. - */ - function _isDnLine() { - return ereg('^dn:',$this->_currentLine) ? 1 : 0; - } - - /** - * Return the current entry as an object - * - * @return Ldap_Ldif_entry the current ldif entry - */ - function fetchEntryObject() { - return $this->_currentEntry; - } - - /** - * Return the current entry as an array - * - */ - function fetchEntryArray() {} - - /** - * Return the entry as it is. - * - * @return String[] The lines from the entry. - */ - function fetchEntryRaw() { - return getCurrentLines(); - } - - /** - * Get the lines of the next entry - * - * @return String[] the lines (unfolded) of the next entry - */ - function nextLines() { - $endEntryFound = 0; - # Free the array (instance member) - unset($this->_currentLines); - - # Reset the error state - $this->_error = 0; - - if ($this->_hasMoreEntries() && !$this->eof()) { - # the first line is the dn one - $this->_currentLines[0]= trim($this->_currentLine); - - $count=0; - - # while we end on a blank line, fetch the attribute lines - while (!$this->eof() && !$endEntryFound) { - # fetch the next line - $this->_nextLine(); - - /* If the next line begin with a space, we append it to the current row - else we push it into the array (unwrap)*/ - - if (substr($this->_currentLine,0,1) == ' ') { - $this->_currentLines[$count] .= trim($this->_currentLine); - - } elseif (substr($this->_currentLine,0,1) == '#') { - # Do nothing - - } elseif (trim($this->_currentLine) != '') { - $this->_currentLines[++$count] = trim($this->_currentLine); - - } else { - $endEntryFound=1; - } - } # end while - - # return the ldif entry array - return $this->_currentLines; - - } else { - return false; - } - } - - /** - * Private method to check if there is more entries in the file - * - * @return boolean true if an entry was found, false otherwise. - */ - function _hasMoreEntries() { - $entry_found = 0; - - while (!$this->eof() && !$entry_found) { - # if it's a comment or blank line,switch to the next line - if ($this->_isCommentLine() || $this->_isBlankLine()) { - # Do nothing - $this->_nextLine(); - - } else { - $this->_currentDnLine = $this->_currentLine; - $this->dnLineNumber = $this->_currentLineNumber; - $entry_found = 1; - } - } - return $entry_found; - } - - /** - * Associate the ldif reader with a exception which occurs during - * proceesing the file. - * Easier to do exception if we had to switch to php5 - * - * @param Ldap_LdifReaderException $ldifReaderException - */ - function setLdapLdifReaderException($ldifReaderException) { - $this->_ldifReaderException = $ldifReaderException; - - if (!$this->continuous_mode) - $this->done(); - - $this->_error = 1; - } - - /** - * Return the exception raised during processing the file - * - * @return Ldap_ldifReaderException - */ - function getLdapLdifReaderException() { - return $this->_ldifReaderException; - } - - /** - * Helper method which return the value - * of the instance member $_error - * - * @return true if an error was encountered, false otherwise - */ - function _ldifHasError() { - return $this->_error; - } - - function hasRaisedException() { - return $this->_error; - } - - /** - * Return a ldif entry object - * - * @return LdifEntry the entry object buid from the lines of the ldif file - */ - function readEntry() { - if ($lines = $this->nextLines()) { - $this->ldifEntryReader->readLines($lines); - - # fetch entry - $entry = $this->ldifEntryReader->getEntry(); - $this->_currentEntry = $entry; - - # if any exception has raised, catch it and throw it to the main reader - if ($this->ldifEntryReader->hasRaisedException()) { - $exception = $this->ldifEntryReader->getLdifEntryReaderException(); - $faultyLineNumber = $this->dnLineNumber + $exception->lineNumber - 1; - $this->setLdapLdifReaderException( - new LdifReaderException($faultyLineNumber,$exception->currentLine,$exception->message)); - - if (! $this->continuous_mode) - return 0; - } - return $entry; - - } else - return false; - } -} - -/** - * Helper base class to read file. - * @package phpLDAPadmin - */ -class FileReader extends Reader { - # The file pointer - public $_fp; - - /** - * Constructor of the FileReader class - * @param $path2File - */ - function FileReader($path2File) { - $this->_fp = fopen($path2File,'r'); - } - - /** - * Returns true if we reached the end of the file. - * - * @return bool true if it's the end of file, false otherwise. - */ - function eof() { - return @feof($this->_fp); - } - - /** - * Helper method to switch to the next line - */ - function _nextLine() { - $this->_currentLineNumber++; - $nextLine = fgets($this->_fp,1024); - $this->_currentLine = $nextLine; - - # Need to check if it is a very long line (not folded line for example) - while (!ereg("\n|\r\n|\r",$nextLine) && !$this->eof()) { - $nextLine = fgets($this->_fp,1024); - $this->_currentLine .= trim($nextLine); - } - } - - /** - * Close the handler - */ - function close() { - return @fclose($this->_fp); - } -} - -/** - * Main parser of the ldif file - * @package phpLDAPadmin - */ -class LdifReader extends FileReader { - /** - * Constructor of the class - * - * @param String $path2File path of the ldif file to read - * @param boolean $continuous_mode 1 if continuous mode operation, 0 otherwise - */ - function LdifReader($path2File,$continuous_mode=0) { - parent::FileReader($path2File); - $this->continuous_mode = $continuous_mode; - $this->_LdifReader(); - } - - /** - * Close the ldif file - * - * @return void - */ - function done() { - if (!$this->_ldifHasError()) - @fclose($this->_fp); - } -} - -class LdifReaderStdIn extends Reader { - /** - * Constructor of the class - * - * @param String $path2File path of the ldif file to read - * @param boolean $continuous_mode 1 if continuous mode operation, 0 otherwise - */ - function LdifReaderStdIn($ldif,$continuous_mode=0) { - $this->_ldif = explode("\n",$ldif); - $this->continuous_mode = $continuous_mode; - $this->_LdifReader(); - } - - /** - * Helper method to switch to the next line - */ - function _nextLine() { - $this->_currentLineNumber++; - $nextLine = array_shift($this->_ldif); - $this->_currentLine = $nextLine; - } - - /** - * Returns true if we reached the end of the file. - * - * @return bool true if it's the end of file, false otherwise. - */ - function eof() { - return count($this->_ldif) > 0 ? 0 : 1; - } - - /** - * Close the ldif - * - * @return void - */ - function done() {} -} - -/** - * Helper class to write entries into the ldap server - * @package phpLDAPadmin - */ -class LdapWriter { - public $ldapserver; - public $_writeError=0; - - /** - * Constructor - */ - function LdapWriter(&$ldapserver) { - $this->ldapserver = &$ldapserver; - } - - /** - * Add a new entry to the ldap server - * - * @param LdifEntry $entry the entry to add - * @return true in case of success, false otherwise - */ - function ldapAdd($entry) { - return $this->ldapserver->add($entry->dn,$entry->attributes); - } - - /** - * Modify an entry - * - * @param LdifEntry $entry the entry to add - * @return true in case of success, false otherwise - */ - function ldapModify($entry) { - $changeType = $entry->getChangeType(); - - switch ($changeType) { - case 'add': - $this->_writeError= $this->ldapAdd($entry); - break; - - case 'delete': - $this->_writeError = $this->ldapserver->delete($entry->dn); - break; - - case 'modrdn': - $atts=$entry->getAttributes(); - $this->_writeError = $this->ldapserver->rename($entry->dn,$atts['newrdn'],$atts['newsuperior'],$atts['deleteoldrdn']); - break; - - case 'moddn': - $atts=$entry->getAttributes(); - $this->_writeError = $this->ldapserver->rename($entry->dn,$atts['newrdn'],$atts['newsuperior'],$atts['deleteoldrdn']); - break; - - case 'modify': - $attributes = $entry->attributes; - $num_attributes = count($attributes); - - for ($i=0;$i<$num_attributes;$i++) { - $action = key($attributes[$i]); - array_shift($attributes[$i]); - switch ($action) { - case 'add': - $this->_writeError = $this->ldapserver->attrModify($entry->dn,$attributes[$i]); - break; - - case 'delete': - $this->_writeError = $this->ldapserver->attrDelete($entry->dn,$attributes[$i]); - break; - - case 'replace': - $this->_writeError = $this->ldapserver->attrReplace($entry->dn,$attributes[$i]); - break; - } - } - } - - return $this->_writeError; - } -} -?> diff --git a/lib/page.php b/lib/page.php index 8a03212..9d92984 100644 --- a/lib/page.php +++ b/lib/page.php @@ -1,11 +1,19 @@ _app['title'] = 'phpLDAPadmin'; + $this->_app['title'] = app_name(); # Default Values for configurable items. $this->_default['stylecss'] = CSSDIR.'style.css'; $this->_default['logo'] = IMGDIR.'logo-small.png'; - $this->_default['sysmsg']['error'] = IMGDIR.'warning.png'; - $this->_default['sysmsg']['warn'] = IMGDIR.'notice.png'; - $this->_default['sysmsg']['info'] = IMGDIR.'light-big.png'; + $this->_default['sysmsg']['error'] = IMGDIR.'error-big.png'; + $this->_default['sysmsg']['warn'] = IMGDIR.'warn-big.png'; + $this->_default['sysmsg']['info'] = IMGDIR.'info-big.png'; # Capture any output so far (in case we send some headers below) - there shouldnt be any output anyway. $preOutput = ''; @@ -53,9 +61,9 @@ class page { } if (isset($_SESSION[APPCONFIG]) - && $_SESSION[APPCONFIG]->GetValue('appearance','compress') + && $_SESSION[APPCONFIG]->getValue('appearance','compress') && ini_get('zlib.output_compression')) - $this->setsysmsg(array('title'=>_('Warning'),'body'=>_('WARNING: You cannot have PHP compression and phpLDAPadmin compression enabled at the same time. Please unset zlib.output_compression or set $config->custom->appearance[\'compress\']=false'),'type'=>'warn')); + $this->setsysmsg(array('title'=>_('Warning'),'body'=>_('WARNING: You cannot have PHP compression and application compression enabled at the same time. Please unset zlib.output_compression or set $config->custom->appearance[\'compress\']=false'),'type'=>'warn')); # Turn back on output buffering. ob_start(); @@ -70,12 +78,12 @@ class page { $this->_app['logo'] = $this->_default['logo']; - if (! is_null($server_id)) - $this->_app['urlcss'] = sprintf('%s%s',CSSDIR,$_SESSION[APPCONFIG]->GetValue('appearance','stylesheet')); + if (! is_null($index)) + $this->_app['urlcss'] = sprintf('%s%s',CSSDIR,$_SESSION[APPCONFIG]->getValue('appearance','stylesheet')); else $this->_app['urlcss'] = sprintf('%s%s',CSSDIR,'style.css'); - $this->server_id = $server_id; + $this->index = $index; } /* Add to the HTML Header */ @@ -97,9 +105,9 @@ class page { if (isset($_SESSION[APPCONFIG])) printf('%s (%s) - %s', - $this->_app['title'],pla_version(),$_SESSION[APPCONFIG]->GetValue('appearance','page_title')); + $this->_app['title'],app_version(),$_SESSION[APPCONFIG]->getValue('appearance','page_title')); else - printf('%s - %s',$this->_app['title'],pla_version()); + printf('%s - %s',$this->_app['title'],app_version()); # Style sheet. printf('',$this->_app['urlcss']); @@ -131,37 +139,28 @@ class page { debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__); if (isset($_SESSION[APPCONFIG])) - $pagetitle = $_SESSION[APPCONFIG]->GetValue('appearance','page_title') ? ' - '.$_SESSION[APPCONFIG]->GetValue('appearance','page_title') : ''; + $pagetitle = $_SESSION[APPCONFIG]->getValue('appearance','page_title') ? ' - '.$_SESSION[APPCONFIG]->getValue('appearance','page_title') : ''; else $pagetitle = ''; - echo ''; + echo ''; - if (! isset($this->server_id) || is_null($this->server_id)) - printf('%s',' '); - else - printf('%s %s',$this->_app['title'],$pagetitle); - - echo ''; - } - - private function control_print() { - if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) - debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__); - - echo ''; - echo ''; + echo ''; + echo ''; + echo "\n"; + } - if (isset($this->_app['logo'])) - printf('',$this->_app['logo']); - else - echo ''; + private function control_print() { + if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) + debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__); + + echo '
'; + printf('',get_href('sf'),$this->_app['logo']); + echo '',$cmddetails['link']); + if (! $empty) + echo ' '; + + printf('%s',$cmddetails['link'],$cmddetails['image']); $empty = false; } @@ -169,12 +168,42 @@ class page { } if ($empty) - echo ''; + echo ' '; + echo ''; + echo '
'; $empty = true; - if (function_exists('cmd_control_pane')) - foreach (cmd_control_pane() as $cmd => $cmddetails) { - $cmds = preg_split('/:/',$cmd); + foreach (cmd_control_pane('top') as $cmd => $cmddetails) { + $cmds = explode(':',$cmd); if (defined('APPCONFIG') && isset($_SESSION[APPCONFIG]) && method_exists($_SESSION[APPCONFIG],'isCommandAvailable')) - if ($_SESSION[APPCONFIG]->isCommandAvailable($cmds)) { + if ($_SESSION[APPCONFIG]->isCommandAvailable('all',$cmds)) { if ((isset($cmddetails['enable']) && trim($cmddetails['enable'])) || ! isset($cmddetails['enable'])) { - printf('%s
  
'; + echo ''; + if ($empty) + echo ''; echo ''; echo '
'; + + $empty = true; + if (function_exists('cmd_control_pane')) + foreach (cmd_control_pane('main') as $cmd => $cmddetails) { + $cmds = explode(':',$cmd); + + if (defined('APPCONFIG') && isset($_SESSION[APPCONFIG]) && method_exists($_SESSION[APPCONFIG],'isCommandAvailable')) + if ($_SESSION[APPCONFIG]->isCommandAvailable('all',$cmds)) { + if ((isset($cmddetails['enable']) && trim($cmddetails['enable'])) || ! isset($cmddetails['enable'])) { + if (! $empty) + echo ' | '; + + printf('%s',$cmddetails['link'], + $_SESSION[APPCONFIG]->getValue('appearance','control_icons') ? $cmddetails['image'] : $cmddetails['title']); + + $empty = false; + } + } + } + + echo ' 
'; @@ -187,29 +216,26 @@ class page { if (! isset($_SESSION[APPCONFIG])) return; - $server_id = is_null($this->server_id) ? min($_SESSION[APPCONFIG]->ldapservers->GetServerList()) : $this->server_id; + if (is_null($this->index)) + $this->index = min(array_keys($_SESSION[APPCONFIG]->getServerList())); - echo ''; - if (count(server_info_list(true)) > 1) { + if (count($_SESSION[APPCONFIG]->getServerList()) > 1) { echo '
'; echo '
'; - printf('%s%s
%s',_('Server Select'),_(':'), - server_select_list($server_id,false,'server_id',sprintf("onchange=\"tree_unhide('server_id',%s)\"",$server_id))); + printf('%s:
%s',_('Server Select'), + server_select_list($this->index,false,'index',true,sprintf("onchange=\"tree_unhide('index',%s)\"",$this->index))); echo '
'; echo '
'; echo "\n\n"; } - foreach ($_SESSION[APPCONFIG]->ldapservers->GetServerList() as $server_id) { - printf('
',$server_id,($server_id == $this->server_id) ? 'block': 'none'); - $ldapserver = $_SESSION[APPCONFIG]->ldapservers->Instance($server_id); - - $tree = Tree::getInstance($ldapserver->server_id); - + foreach ($_SESSION[APPCONFIG]->getServerList() as $index => $server) { + printf('
',$server->getIndex(),($server->getIndex() == $this->index) ? 'block' : 'none'); + $tree = Tree::getInstance($server->getIndex()); $tree->draw(); echo '
'; + echo "\n\n"; } - echo ''; } public function block_add($side,$object) { @@ -270,15 +296,9 @@ class page { } } - public function body($compress=false) { + private function body($raw=false) { if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) - debug_log('Entered with (%s)',129,__FILE__,__LINE__,__METHOD__,$compress); - - # If the body is called via AJAX, and compression is enable, we need to compress the output - if ($compress && ob_get_level()) { - ob_end_clean(); - ob_start(); - } + debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__); # Add the Session System Messages if (isset($_SESSION['sysmsg']) && is_array($_SESSION['sysmsg'])) { @@ -295,9 +315,45 @@ class page { echo "\n"; } - if (isset($this->_block['body'])) { + if (isset($this->_block['body'])) foreach ($this->_block['body'] as $object) - echo $object->draw('body'); + echo $object->draw('body',$raw); + } + + private function footer_print() { + if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) + debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__); + + printf('%s
%s
%s', + isCompress() ? '[C]' : ' ', + app_version(), + sprintf('SourceForge.net Logo',get_href('sf'),get_href('logo'))); + } + + /** + * Only show a particular page frame - used by an AJAX call + */ + public function show($frame,$compress=false,$raw=false) { + if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) + debug_log('Entered with (%s)',129,__FILE__,__LINE__,__METHOD__,$compress); + + # If the body is called via AJAX, and compression is enable, we need to compress the output + if ($compress && ob_get_level() && isCompress()) { + ob_end_clean(); + ob_start(); + } + + switch ($frame) { + case 'BODY': + $this->body($raw); + break; + + case 'TREE': + $this->tree(); + break; + + default: + error(sprintf('show called with unknown frame [%s]',$frame),'error','index.php'); } if ($compress && ob_get_level() && isCompress()) { @@ -312,29 +368,22 @@ class page { } } - private function footer_print() { - if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) - debug_log('Entered with ()',129,__FILE__,__LINE__,__METHOD__); - - printf('%s%s', - isCompress() ? '[C]' : ' ', - pla_version()); - } - public function display($filter=array()) { if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) debug_log('Entered with [%s]',129,__FILE__,__LINE__,__METHOD__,$filter); # Control what is displayed. $display = array( - 'tree'=>true + 'HEAD'=>true, + 'CONTROL'=>true, + 'TREE'=>true, + 'FOOT'=>true ); $display = array_merge($display,$filter); # HTML Header $this->pageheader_print(); - echo "\n"; # Start of body # Page Header @@ -342,26 +391,32 @@ class page { echo "\n"; echo ''; - $this->head_print(); - echo "\n"; + if ($display['HEAD']) + $this->head_print(); # Control Line - echo ''; - echo "\n"; + if ($display['CONTROL']) { + echo ''; + echo "\n"; + } # Left Block echo ''; - if ($display['tree']) { -# $this->block_print('tree'); + if ($display['TREE']) { + echo ''; } echo '
'; - $this->control_print(); - echo '
'; + echo '
'; + $this->control_print(); + echo '
'; + printf('',_('Hide/Unhide the tree'),IMGDIR); + echo '
'; $this->tree(); - echo "\n"; + echo '
'; + echo '
'; - echo '
'; + echo '
'; echo "\n"; $this->body(); echo '
'; @@ -370,7 +425,8 @@ class page { echo "\n"; # Page Footer - $this->footer_print(); + if ($display['FOOT']) + $this->footer_print(); # Finish HTML echo '
'; @@ -408,6 +464,12 @@ class page { } } +/** + * This class draws a block. + * + * @package phpLDAPadmin + * @subpackage Page + */ class block { private $title; private $body; @@ -428,19 +490,26 @@ class block { $this->foot = $html; } - public function draw($side) { + public function draw($side,$raw=false) { $output = ''; - $output .= sprintf('',$side); - if (isset($this->body['title'])) - $output .= sprintf('',$this->title); + if ($raw) + $output .= $this->body; - if (isset($this->body['body'])) - $output .= sprintf('',$this->body); + else { + $output .= sprintf('
%s
%s
',$side); - if (isset($this->body['footer'])) - $output .= sprintf('',$this->foot); - $output .= '
%s
'; + if (isset($this->title)) + $output .= sprintf('%s',$this->title); + + if (isset($this->body)) + $output .= sprintf('%s',$this->body); + + if (isset($this->footer)) + $output .= sprintf('%s',$this->foot); + + $output .= ''; + } return $output; } diff --git a/lib/query_functions.php b/lib/query_functions.php new file mode 100644 index 0000000..04c89e3 --- /dev/null +++ b/lib/query_functions.php @@ -0,0 +1,24 @@ + diff --git a/lib/schema_functions.php b/lib/schema_functions.php index 1518926..dab5e35 100644 --- a/lib/schema_functions.php +++ b/lib/schema_functions.php @@ -1,11 +1,11 @@ oid = null; - $this->description = null; + public function setOID($oid) { + $this->oid = $oid; } - function setOID($new_oid) { - $this->oid = $new_oid; + public function setDescription($desc) { + $this->description = $desc; } - function setDescription($new_desc) { - $this->description = $new_desc; - } - - function getOID() { + public function getOID() { return $this->oid; } - function getDescription() { + public function getDescription() { return $this->description; } + + /** + * Gets whether this objectClass is flagged as obsolete by the LDAP server. + */ + public function getIsObsolete() { + return $this->is_obsolete; + } + + /** + * Return the objects name. + * + * param boolean $lower Return the name in lower case (default) + * @return string The name + */ + public function getName($lower=true) { + return $lower ? strtolower($this->name) : $this->name; + } } /** * Represents an LDAP objectClass + * * @package phpLDAPadmin + * @subpackage Schema */ class ObjectClass extends SchemaItem { - # This objectClass' name, ie "inetOrgPerson" - var $name; + # The server ID that this objectclass belongs to. + private $server_id = null; # Array of objectClass names from which this objectClass inherits - var $sup_classes; + private $sup_classes = array(); # One of STRUCTURAL, ABSTRACT, or AUXILIARY - var $type; + private $type; # Arrays of attribute names that this objectClass requires - var $must_attrs; + private $must_attrs = array(); # Arrays of attribute names that this objectClass allows, but does not require - var $may_attrs; + private $may_attrs = array(); # Arrays of attribute names that this objectClass has been forced to MAY attrs, due to configuration - var $force_may; - # Boolean value indicating whether this objectClass is obsolete - var $is_obsolete; + private $force_may = array(); # Array of objectClasses which inherit from this one (must be set at runtime explicitly by the caller) - var $children_objectclasses; - - # Initialize the class' member variables - function initVars($ldapserver) { - parent::initVars(); - - $this->oid = null; - $this->name = null; - $this->description = null; - $this->sup_classes = array(); - $this->type = $ldapserver->schema_oclass_default; - $this->must_attrs = array(); - $this->force_may = array(); - $this->may_attrs = array(); - $this->is_obsolete = false; - $this->children_objectclasses = array(); - } - - function _parse_list($i,$strings,&$attrs) { - /* - * A list starts with a ( followed by a list of attributes separated by $ terminated by ) - * The first token can therefore be a ( or a (NAME or a (NAME) - * The last token can therefore be a ) or NAME) - * The last token may be terminate by more than one bracket - */ - if (DEBUG_ENABLED) - debug_log('Entered with (%d,%s,%s)',9,__FILE__,__LINE__,__METHOD__,$i,$strings,$attrs); - - $string = $strings[$i]; - if (! preg_match('/^\(/',$string)) { - # A bareword only - can be terminated by a ) if the last item - if (preg_match('/\)+$/',$string)) - $string = preg_replace('/\)+$/','',$string); - - array_push($attrs,$string); - - } elseif (preg_match('/^\(.*\)$/',$string)) { - $string = preg_replace('/^\(/','',$string); - $string = preg_replace('/\)+$/','',$string); - array_push($attrs,$string); - - } else { - # Handle the opening cases first - if ($string == '(') { - $i++; - - } elseif (preg_match('/^\(./',$string)) { - $string = preg_replace('/^\(/','',$string); - array_push ($attrs,$string); - $i++; - } - - // Token is either a name, a $ or a ')' - // NAME can be terminated by one or more ')' - while (! preg_match('/\)+$/',$strings[$i])) { - $string = $strings[$i]; - if ($string == '$') { - $i++; - continue; - } - - if (preg_match('/\)$/',$string)) { - $string = preg_replace('/\)+$/','',$string); - } else { - $i++; - } - - array_push ($attrs,$string); - } - } - sort($attrs); - - if (DEBUG_ENABLED) - debug_log('Returning (%d,[%s],[%s])',9,__FILE__,__LINE__,__METHOD__,$i,$strings,$attrs); - return $i; - } + private $children_objectclasses = array(); + # The objectclass hierarchy + private $hierarchy = array(); /** * Creates a new ObjectClass object given a raw LDAP objectClass string. - * @todo: Unfortunately, some schemas are not well defined - eg: dNSDomain. Where the schema definition is not case consistent with the attribute definitions. This causes us some problems, which we need to resolve. */ - function ObjectClass($raw_ldap_schema_string,$ldapserver) { + public function __construct($class,$server) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_ldap_schema_string); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$class); + + $this->server_id = $server->getIndex(); + $this->type = $server->getValue('server','schema_oclass_default'); - $this->initVars($ldapserver); - $class = $raw_ldap_schema_string; $strings = preg_split('/[\s,]+/',$class,-1,PREG_SPLIT_DELIM_CAPTURE); - $str_count = count($strings); for ($i=0; $i < $str_count; $i++) { @@ -170,7 +112,7 @@ class ObjectClass extends SchemaItem { if (strlen($this->name) == 0) $this->name = $strings[$i]; else - $this->name .= ' ' . $strings[$i]; + $this->name .= ' '.$strings[$i]; } while (! preg_match('/\'$/s',$strings[$i])); @@ -181,7 +123,7 @@ class ObjectClass extends SchemaItem { if (strlen($this->name) == 0) $this->name = $strings[$i]; else - $this->name .= ' ' . $strings[$i]; + $this->name .= ' '.$strings[$i]; } while (! preg_match('/\'$/s',$strings[$i])); @@ -201,9 +143,9 @@ class ObjectClass extends SchemaItem { do { $i++; if (strlen($this->description) == 0) - $this->description=$this->description . $strings[$i]; + $this->description=$this->description.$strings[$i]; else - $this->description=$this->description . ' ' . $strings[$i]; + $this->description=$this->description.' '.$strings[$i]; } while (! preg_match('/\'$/s',$strings[$i])); @@ -261,15 +203,15 @@ class ObjectClass extends SchemaItem { case 'MUST': $attrs = array(); - $i = $this->_parse_list(++$i,$strings,$attrs); + $i = $this->parseList(++$i,$strings,$attrs); if (DEBUG_ENABLED) - debug_log('_parse_list returned %d (%s)',8,__FILE__,__LINE__,__METHOD__,$i,$attrs); + debug_log('parseList returned %d (%s)',8,__FILE__,__LINE__,__METHOD__,$i,$attrs); foreach ($attrs as $string) { $attr = new ObjectClass_ObjectClassAttribute($string,$this->name); - if ($ldapserver->isForceMay($attr->name)) { + if ($server->isForceMay($attr->getName())) { array_push($this->force_may,$attr); array_push($this->may_attrs,$attr); @@ -284,14 +226,14 @@ class ObjectClass extends SchemaItem { case 'MAY': $attrs = array(); - $i = $this->_parse_list(++$i,$strings,$attrs); + $i = $this->parseList(++$i,$strings,$attrs); if (DEBUG_ENABLED) - debug_log('_parse_list returned %d (%s)',8,__FILE__,__LINE__,__METHOD__,$i,$attrs); + debug_log('parseList returned %d (%s)',8,__FILE__,__LINE__,__METHOD__,$i,$attrs); foreach ($attrs as $string) { $attr = new ObjectClass_ObjectClassAttribute($string,$this->name); - array_push ($this->may_attrs,$attr); + array_push($this->may_attrs,$attr); } if (DEBUG_ENABLED) @@ -300,10 +242,10 @@ class ObjectClass extends SchemaItem { default: if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1) { - $this->oid = $strings[$i]; + $this->setOID($strings[$i]); if (DEBUG_ENABLED) - debug_log('Case default returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->oid); + debug_log('Case default returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->getOID()); } break; } @@ -317,11 +259,96 @@ class ObjectClass extends SchemaItem { $this->name,$this->description,$this->must_attrs,$this->may_attrs,$this->force_may); } + /** + * Parse an LDAP schema list + */ + private function parseList($i,$strings,&$attrs) { + /* + * A list starts with a ( followed by a list of attributes separated by $ terminated by ) + * The first token can therefore be a ( or a (NAME or a (NAME) + * The last token can therefore be a ) or NAME) + * The last token may be terminate by more than one bracket + */ + if (DEBUG_ENABLED) + debug_log('Entered with (%d,%s,%s)',9,__FILE__,__LINE__,__METHOD__,$i,$strings,$attrs); + + $string = $strings[$i]; + if (! preg_match('/^\(/',$string)) { + # A bareword only - can be terminated by a ) if the last item + if (preg_match('/\)+$/',$string)) + $string = preg_replace('/\)+$/','',$string); + + array_push($attrs,$string); + + } elseif (preg_match('/^\(.*\)$/',$string)) { + $string = preg_replace('/^\(/','',$string); + $string = preg_replace('/\)+$/','',$string); + array_push($attrs,$string); + + } else { + # Handle the opening cases first + if ($string == '(') { + $i++; + + } elseif (preg_match('/^\(./',$string)) { + $string = preg_replace('/^\(/','',$string); + array_push($attrs,$string); + $i++; + } + + # Token is either a name, a $ or a ')' + # NAME can be terminated by one or more ')' + while (! preg_match('/\)+$/',$strings[$i])) { + $string = $strings[$i]; + if ($string == '$') { + $i++; + continue; + } + + if (preg_match('/\)$/',$string)) + $string = preg_replace('/\)+$/','',$string); + else + $i++; + + array_push($attrs,$string); + } + } + + sort($attrs); + + if (DEBUG_ENABLED) + debug_log('Returning (%d,[%s],[%s])',9,__FILE__,__LINE__,__METHOD__,$i,$strings,$attrs); + + return $i; + } + + /** + * This will return all our parent ObjectClass Objects + */ + public function getParents() { + if ((count($this->sup_classes) == 1) && ($this->sup_classes[0] == 'top')) + return array(); + + $server = $_SESSION[APPCONFIG]->getServer($this->server_id); + $return = array(); + + foreach ($this->sup_classes as $object_class) { + array_push($return,$object_class); + + $oc = $server->getSchemaObjectClass($object_class); + + if ($oc) + $return = array_merge($return,$oc->getParents()); + } + + return $return; + } + /** * Gets an array of AttributeType objects that entries of this ObjectClass must define. * This differs from getMustAttrNames in that it returns an array of AttributeType objects * - * @param array $oclasses An array of ObjectClass objects to use when traversing + * @param array $parents An array of ObjectClass objects to use when traversing * the inheritance tree. This presents some what of a bootstrapping problem * as we must fetch all objectClasses to determine through inheritance which * attributes this objectClass requires. @@ -331,38 +358,38 @@ class ObjectClass extends SchemaItem { * @see getMayAttrs * @see getMayAttrNames */ - function getMustAttrs($oclasses=null) { + public function getMustAttrs($parents=false) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$oclasses); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$parents); - $all_must_attrs = array(); - $all_must_attrs = $this->must_attrs; - foreach ($this->sup_classes as $sup_class) { - if (! is_null($oclasses) && $sup_class != 'top' - && isset($oclasses[strtolower($sup_class)])) { - $sup_class = $oclasses[ strtolower($sup_class)]; - $sup_class_must_attrs = $sup_class->getMustAttrs($oclasses); - $all_must_attrs = array_merge($sup_class_must_attrs,$all_must_attrs); - } + if (! $parents) + return $this->must_attrs; + + $server = $_SESSION[APPCONFIG]->getServer($this->server_id); + $attrs = $this->must_attrs; + + foreach ($this->getParents() as $sup_class) { + $sc = $server->getSchemaObjectClass($sup_class); + $attrs = array_merge($attrs,$sc->getMustAttrs()); } - masort($all_must_attrs,'name,source',1); + masort($attrs,'name,source'); # Remove any duplicates - foreach ($all_must_attrs as $index => $attr) - if (isset($allattr[$attr->name])) - unset($all_must_attrs[$index]); + foreach ($attrs as $index => $attr) + if (isset($allattr[$attr->getName()])) + unset($attrs[$index]); else - $allattr[$attr->name] = 1; + $allattr[$attr->getName()] = 1; - return $all_must_attrs; + return $attrs; } /** * Gets an array of AttributeType objects that entries of this ObjectClass may define. * This differs from getMayAttrNames in that it returns an array of AttributeType objects * - * @param array $oclasses An array of ObjectClass objects to use when traversing + * @param array $parents An array of ObjectClass objects to use when traversing * the inheritance tree. This presents some what of a bootstrapping problem * as we must fetch all objectClasses to determine through inheritance which * attributes this objectClass provides. @@ -373,32 +400,35 @@ class ObjectClass extends SchemaItem { * @see getMayAttrNames * @see AttributeType */ - function getMayAttrs($oclasses=null) { + public function getMayAttrs($parents=false) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$oclasses); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$parents); - $all_may_attrs = array(); - $all_may_attrs = $this->may_attrs; - foreach ($this->sup_classes as $sup_class_name) { - if (! is_null($oclasses) && $sup_class_name != 'top' - && isset($oclasses[strtolower($sup_class_name)])) { + if (! $parents) + return $this->may_attrs; - $sup_class = $oclasses[strtolower($sup_class_name)]; - $sup_class_may_attrs = $sup_class->getMayAttrs($oclasses); - $all_may_attrs = array_merge($sup_class_may_attrs,$all_may_attrs); - } + $server = $_SESSION[APPCONFIG]->getServer($this->server_id); + $attrs = $this->may_attrs; + + foreach ($this->getParents() as $sup_class) { + $sc = $server->getSchemaObjectClass($sup_class); + $attrs = array_merge($attrs,$sc->getMayAttrs()); } - masort($all_may_attrs,'name,source',1); + masort($attrs,'name,source'); # Remove any duplicates - foreach ($all_may_attrs as $index => $attr) + foreach ($attrs as $index => $attr) if (isset($allattr[$attr->name])) - unset($all_may_attrs[$index]); + unset($attrs[$index]); else $allattr[$attr->name] = 1; - return $all_may_attrs; + return $attrs; + } + + public function getForceMayAttrs() { + return $this->force_may; } /** @@ -406,7 +436,7 @@ class ObjectClass extends SchemaItem { * This differs from getMustAttrs in that it returns an array of strings rather than * array of AttributeType objects * - * @param array $oclasses An array of ObjectClass objects to use when traversing + * @param array $parents An array of ObjectClass objects to use when traversing * the inheritance tree. This presents some what of a bootstrapping problem * as we must fetch all objectClasses to determine through inheritance which * attributes this objectClass provides. @@ -416,15 +446,14 @@ class ObjectClass extends SchemaItem { * @see getMayAttrs * @see getMayAttrNames */ - function getMustAttrNames($oclasses=null) { + public function getMustAttrNames($parents=false) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$oclasses); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$parents); - $attrs = $this->getMustAttrs($oclasses); $attr_names = array(); - foreach ($attrs as $attr) - $attr_names[] = $attr->getName(); + foreach ($this->getMustAttrs($parents) as $attr) + array_push($attr_names,$attr->getName()); return $attr_names; } @@ -434,7 +463,7 @@ class ObjectClass extends SchemaItem { * This differs from getMayAttrs in that it returns an array of strings rather than * array of AttributeType objects * - * @param array $oclasses An array of ObjectClass objects to use when traversing + * @param array $parents An array of ObjectClass objects to use when traversing * the inheritance tree. This presents some what of a bootstrapping problem * as we must fetch all objectClasses to determine through inheritance which * attributes this objectClass provides. @@ -444,15 +473,14 @@ class ObjectClass extends SchemaItem { * @see getMayAttrs * @see getMustAttrNames */ - function getMayAttrNames($oclasses=null) { + public function getMayAttrNames($parents=false) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$oclasses); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$parents); - $attrs = $this->getMayAttrs($oclasses); $attr_names = array(); - foreach ($attrs as $attr) - $attr_names[] = $attr->getName(); + foreach ($this->getMayAttrs($parents) as $attr) + array_push($attr_names,$attr->getName()); return $attr_names; } @@ -460,113 +488,120 @@ class ObjectClass extends SchemaItem { /** * Adds an objectClass to the list of objectClasses that inherit * from this objectClass. - * @param String $object_class_name The name of the objectClass to add - * @return bool Returns true on success or false on failure (objectclass already existed for example) + * + * @param String $name The name of the objectClass to add + * @return boolean Returns true on success or false on failure (objectclass already existed for example) */ - function addChildObjectClass($object_class_name) { + public function addChildObjectClass($name) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$object_class_name); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$name); - $object_class_name = trim($object_class_name); - if (! is_array($this->children_objectclasses)) - $this->children_objectclasses = array(); + $name = trim($name); foreach ($this->children_objectclasses as $existing_objectclass) - if (strcasecmp($object_class_name,$existing_objectclass) == 0) + if (strcasecmp($name,$existing_objectclass) == 0) return false; - $this->children_objectclasses[] = $object_class_name; - return true; + array_push($this->children_objectclasses,$name); } /** * Returns the array of objectClass names which inherit from this objectClass. + * * @return Array Names of objectClasses which inherit from this objectClass. */ - function getChildObjectClasses() { + public function getChildObjectClasses() { return $this->children_objectclasses; } - /** - * Gets the name of this objectClass (ie, "inetOrgPerson") - * @return string The name of the objectClass - */ - function getName() { - return $this->name; - } - /** * Gets the objectClass names from which this objectClass inherits. * * @return array An array of objectClass names (strings) */ - function getSupClasses() { + public function getSupClasses() { return $this->sup_classes; } + /** + * Return if this objectClass is related to $oclass + * + * @param array ObjectClasses that this attribute may be related to + */ + public function isRelated($oclass) { + # If I am in the array, we'll just return false + if (in_array_ignore_case($this->name,$oclass)) + return false; + + $server = $_SESSION[APPCONFIG]->getServer($this->server_id); + + foreach ($oclass as $object_class) { + $oc = $server->getSchemaObjectClass($object_class); + + if ($oc->isStructural() && in_array_ignore_case($this->getName(),$oc->getParents())) + return true; + } + + return false; + } + /** * Gets the type of this objectClass: STRUCTURAL, ABSTRACT, or AUXILIARY. */ - function getType() { + public function getType() { return $this->type; } - /** - * Gets whether this objectClass is flagged as obsolete by the LDAP server. - */ - function getIsObsolete() { - return $this->is_obsolete; - } - /** * Adds the specified array of attributes to this objectClass' list of * MUST attributes. The resulting array of must attributes will contain * unique members. * - * @param array $new_must_attrs An array of attribute names (strings) to add. + * @param array $attr An array of attribute names (strings) to add. */ - function addMustAttrs($new_must_attrs) { + private function addMustAttrs($attr) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$new_must_attrs); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$attr); - if (! is_array($new_must_attrs)) + if (! is_array($attr) || ! count($attr)) return; - if (count($new_must_attrs) == 0) - return; - - $this->must_attrs = array_values(array_unique(array_merge($this->must_attrs,$new_must_attrs))); + $this->must_attrs = array_values(array_unique(array_merge($this->must_attrs,$attr))); } /** * Behaves identically to addMustAttrs, but it operates on the MAY * attributes of this objectClass. * - * @param array $new_may_attrs An array of attribute names (strings) to add. + * @param array $attr An array of attribute names (strings) to add. */ - function addMayAttrs($new_may_attrs) { + private function addMayAttrs($attr) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$new_may_attrs); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$attr); - if (! is_array($new_may_attrs)) + if (! is_array($attr) || ! count($attr)) return; - if (count($new_may_attrs) == 0) - return; - - $this->may_attrs = array_values(array_unique(array_merge($this->may_attrs,$new_may_attrs))); + $this->may_attrs = array_values(array_unique(array_merge($this->may_attrs,$attr))); } /** * Determine if an array is listed in the force_may attrs */ - function isForceMay($attr) { + public function isForceMay($attr) { foreach ($this->force_may as $forcemay) if ($forcemay->getName() == $attr) return true; return false; } + + public function isStructural() { + if ($this->type == 'structural') + return true; + else + return false; + } } /** @@ -578,116 +613,87 @@ class ObjectClass extends SchemaItem { * a "source" objectClass, meaning that it keeps track of which objectClass originally * specified it. This class is therefore used by the class ObjectClass to determine * inheritance. + * * @package phpLDAPadmin + * @subpackage Schema */ class ObjectClass_ObjectClassAttribute { - # This Attribute's name - var $name; - - # This Attribute's root - var $source; + # This Attribute's name (needs to be public, as we sort on it with masort). + public $name; + # This Attribute's root (needs to be public, as we sort on it with masort). + public $source; /** * Creates a new ObjectClass_ObjectClassAttribute with specified name and source objectClass. + * * @param string $name the name of the new attribute. - * @param string $source the name of the ObjectClass which - * specifies this attribute. + * @param string $source the name of the ObjectClass which specifies this attribute. */ - function ObjectClass_ObjectClassAttribute($name,$source) { + public function __construct($name,$source) { if (DEBUG_ENABLED) debug_log('Entered with name (%s), source (%s)',9,__FILE__,__LINE__,__METHOD__,$name,$source); + $this->name = $name; $this->source = $source; } # Gets this attribute's name - function getName () { - return $this->name; + public function getName($lower=true) { + return $lower ? strtolower($this->name) : $this->name; } # Gets the name of the ObjectClass which originally specified this attribute. - function getSource () { + public function getSource() { return $this->source; } } /** * Represents an LDAP AttributeType + * * @package phpLDAPadmin + * @subpackage Schema */ class AttributeType extends SchemaItem { - # The name of this attributeType - var $name; - # string: the description - var $is_obsolete; # The attribute from which this attribute inherits (if any) - var $sup_attribute; + private $sup_attribute = null; # The equality rule used - var $equality; + private $equality = null; # The ordering of the attributeType - var $ordering; + private $ordering = null; # Boolean: supports substring matching? - var $sub_str; + private $sub_str = null; # The full syntax string, ie 1.2.3.4{16} - var $syntax; + private $syntax = null; + private $syntax_oid = null; # boolean: is single valued only? - var $is_single_value; + private $is_single_value = false; # boolean: is collective? - var $is_collective; + private $is_collective = false; # boolean: can use modify? - var $is_no_user_modification; + private $is_no_user_modification = false; # The usage string set by the LDAP schema - var $usage; + private $usage = null; # An array of alias attribute names, strings - var $aliases; + private $aliases = array(); # The max number of characters this attribute can be - var $max_length; + private $max_length = null; # A string description of the syntax type (taken from the LDAPSyntaxes) - var $type; + private $type = null; # An array of objectClasses which use this attributeType (must be set by caller) - var $used_in_object_classes; + private $used_in_object_classes = array(); # A list of object class names that require this attribute type. - var $required_by_object_classes; + private $required_by_object_classes = array(); # This attribute has been forced a MAY attribute by the configuration. - var $forced_as_may; - - /** - * Initialize the class' member variables - */ - function initVars() { - parent::initVars(); - - $this->oid = null; - $this->name = null; - $this->description = null; - $this->is_obsolete = false; - $this->sup_attribute = null; - $this->equality = null; - $this->ordering = null; - $this->sub_str = null; - $this->syntax_oid = null; - $this->syntax = null; - $this->max_length = null; - $this->is_single_value= null; - $this->is_collective = false; - $this->is_no_user_modification = false; - $this->usage = null; - $this->aliases = array(); - $this->type = null; - $this->used_in_object_classes = array(); - $this->required_by_object_classes = array(); - $this->forced_as_may = false; - } + private $forced_as_may = false; /** * Creates a new AttributeType object from a raw LDAP AttributeType string. */ - function AttributeType($raw_ldap_attr_string) { + public function __construct($attr) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_ldap_attr_string); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$attr); - $this->initVars(); - $attr = $raw_ldap_attr_string; $strings = preg_split('/[\s,]+/',$attr,-1,PREG_SPLIT_DELIM_CAPTURE); for($i=0; $iname)==0) $this->name = $strings[$i]; else - $this->name .= ' ' . $strings[$i]; + $this->name .= ' '.$strings[$i]; } while (! preg_match("/\'$/s",$strings[$i])); - // this attribute has no aliases + + # This attribute has no aliases $this->aliases = array(); } else { $i++; do { - $i++; + # In case we came here becaues of a (' + if (preg_match('/^\(/',$strings[$i])) + $strings[$i] = preg_replace('/^\(/','',$strings[$i]); + else + $i++; + if (strlen($this->name) == 0) $this->name = $strings[$i]; else - $this->name .= ' ' . $strings[$i]; + $this->name .= ' '.$strings[$i]; } while (! preg_match("/\'$/s",$strings[$i])); - // add alias names for this attribute + # Add alias names for this attribute while ($strings[++$i] != ')') { $alias = $strings[$i]; $alias = preg_replace("/^\'/",'',$alias); $alias = preg_replace("/\'$/",'',$alias); - $this->aliases[] = $alias; + $this->addAlias($alias); } } @@ -737,9 +750,9 @@ class AttributeType extends SchemaItem { do { $i++; if (strlen($this->description)==0) - $this->description=$this->description . $strings[$i]; + $this->description=$this->description.$strings[$i]; else - $this->description=$this->description . ' ' . $strings[$i]; + $this->description=$this->description.' '.$strings[$i]; } while (! preg_match("/\'$/s",$strings[$i])); if (DEBUG_ENABLED) @@ -790,7 +803,7 @@ class AttributeType extends SchemaItem { $this->syntax = $strings[$i]; $this->syntax_oid = preg_replace('/{\d+}$/','',$this->syntax); - // does this SYNTAX string specify a max length (ie, 1.2.3.4{16}) + # Does this SYNTAX string specify a max length (ie, 1.2.3.4{16}) if (preg_match('/{(\d+)}$/',$this->syntax,$this->max_length)) $this->max_length = $this->max_length[1]; else @@ -799,7 +812,7 @@ class AttributeType extends SchemaItem { if ($i < count($strings) - 1 && $strings[$i+1] == '{') { do { $i++; - $this->name .= ' ' . $strings[$i]; + $this->name .= ' '.$strings[$i]; } while ($strings[$i] != '}'); } @@ -838,10 +851,10 @@ class AttributeType extends SchemaItem { default: if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1) { - $this->oid = $strings[$i]; + $this->setOID($strings[$i]); if (DEBUG_ENABLED) - debug_log('Case default returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->oid); + debug_log('Case default returned (%s)',8,__FILE__,__LINE__,__METHOD__,$this->getOID()); } } } @@ -861,36 +874,22 @@ class AttributeType extends SchemaItem { debug_log('Returning ()',9,__FILE__,__LINE__,__METHOD__); } - /** - * Gets this attribute's name - * @return string - */ - function getName() { - return $this->name; - } - - /** - * Gets whether this attribute has been flagged as obsolete by the LDAP server - * @return bool - */ - function getIsObsolete() { - return $this->is_obsolete; - } - /** * Gets this attribute's usage string as defined by the LDAP server + * * @return string */ - function getUsage() { + public function getUsage() { return $this->usage; } /** * Gets this attribute's parent attribute (if any). If this attribute does not * inherit from another attribute, null is returned. + * * @return string */ - function getSupAttribute() { + public function getSupAttribute() { if ($this->sup_attribute) return $this->sup_attribute; else @@ -899,43 +898,48 @@ class AttributeType extends SchemaItem { /** * Gets this attribute's equality string + * * @return string */ - function getEquality() { + public function getEquality() { return $this->equality; } /** * Gets this attribute's ordering specification. + * * @return string */ - function getOrdering() { + public function getOrdering() { return $this->ordering; } /** * Gets this attribute's substring matching specification + * * @return string */ - function getSubstr() { + public function getSubstr() { return $this->sub_str; } /** * Gets the names of attributes that are an alias for this attribute (if any). + * * @return array An array of names of attributes which alias this attribute or * an empty array if no attribute aliases this object. */ - function getAliases() { + public function getAliases() { return $this->aliases; } /** * Returns whether the specified attribute is an alias for this one (based on this attribute's alias list). + * * @param string $attr_name The name of the attribute to check. - * @return bool True if the specified attribute is an alias for this one, or false otherwise. + * @return boolean True if the specified attribute is an alias for this one, or false otherwise. */ - function isAliasFor($attr_name) { + public function isAliasFor($attr_name) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$attr_name); @@ -948,9 +952,10 @@ class AttributeType extends SchemaItem { /** * Gets this attribute's raw syntax string (ie: "1.2.3.4{16}"). + * * @return string The raw syntax string */ - function getSyntaxString() { + public function getSyntaxString() { return $this->syntax; } @@ -959,68 +964,76 @@ class AttributeType extends SchemaItem { * function only returns the actual OID with any length specification removed. * Ie, if the syntax string is "1.2.3.4{16}", this function only retruns * "1.2.3.4". + * * @return string The syntax OID string. */ - function getSyntaxOID() { + public function getSyntaxOID() { return $this->syntax_oid; } /** * Gets this attribute's the maximum length. If no maximum is defined by the LDAP server, null is returned. + * * @return int The maximum length (in characters) of this attribute or null if no maximum is specified. */ - function getMaxLength() { + public function getMaxLength() { return $this->max_length; } /** * Gets whether this attribute is single-valued. If this attribute only supports single values, true * is returned. If this attribute supports multiple values, false is returned. - * @return bool Returns true if this attribute is single-valued or false otherwise. + * + * @return boolean Returns true if this attribute is single-valued or false otherwise. */ - function getIsSingleValue() { + public function getIsSingleValue() { return $this->is_single_value; } /** * Sets whether this attribute is single-valued. - * @param bool $is_single_value + * + * @param boolean $is */ - function setIsSingleValue($is_single_value) { - $this->is_single_value = $is_single_value; + public function setIsSingleValue($is) { + $this->is_single_value = $is; } /** * Gets whether this attribute is collective. - * @return bool Returns true if this attribute is collective and false otherwise. + * + * @return boolean Returns true if this attribute is collective and false otherwise. */ - function getIsCollective() { + public function getIsCollective() { return $this->is_collective; } /** * Gets whether this attribute is not modifiable by users. - * @return bool Returns true if this attribute is not modifiable by users. + * + * @return boolean Returns true if this attribute is not modifiable by users. */ - function getIsNoUserModification() { + public function getIsNoUserModification() { return $this->is_no_user_modification; } /** * Gets this attribute's type + * * @return string The attribute's type. */ - function getType() { + public function getType() { return $this->type; } /** * Removes an attribute name from this attribute's alias array. + * * @param string $remove_alias_name The name of the attribute to remove. - * @return bool true on success or false on failure (ie, if the specified + * @return boolean true on success or false on failure (ie, if the specified * attribute name is not found in this attribute's list of aliases) */ - function removeAlias($remove_alias_name) { + public function removeAlias($remove_alias_name) { if (DEBUG_ENABLED) debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$remove_alias_name); @@ -1038,131 +1051,133 @@ class AttributeType extends SchemaItem { /** * Adds an attribute name to the alias array. - * @param string $new_alias_name The name of a new attribute to add to this attribute's list of aliases. + * + * @param string $alias The name of a new attribute to add to this attribute's list of aliases. */ - function addAlias($new_alias_name) { - $this->aliases[] = $new_alias_name; + public function addAlias($alias) { + array_push($this->aliases,$alias); } /** * Sets this attriute's name. - * @param string $new_name The new name to give this attribute. + * + * @param string $name The new name to give this attribute. */ - function setName($new_name) { - $this->name = $new_name; + public function setName($name) { + $this->name = $name; } /** * Sets this attriute's SUP attribute (ie, the attribute from which this attribute inherits). - * @param string $new_sup_attr The name of the new parent (SUP) attribute + * + * @param string $attr The name of the new parent (SUP) attribute */ - function setSupAttribute($new_sup_attr) { - $this->sup_attribute = $new_sup_attr; + public function setSupAttribute($attr) { + $this->sup_attribute = $attr; } /** * Sets this attribute's list of aliases. - * @param array $new_aliases The array of alias names (strings) + * + * @param array $aliases The array of alias names (strings) */ - function setAliases($new_aliases) { - $this->aliases = $new_aliases; + public function setAliases($aliases) { + $this->aliases = $aliases; } /** * Sets this attribute's type. - * @param string $new_type The new type. + * + * @param string $type The new type. */ - function setType($new_type) { - $this->type = $new_type; + public function setType($type) { + $this->type = $type; } /** * Adds an objectClass name to this attribute's list of "used in" objectClasses, * that is the list of objectClasses which provide this attribute. - * @param string $object_class_name The name of the objectClass to add. + * + * @param string $name The name of the objectClass to add. */ - function addUsedInObjectClass($object_class_name) { + public function addUsedInObjectClass($name) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$object_class_name); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$name); foreach ($this->used_in_object_classes as $used_in_object_class) { if (DEBUG_ENABLED) - debug_log('Checking (%s) with (%s)',8,__FILE__,__LINE__,__METHOD__,$used_in_object_class,$object_class_name); + debug_log('Checking (%s) with (%s)',8,__FILE__,__LINE__,__METHOD__,$used_in_object_class,$name); - if (strcasecmp($used_in_object_class,$object_class_name) == 0) + if (strcasecmp($used_in_object_class,$name) == 0) return false; } - $this->used_in_object_classes[] = $object_class_name; - return true; + array_push($this->used_in_object_classes,$name); } /** * Gets the list of "used in" objectClasses, that is the list of objectClasses * which provide this attribute. + * * @return array An array of names of objectclasses (strings) which provide this attribute */ - function getUsedInObjectClasses() { + public function getUsedInObjectClasses() { return $this->used_in_object_classes; } /** * Adds an objectClass name to this attribute's list of "required by" objectClasses, * that is the list of objectClasses which must have this attribute. - * @param string $object_class_name The name of the objectClass to add. + * + * @param string $name The name of the objectClass to add. */ - function addRequiredByObjectClass($object_class_name) { + public function addRequiredByObjectClass($name) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$object_class_name); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$name); foreach ($this->required_by_object_classes as $required_by_object_class) - if (strcasecmp($required_by_object_class,$object_class_name) == 0) + if (strcasecmp($required_by_object_class,$name) == 0) return false; - $this->required_by_object_classes[] = $object_class_name; - return true; + array_push($this->required_by_object_classes,$name); } /** * Gets the list of "required by" objectClasses, that is the list of objectClasses * which provide must have attribute. + * * @return array An array of names of objectclasses (strings) which provide this attribute */ - function getRequiredByObjectClasses() { + public function getRequiredByObjectClasses() { return $this->required_by_object_classes; } /** * This function will mark this attribute as a forced MAY attribute */ - function setForceMay() { + public function setForceMay() { $this->forced_as_may = true; } + + public function isForceMay() { + return $this->forced_as_may; + } } /** * Represents an LDAP Syntax + * * @package phpLDAPadmin + * @subpackage Schema */ class Syntax extends SchemaItem { - /** Initializes the class' member variables */ - function initVars() { - parent::initVars(); - - $this->oid = null; - $this->description = null; - } - /** * Creates a new Syntax object from a raw LDAP syntax string. */ - function Syntax($raw_ldap_syntax_string) { + public function __construct($class) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_ldap_syntax_string); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$class); - $this->initVars(); - - $class = $raw_ldap_syntax_string; $strings = preg_split('/[\s,]+/',$class,-1,PREG_SPLIT_DELIM_CAPTURE); for($i=0; $idescription) == 0) - $this->description=$this->description . $strings[$i]; + $this->description=$this->description.$strings[$i]; else - $this->description=$this->description . ' ' . $strings[$i]; + $this->description=$this->description.' '.$strings[$i]; } while (! preg_match("/\'$/s",$strings[$i])); break; default: if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1) - $this->oid = $strings[$i]; + $this->setOID($strings[$i]); } } @@ -1193,39 +1208,24 @@ class Syntax extends SchemaItem { /** * Represents an LDAP MatchingRule + * * @package phpLDAPadmin + * @subpackage Schema */ class MatchingRule extends SchemaItem { - /** This rule's name */ - var $name; - /** This rule's syntax OID */ - var $syntax; - /** Boolean value indicating whether this MatchingRule is obsolete */ - var $is_obsolete; - /** An array of attribute names who use this MatchingRule */ - var $used_by_attrs; - - /** Initialize the class' member variables */ - function initVars() { - parent::initVars(); - - $this->oid = null; - $this->name = null; - $this->description = null; - $this->is_obsolete = false; - $this->syntax = null; - $this->used_by_attrs = array(); - } + # This rule's syntax OID + private $syntax = null; + # An array of attribute names who use this MatchingRule + private $used_by_attrs = array(); /** * Creates a new MatchingRule object from a raw LDAP MatchingRule string. */ - function MatchingRule($raw_ldap_matching_rule_string) { + function __construct($strings) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_ldap_matching_rule_string); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$strings); - $this->initVars(); - $strings = preg_split('/[\s,]+/',$raw_ldap_matching_rule_string,-1,PREG_SPLIT_DELIM_CAPTURE); + $strings = preg_split('/[\s,]+/',$strings,-1,PREG_SPLIT_DELIM_CAPTURE); for ($i=0; $iname) == 0) $this->name = $strings[$i]; else - $this->name .= ' ' . $strings[$i]; + $this->name .= ' '.$strings[$i]; } while (! preg_match("/\'$/s",$strings[$i])); } else { @@ -1249,7 +1249,7 @@ class MatchingRule extends SchemaItem { if (strlen($this->name) == 0) $this->name = $strings[$i]; else - $this->name .= ' ' . $strings[$i]; + $this->name .= ' '.$strings[$i]; } while (! preg_match("/\'$/s",$strings[$i])); do { @@ -1265,9 +1265,9 @@ class MatchingRule extends SchemaItem { do { $i++; if (strlen($this->description)==0) - $this->description=$this->description . $strings[$i]; + $this->description=$this->description.$strings[$i]; else - $this->description=$this->description . ' ' . $strings[$i]; + $this->description=$this->description.' '.$strings[$i]; } while (! preg_match("/\'$/s",$strings[$i])); break; @@ -1281,7 +1281,7 @@ class MatchingRule extends SchemaItem { default: if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1) - $this->oid = $strings[$i]; + $this->setOID($strings[$i]); } } $this->description = preg_replace("/^\'/",'',$this->description); @@ -1290,89 +1290,57 @@ class MatchingRule extends SchemaItem { /** * Sets the list of used_by_attrs to the array specified by $attrs; + * * @param array $attrs The array of attribute names (strings) which use this MatchingRule */ - function setUsedByAttrs($attrs) { + public function setUsedByAttrs($attrs) { $this->used_by_attrs = $attrs; } /** * Adds an attribute name to the list of attributes who use this MatchingRule + * * @return true if the attribute was added and false otherwise (already in the list) */ - function addUsedByAttr($new_attr_name) { + public function addUsedByAttr($attr) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$new_attr_name); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$attr); foreach ($this->used_by_attrs as $attr_name) - if (strcasecmp($attr_name,$new_attr_name) == 0) + if (strcasecmp($attr_name,$attr) == 0) return false; - $this->used_by_attrs[] = $new_attr_name; + array_push($this->used_by_attrs,$attr); return true; } - /** - * Gets this MatchingRule's name. - * @return string The name. - */ - function getName() { - return $this->name; - } - - /** - * Gets whether this MatchingRule is flagged as obsolete by the LDAP server. - * @return bool True if this MatchingRule is obsolete and false otherwise. - */ - function getIsObsolete() { - return $this->is_obsolete; - } - - /** - * Gets this MatchingRule's syntax string (an OID). - */ - function getSyntax() { - return $this->description; - } - /** * Gets an array of attribute names (strings) which use this MatchingRule + * * @return array The array of attribute names (strings). */ - function getUsedByAttrs() { + public function getUsedByAttrs() { return $this->used_by_attrs; } } /** * Represents an LDAP schema matchingRuleUse entry + * * @package phpLDAPadmin + * @subpackage Schema */ class MatchingRuleUse extends SchemaItem { - /** The name of the MathingRule this applies to */ - var $name; + # An array of attribute names who use this MatchingRule + private $used_by_attrs = array(); - /** An array of attributeType names who make use of the mathingRule - * identified by $this->oid and $this->name */ - var $used_by_attrs; - - /** Initialize the class' member variables */ - function initVars() { - parent::initVars(); - - $this->oid = null; - $this->name = null; - $this->used_by_attrs = array(); - } - - function MatchingRuleUse($raw_matching_rule_use_string) { + function __construct($strings) { if (DEBUG_ENABLED) - debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$raw_matching_rule_use_string); + debug_log('Entered with (%s)',9,__FILE__,__LINE__,__METHOD__,$strings); - $this->initVars(); + $strings = preg_split('/[\s,]+/',$strings,-1,PREG_SPLIT_DELIM_CAPTURE); - $strings = preg_split('/[\s,]+/',$raw_matching_rule_use_string,-1,PREG_SPLIT_DELIM_CAPTURE); for($i=0; $iname) || strlen($this->name) == 0) $this->name = $strings[$i]; else - $this->name .= ' ' . $strings[$i]; + $this->name .= ' '.$strings[$i]; } while (! preg_match("/\'$/s",$strings[$i])); @@ -1396,7 +1364,7 @@ class MatchingRuleUse extends SchemaItem { if (strlen($this->name) == 0) $this->name = $strings[$i]; else - $this->name .= ' ' . $strings[$i]; + $this->name .= ' '.$strings[$i]; } while (! preg_match("/\'$/s",$strings[$i])); do { @@ -1409,12 +1377,10 @@ class MatchingRuleUse extends SchemaItem { break; case 'APPLIES': - # @TODO if ($strings[$i+1] != '(') { # Has a single attribute name $i++; $this->used_by_attrs = array($strings[$i]); - //echo "Adding single: " . $strings[$i] . "
"; } else { # Has multiple attribute names @@ -1424,8 +1390,7 @@ class MatchingRuleUse extends SchemaItem { $new_attr = $strings[$i]; $new_attr = preg_replace("/^\'/",'',$new_attr); $new_attr = preg_replace("/\'$/",'',$new_attr); - $this->used_by_attrs[] = $new_attr; - //echo "Adding $new_attr
"; + array_push($this->used_by_attrs,$new_attr); $i++; } } @@ -1433,25 +1398,19 @@ class MatchingRuleUse extends SchemaItem { default: if (preg_match('/[\d\.]+/i',$strings[$i]) && $i == 1) - $this->oid = $strings[$i]; + $this->setOID($strings[$i]); } } + sort($this->used_by_attrs); } - /** - * Gets this MatchingRuleUse's name - * @return string The name - */ - function getName() { - return $this->name; - } - /** * Gets an array of attribute names (strings) which use this MatchingRuleUse object. + * * @return array The array of attribute names (strings). */ - function getUsedByAttrs() { + public function getUsedByAttrs() { return $this->used_by_attrs; } } diff --git a/lib/search_form_advanced.php b/lib/search_form_advanced.php deleted file mode 100644 index 7c0b69a..0000000 --- a/lib/search_form_advanced.php +++ /dev/null @@ -1,123 +0,0 @@ - - - - -

-
-
- - - - - - - -isCommandAvailable('search', 'simple_search'); - $ps = $_SESSION[APPCONFIG]->isCommandAvailable('search', 'predefined_search'); - if ($ss | $ps) { - echo ''; - } -?> - - - - - - - - ',_('This is not a valid DN.')); - -if (isset($entry['base_dn']['exist']) && $entry['base_dn']['exist']) - printf('',_('This entry does not exist.')); -?> - - - - - - - - - - - - - - - - - - - - - - - - - -
('; - if ($ss) { - echo ''; - echo _('Simple Search Form'); - echo ''; - if ($ps) echo ' | '; - } - if ($ps) { - echo ''; - echo _('Predefined Searches'); - echo ''; - } - echo ')
 
- - %s
 %s
- -
-
-

-
- - diff --git a/lib/search_form_predefined.php b/lib/search_form_predefined.php deleted file mode 100644 index fe413e2..0000000 --- a/lib/search_form_predefined.php +++ /dev/null @@ -1,68 +0,0 @@ -%s',_('Predefined Searches')); -echo '
'; -echo '
'; -echo ''; -echo ''; -echo ''; -printf('',$entry['format']); -printf('',$ldapserver->server_id); - -echo ''; - -if ($entry['predefined']) - $selected_q_number = intval($entry['predefined']); -else - $selected_q_number = null; - - -$ss = $_SESSION[APPCONFIG]->isCommandAvailable('search', 'simple_search'); -$as = $_SESSION[APPCONFIG]->isCommandAvailable('search', 'advanced_search'); -if ($ss | $as) { - echo ''; -} - -echo ''; - -if (! isset($_SESSION[APPCONFIG]->queries) || ! is_array($_SESSION[APPCONFIG]->queries) || count($_SESSION[APPCONFIG]->queries) == 0) { - printf('',_('No queries have been defined in config.php.')); - -} else { - echo ''; - printf('',_('Select a predefined search')); - - echo ''; - - echo ''; - printf('',_('Search')); -} - -echo '
('; - if ($ss) { - printf('%s', $ldapserver->server_id,_('Simple Search Form')); - if ($as) echo ' | '; - } - if ($as) { - printf('%s', $ldapserver->server_id,_('Advanced Search Form')); - } - echo ')
 
%s
%s:'; - echo ''; - echo '
 
'; -?> diff --git a/lib/search_form_simple.php b/lib/search_form_simple.php deleted file mode 100644 index 334be5a..0000000 --- a/lib/search_form_simple.php +++ /dev/null @@ -1,82 +0,0 @@ - - - - -

-
-
- - - - - - - - -isCommandAvailable('search', 'advanced_search'); - $ps = $_SESSION[APPCONFIG]->isCommandAvailable('search', 'predefined_search'); - if ($as | $ps) { - echo ''; - } -?> - - - - - - - - -
('; - if ($as) { - echo ''; - echo _('Advanced Search Form'); - echo ''; - if ($ps) echo ' | '; - } - if ($ps) { - echo ''; - echo _('Predefined Searches'); - echo ''; - } - echo ')
 


 
- - - - - -
 
-
- - diff --git a/lib/search_results_list.php b/lib/search_results_list.php deleted file mode 100644 index 45a15b6..0000000 --- a/lib/search_results_list.php +++ /dev/null @@ -1,72 +0,0 @@ - $dndetails) { - $i++; - - if ($i <= $start_entry) - continue; - - if ($i >= $end_entry) - break; - - echo ''; - - echo ''; - printf('',IMGDIR,get_icon($ldapserver,$dn)); - - $formatted_dn = get_rdn($dn); - if (!$_SESSION[APPCONFIG]->isCommandAvailable('schema')) { - $formatted_dn = explode('=', $formatted_dn, 2); - $formatted_dn = $formatted_dn[1]; - } - - printf('', - $ldapserver->server_id,rawurlencode(dn_unescape($dn)),htmlspecialchars($formatted_dn)); - echo ''; - - if ($_SESSION[APPCONFIG]->isCommandAvailable('schema')) { - printf('',htmlspecialchars(dn_unescape($dn))); - } - - # Iterate over each attribute for this entry - foreach ($dndetails as $attr => $values) { - # Ignore DN, we've already displayed it. - if ($attr == 'dn') - continue; - - if ($ldapserver->isAttrBinary($attr)) - $values = array('(binary)'); - - echo ''; - echo ''; - printf('',$_SESSION[APPCONFIG]->getFriendlyHTML($attr)); - - echo ''; - echo ''; - } - - echo '
icon%s
 dn%s
 %s'; - - if ($ldapserver->isJpegPhoto($attr)) - draw_jpeg_photos($ldapserver,$dn,$attr,false,false,'align="left"'); - - else - if (is_array($values)) - foreach ($values as $value) - echo str_replace(' ',' ',htmlspecialchars($value)).'
'; - - else - echo str_replace(' ',' ',htmlspecialchars($values)).'
'; - - echo '
'; - echo '
'; -} -?> diff --git a/lib/search_results_table.php b/lib/search_results_table.php deleted file mode 100644 index 5b45490..0000000 --- a/lib/search_results_table.php +++ /dev/null @@ -1,115 +0,0 @@ -isCommandAvailable('schema')) { - $all_attrs = array('' =>1, 'dn'=>1); -} else { - $all_attrs = array('' =>1); -} -$entries_display = array(); - -/* Iterate over each entry and store the whole dang thing in memory (necessary to extract - * all attribute names and display in table format in a single pass) */ -$i=0; - -foreach ($results as $dn => $dndetails) { - $i++; - if ($i <= $start_entry) - continue; - - if ($i >= $end_entry) - break; - - $edit_url = sprintf('cmd.php?cmd=template_engine&server_id=%s&dn=%s',$ldapserver->server_id,rawurlencode($dn)); - $attrs_display = array(); - $attrs_display[''] = sprintf('
icon
',$edit_url,IMGDIR,get_icon($ldapserver,$dn)); - - if ($_SESSION[APPCONFIG]->isCommandAvailable('schema')) { - $dn_display = strlen($dn) > 40 - ? sprintf('%s...',htmlspecialchars($dn),htmlspecialchars(substr($dn,0,40))) - : htmlspecialchars($dn); - - $attrs_display['dn'] = sprintf('%s',$edit_url,$dn_display); - } - - # Iterate over each attribute for this entry and store in associative array $attrs_display - foreach ($dndetails as $attr => $values) { - # Ignore DN, we've already displayed it. - if ($attr == 'dn') - continue; - - $attr_display = $_SESSION[APPCONFIG]->getFriendlyHTML($attr); - - if (! isset($all_attrs[$attr_display])) - $all_attrs[$attr_display] = 1; - - # Get the values - $display = ''; - - if ($ldapserver->isJpegPhoto($attr)) { - ob_start(); - draw_jpeg_photos($ldapserver,$dn,$attr,false,false,'align="center"'); - if (ob_get_level()) { - $display = ob_get_contents(); - ob_end_clean(); - } - - } elseif ($ldapserver->isAttrBinary($attr)) { - $display = array('(binary)'); - - } else { - if (! is_array($values)) - $display .= str_replace(' ',' ',htmlspecialchars($values)).'
'; - else - foreach ($values as $value ) - $display .= str_replace(' ',' ',htmlspecialchars($value)).'
'; - } - - $attrs_display[$attr_display] = $display; - } - - $entries_display[] = $attrs_display; -} - -$all_attrs = array_keys($all_attrs); - -# Store the header row so it can be repeated later -$header_row = ''; -foreach ($all_attrs as $attr) - $header_row .= sprintf('%s',$attr); -$header_row .= ''; - -# Begin drawing table -echo '
'; -echo '
'; -echo ''; - -for ($i=0;$i',$i%2 ? 'even' : 'odd'); - - foreach ($all_attrs as $attr) { - echo ''; - } - echo ''; -} - -echo '
'; - if (isset($result[$attr])) - echo $result[$attr]; - echo '
'; -echo '
'; -?> diff --git a/lib/server_functions.php b/lib/server_functions.php deleted file mode 100644 index 5140128..0000000 --- a/lib/server_functions.php +++ /dev/null @@ -1,3402 +0,0 @@ -server_id = $server_id; - } - - /** - * Check if there is sufficent information to Authenticate to the LDAP server. - * - * Given a server, returns whether or not we have enough information - * to authenticate against the server. For example, if the user specifies - * auth_type of 'cookie' in the config for that server, it checks the $_COOKIE array to - * see if the cookie username and password is set for the server. If the auth_type - * is 'session', the $_SESSION array is checked. If the auth_type is 'http', the - * $_SERVER['PHP_AUTH_USER'] and $_SERVER['PHP_AUTH_PW'] is checked. - * - * There are three cases for this function depending on the auth_type configured for - * the specified server. If the auth_type is session or cookie or http, then getLoggedInDN() - * is called to verify that the user has logged in. If the auth_type is config, then the - * $ldapservers configuration in config.php is checked to ensure that the user has specified - * login information. In any case, if phpLDAPadmin has enough information to login - * to the server, true is returned. Otherwise false is returned. - * - * @return bool - * @see getLoggedInDN - */ - function haveAuthInfo() { - if (DEBUG_ENABLED) { - debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); - debug_log('We are a (%s) auth_type',80,__FILE__,__LINE__,__METHOD__,$this->auth_type); - } - - # Set default return - $return = false; - - # For session or cookie auth_types, we check the session or cookie to see if a user has logged in. - if (in_array($this->auth_type,array('session','cookie'))) { - - /* we don't look at getLoggedInPass() cause it may be null for anonymous binds - * getLoggedInDN() will never return null if someone is really logged in. */ - if ($this->getLoggedInDN()) - $return = true; - else - $return = false; - - /* whether or not the login_dn or pass is specified, we return - * true here. (if they are blank, we do an anonymous bind anyway) */ - } elseif ($this->auth_type == 'http') { - - # This is temp, to avoid multiple displays of this message - static $shown = false; - - if (! $this->getLoggedInDN() && ! $shown) { - system_message(array( - 'title'=>_('No HTTP AUTH information'), - 'body'=>_('Your configuration file has authentication set to http_auth, however, there was none presented to phpLDAPadmin'), - 'type'=>'error')); - - $shown = true; - } - - if ($this->getLoggedInDN()) - $return = true; - else - $return = false; - - } elseif ($this->auth_type == 'config') { - $return = true; - - } else { - error(sprintf(_('Error: You have an error in your config file. The only four allowed values for auth_type in the $servers section are \'http\', \'session\', \'cookie\', and \'config\'. You entered \'%s\', which is not allowed.'),htmlspecialchars($this->auth_type)),'error',null,true); - } - - if (DEBUG_ENABLED) - debug_log('Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - /** - * Connect to the LDAP server. - * - * @param bool $process_error Whether to call an error page, if the connection fails - * @param bool $connect_id The ID for this connection - * @param bool $reconnect Use a cached connetion, or create a new one. - * @returns resource|false Connection resource to LDAP server, or false if no connection made. - */ - function connect($process_error=true,$connect_id='user',$reconnect=false,$readonly=true,$dn=null,$pass=null) { - global $CACHE; - - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__, - $process_error,$connect_id,$reconnect); - - # Quick return if we have already connected. - if (isset($this->connection[$connect_id]['resource']) && ! $reconnect) { - if (DEBUG_ENABLED) - debug_log('Returning CACHED connection resource [%s](%s)',16,__FILE__,__LINE__,__METHOD__, - $this->connection[$connect_id]['resource'],$connect_id); - - return $this->connection[$connect_id]['resource']; - } - - # No identifiable connection exists, lest create a new one. - if (DEBUG_ENABLED) - debug_log('Creating new connection [%s] for Server ID [%s]',16,__FILE__,__LINE__,__METHOD__, - $connect_id,$this->server_id); - - $this->connection[$connect_id]['resource'] = null; - - # Grab the AUTH INFO based on the auth_type for this server - if ($connect_id == 'anonymous') { - if (DEBUG_ENABLED) - debug_log('This IS an anonymous login',80,__FILE__,__LINE__,__METHOD__); - - $this->connection[$connect_id]['login_dn'] = null; - $this->connection[$connect_id]['login_pass'] = null; - - } elseif ($this->auth_type == 'config') { - if (DEBUG_ENABLED) - debug_log('This IS a "config" login',80,__FILE__,__LINE__,__METHOD__); - - if (! $this->login_dn) { - if (DEBUG_ENABLED) - debug_log('No login_dn for CONFIG auth_type, so well do anonymous',80,__FILE__,__LINE__,__METHOD__); - - $connect_id = 'anonymous'; - - } else { - $this->connection[$connect_id]['login_dn'] = $this->login_dn; - $this->connection[$connect_id]['login_pass'] = $this->login_pass; - - if (DEBUG_ENABLED) - debug_log('CONFIG auth_type settings, DN [%s], PASS [%s]',80,__FILE__,__LINE__,__METHOD__, - $this->connection[$connect_id]['login_dn'], - $this->connection[$connect_id]['login_pass'] ? md5($this->connection[$connect_id]['login_pass']) : ''); - } - - } elseif ($this->auth_type == 'http') { - if (! $dn && ! $pass) - $connect_id = 'anonymous'; - - else { - $this->connection[$connect_id]['login_dn'] = $dn; - $this->connection[$connect_id]['login_pass'] = $pass; - } - - } else { - if (DEBUG_ENABLED) - debug_log('This IS some other login',80,__FILE__,__LINE__,__METHOD__); - - # Did we pass the dn/pass to this function? - if ($dn) { - $this->connection[$connect_id]['login_dn'] = $dn; - $this->connection[$connect_id]['login_pass'] = $pass; - - if (DEBUG_ENABLED) - debug_log('Login settings were passed to this function, DN [%s], PASS [%s]',80,__FILE__,__LINE__,__METHOD__, - $this->connection[$connect_id]['login_dn'], - $this->connection[$connect_id]['login_pass'] ? md5($this->connection[$connect_id]['login_pass']) : ''); - - # Was this an anonyous bind (the cookie stores 0 if so)? - } elseif ($this->getLoggedInDN() == 'anonymous') { - $connect_id = 'anonymous'; - $this->connection[$connect_id]['login_dn'] = null; - $this->connection[$connect_id]['login_pass'] = null; - - if (DEBUG_ENABLED) - debug_log('Already logged in as anonymous',80,__FILE__,__LINE__,__METHOD__); - - } else { - $this->connection[$connect_id]['login_dn'] = $this->getLoggedInDN(); - $this->connection[$connect_id]['login_pass'] = $this->getLoggedInPass(); - - if (DEBUG_ENABLED) - debug_log('Already logged in as DN [%s], PASS [%s]',80,__FILE__,__LINE__,__METHOD__, - $this->connection[$connect_id]['login_dn'], - $this->connection[$connect_id]['login_pass'] ? md5($this->connection[$connect_id]['login_pass']) : ''); - } - } - - # Work out if we are doing a SASL AUTH - if ($this->sasl_auth) { - $this->connection[$connect_id]['sasl_auth'] = true; - $this->connection[$connect_id]['sasl_mech'] = $this->sasl_mech; - $this->connection[$connect_id]['sasl_realm'] = $this->sasl_realm; - $this->connection[$connect_id]['sasl_authz_id'] = $this->sasl_authz_id; - $this->connection[$connect_id]['sasl_authz_id_regex'] = $this->sasl_authz_id_regex; - $this->connection[$connect_id]['sasl_authz_id_replacement'] = $this->sasl_authz_id_replacement; - $this->connection[$connect_id]['sasl_props'] = $this->sasl_props; - - } else { - $this->connection[$connect_id]['sasl_auth'] = false; - } - - if (DEBUG_ENABLED) - debug_log('Summary config settings, DN [%s], PASS [%s]',80,__FILE__,__LINE__,__METHOD__, - $this->connection[$connect_id]['login_dn'], - $this->connection[$connect_id]['login_pass'] ? md5($this->connection[$connect_id]['login_pass']) : ''); - - # Test if we have info to login. - if ($connect_id != 'anonymous' && ! $this->connection[$connect_id]['login_dn'] && ! $this->connection[$connect_id]['login_pass']) { - if (DEBUG_ENABLED) - debug_log('We dont have enough auth info for server [%s]',80,__FILE__,__LINE__,__METHOD__,$this->server_id); - - return false; - } - - # If we get here, we need to login - now figure out which server. - if (! $readonly) { - $host = $this->hostwr ? $this->hostwr : $this->host; - $port = $this->hostwr && $this->portwr ? $this->portwr : $this->port; - $connect_id = 'write'; - } else { - $host = $this->host; - $port = $this->port; - } - - # Our connect_id may have changed, lets just check and see if we have already connected. - if (isset($this->connection[$connect_id]['resource']) && ! $reconnect) { - if (DEBUG_ENABLED) - debug_log('Returning CACHED connection resource [%s](%s)',16,__FILE__,__LINE__,__METHOD__, - $this->connection[$connect_id]['resource'],$connect_id); - - return $this->connection[$connect_id]['resource']; - } - - run_hook('pre_connect',array('server_id'=>$this->server_id,'connect_id'=>$connect_id)); - - if ($port) - $resource = @ldap_connect($host,$port); - else - $resource = @ldap_connect($host); - - if (DEBUG_ENABLED) - debug_log('LDAP Resource [%s], Host [%s], Port [%s]',16,__FILE__,__LINE__,__METHOD__, - $resource,$host,$port); - - # Go with LDAP version 3 if possible (needed for renaming and Novell schema fetching) - @ldap_set_option($resource,LDAP_OPT_PROTOCOL_VERSION,3); - - /* Disabling this makes it possible to browse the tree for Active Directory, and seems - * to not affect other LDAP servers (tested with OpenLDAP) as phpLDAPadmin explicitly - * specifies deref behavior for each ldap_search operation. */ - @ldap_set_option($resource,LDAP_OPT_REFERRALS,0); - - # Try to fire up TLS is specified in the config - if ($this->isTLSEnabled()) { - function_exists('ldap_start_tls') or error(_('Your PHP install does not support TLS.'),'error'); - @ldap_start_tls($resource) or error(_('Could not start TLS. Please check your LDAP server configuration.'),'error',null,true); - } - - $bind_result = false; - - /** - * Implementation of SASL ldap_bind() - * This option requires PHP 5.x compiled with --with-ldap-sasl=DIR - */ - if (isset($this->connection[$connect_id]['sasl_auth']) && - $this->connection[$connect_id]['sasl_auth'] == true) { - - # No support for ldap_sasl_bind? - if (! function_exists('ldap_sasl_bind')) - error(_('Your PHP installation does not support ldap_sasl_bind() function. This function is present in PHP 5.x when compiled with --with-ldap-sasl.'),'error'); - - # Fill variables - $props = $this->connection[$connect_id]['sasl_props']; - $mech = $this->connection[$connect_id]['sasl_mech']; - $realm = $this->connection[$connect_id]['sasl_realm']; - $authz_id = null; - - if (DEBUG_ENABLED) - debug_log('Resource [%s], Using SASL bind method. Bind DN [%s]',9,__FILE__,__LINE__,__METHOD__, - $resource,$this->connection[$connect_id]['login_dn']); - - # do we need to rewrite authz_id? - if (isset($this->connection[$connect_id]['sasl_authz_id']) && - strlen($this->connection[$connect_id]['sasl_authz_id']) > 0) - - $authz_id = $this->connection[$connect_id]['sasl_authz_id']; - - else { - - # ok, here we go - if (DEBUG_ENABLED) - debug_log('Resource [%s], Rewriting bind DN [%s] -> authz_id with regex [%s] and replacement [%s].',9,__FILE__,__LINE__,__METHOD__, - $resource,$this->connection[$connect_id]['login_dn'], - $this->connection[$connect_id]['sasl_authz_id_regex'], - $this->connection[$connect_id]['sasl_authz_id_replacement']); - - $authz_id = @preg_replace($this->connection[$connect_id]['sasl_authz_id_regex'], - $this->connection[$connect_id]['sasl_authz_id_replacement'], - $this->connection[$connect_id]['login_dn']); - - # invalid regex? - if (is_null($authz_id)) { - error(sprintf(_('It seems that sasl_authz_id_regex "%s"." contains invalid PCRE regular expression.'), - $this->connection[$connect_id]['sasl_authz_id_regex']).((isset($php_errormsg)) ? ' Error message: '.$php_errormsg : '') - ,'error','index.php'); - } - } - - if (DEBUG_ENABLED) - debug_log('Resource [%s], SASL OPTIONS: mech [%s], realm [%s], authz_id [%s], props [%s]',9,__FILE__,__LINE__,__METHOD__, - $resource,$mech,$realm,$authz_id,$props); - - $bind_result = @ldap_sasl_bind($resource, - $this->connection[$connect_id]['login_dn'],$this->connection[$connect_id]['login_pass'], - $mech,$realm,$authz_id,$props); - - } else { - $bind_result = @ldap_bind($resource,$this->connection[$connect_id]['login_dn'], - $this->connection[$connect_id]['login_pass']); - } - - if (DEBUG_ENABLED) - debug_log('Resource [%s], Bind Result [%s]',16,__FILE__,__LINE__,__METHOD__,$resource,$bind_result); - - if (! $bind_result) { - if (DEBUG_ENABLED) - debug_log('Leaving with FALSE, bind FAILed',16,__FILE__,__LINE__,__METHOD__); - - if ($process_error) { - switch (ldap_errno($resource)) { - case 0x31: - error(_('Bad username or password. Please try again.'),'error'); - break; - case 0x32: - error(_('Insufficient access rights.'),'error'); - break; - case -1: - error(sprintf(_('Could not connect to "%s" on port "%s"'),$host,$port),'error'); - break; - default: - error(sprintf(_('Could not bind to the LDAP server (%s).'),ldap_err2str($resource)),'error'); - } - - } else { - return false; - } - } - - if (is_resource($resource) && ($bind_result)) { - if (DEBUG_ENABLED) - debug_log('Bind successful',16,__FILE__,__LINE__,__METHOD__); - - $this->connection[$connect_id]['resource'] = $resource; - } - - if (DEBUG_ENABLED) - debug_log('Leaving with Connect [%s], Resource [%s]',16,__FILE__,__LINE__,__METHOD__, - $connect_id,$this->connection[$connect_id]['resource']); - - if (isset($this->connection[$connect_id]['resource'])) - return $this->connection[$connect_id]['resource']; - else - return false; - } - - /** - * Gets the root DN of the specified LDAPServer, or null if it - * can't find it (ie, the server won't give it to us, or it isnt - * specified in the configuration file). - * - * Tested with OpenLDAP 2.0, Netscape iPlanet, and Novell eDirectory 8.7 (nldap.com) - * Please report any and all bugs!! - * - * Please note: On FC systems, it seems that php_ldap uses /etc/openldap/ldap.conf in - * the search base if it is blank - so edit that file and comment out the BASE line. - * - * @return array dn|null The root DN of the server on success (string) or null on error. - * @todo Sort the entries, so that they are in the correct DN order. - */ - function getBaseDN() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); - - # Return the cached entry if we've been here before. - if (! is_null($this->_baseDN)) { - debug_log('Return CACHED BaseDN [%s]',17,__FILE__,__LINE__,__METHOD__,implode('|',$this->_baseDN)); - return $this->_baseDN; - } - - if (DEBUG_ENABLED) - debug_log('Checking config for BaseDN',80,__FILE__,__LINE__,__METHOD__); - - # If the base is set in the configuration file, then just return that. - if (count($_SESSION[APPCONFIG]->ldapservers->GetValue($this->server_id,'server','base')) > 0) { - $this->_baseDN = $_SESSION[APPCONFIG]->ldapservers->GetValue($this->server_id,'server','base'); - - if (DEBUG_ENABLED) - debug_log('Return BaseDN from Config [%s]',17,__FILE__,__LINE__,__METHOD__,implode('|',$this->_baseDN)); - - return $this->_baseDN; - - # We need to figure it out. - } else { - if (DEBUG_ENABLED) - debug_log('Connect to LDAP to find BaseDN',80,__FILE__,__LINE__,__METHOD__); - - if ($this->connect()) { - $r = $this->search(null,'','objectClass=*',array('namingContexts'),'base'); - $r = array_pop($r); - - if (is_array($r)) - $r = array_change_key_case($r); - - if (isset($r['namingcontexts'])) { - if (! is_array($r['namingcontexts'])) - $r['namingcontexts'] = array($r['namingcontexts']); - - if (DEBUG_ENABLED) - debug_log('LDAP Entries:%s',80,__FILE__,__LINE__,__METHOD__,implode('|',$r['namingcontexts'])); - - $this->_baseDN = $r['namingcontexts']; - - return $this->_baseDN; - - } else { - return array(''); - } - - } else { - return array(''); - } - } - } - - /** - * Returns true if the specified server is configured to be displayed - * in read only mode. - * - * If a user has logged in via anonymous bind, and config.php specifies - * - * $config->custom->appearance['anonymous_bind_implies_read_only'] = true; - * - * then this also returns true. Servers can be configured read-only in - * config.php thus: - * - * $ldapservers->SetValue($i,'server','read_only',false); - * - * - * @return bool - */ - function isReadOnly() { - # Set default return - $return = false; - - if ($this->read_only == true) - $return = true; - - elseif ($this->getLoggedInDN() === 'anonymous' && - ($_SESSION[APPCONFIG]->GetValue('appearance','anonymous_bind_implies_read_only') === true)) - - $return = true; - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - /** - * Returns true if the user has configured the specified server to enable mass deletion. - * - * Mass deletion is enabled in config.php this: - * - * $config->custom->commands['all'] = array('entry_delete' => array('mass_delete' => true)); - * - * Notice that mass deletes are not enabled on a per-server basis, but this - * function checks that the server is not in a read-only state as well. - * - * @return bool - */ - function isMassDeleteEnabled() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); - - if ($this->connect(false) && $this->haveAuthInfo() && ! $this->isReadOnly() && - $_SESSION[APPCONFIG]->isCommandAvailable('entry_delete', 'mass_delete')) - - return true; - - else - return false; - } - - /** - * Gets whether the admin has configured phpLDAPadmin to show the "Create New" link in the tree viewer. - * - * $ldapservers->SetValue($i,'appearance','show_create','true|false'); - * - * If NOT set, then default to show the Create New item. - * If IS set, then return the value (it should be true or false). - * - * The entry creation command must be available. - * - * $config->custom->commands['all'] = array('entry_create' => true); - * - * - * @default true - * @return bool True if the feature is enabled and false otherwise. - */ - function isShowCreateEnabled() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); - - if (! $_SESSION[APPCONFIG]->isCommandAvailable('entry_create')) return false; - else return $this->show_create; - } - - /** - * Fetch whether the user has configured a certain server as "low bandwidth". - * - * Users may choose to configure a server as "low bandwidth" in config.php thus: - * - * $ldapservers->SetValue($i,'server','low_bandwidth','true|false'); - * - * - * @default false - * @return bool - */ - function isLowBandwidth() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); - - return $this->low_bandwidth; - } - - /** - * Should this LDAP server be shown in the tree? - * - * - * $ldapservers->SetValue($i,'server','visible','true|false'); - * - * - * @default true - * @return bool True if the feature is enabled and false otherwise. - */ - function isVisible() { - if ($this->visible) - $return = true; - else - $return = false; - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - /** - * This function will query the ldap server and request the subSchemaSubEntry which should be the Schema DN. - * - * If we cant connect to the LDAP server, we'll return false. - * If we can connect but cant get the entry, then we'll return null. - * - * @return array|false Schema if available, null if its not or false if we cant connect. - */ - function getSchemaDN($dn='') { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',25,__FILE__,__LINE__,__METHOD__,$dn); - - # If we already got the SchemaDN, then return it. - if ($this->_schemaDN) - return $this->_schemaDN; - - if (! $this->connect()) - return false; - - $this->lastop = 'read'; - $search = @ldap_read($this->connect(),$dn,'objectClass=*',array('subschemaSubentry')); - - if (DEBUG_ENABLED) - debug_log('Search returned (%s)',24,__FILE__,__LINE__,__METHOD__,is_resource($search)); - - # Fix for broken ldap.conf configuration. - if (! $search && ! $dn) { - if (DEBUG_ENABLED) - debug_log('Trying to find the DN for "broken" ldap.conf',80,__FILE__,__LINE__,__METHOD__); - - if (isset($this->_baseDN)) { - foreach ($this->_baseDN as $base) { - $search = @ldap_read($this->connect(),$base,'objectClass=*',array('subschemaSubentry')); - - if (DEBUG_ENABLED) - debug_log('Search returned (%s) for base (%s)',24,__FILE__,__LINE__,__METHOD__, - is_resource($search),$base); - - if ($search) - break; - } - } - } - - if (! $search) - return null; - - if (! @ldap_count_entries($this->connect(),$search)) { - if (DEBUG_ENABLED) - debug_log('Search returned 0 entries. Returning NULL',25,__FILE__,__LINE__,__METHOD__); - - return null; - } - - $entries = @ldap_get_entries($this->connect(),$search); - - if (DEBUG_ENABLED) - debug_log('Search returned [%s]',24,__FILE__,__LINE__,__METHOD__,$entries); - - if (! $entries || ! is_array($entries)) - return null; - - $entry = isset($entries[0]) ? $entries[0] : false; - if (! $entry) { - if (DEBUG_ENABLED) - debug_log('Entry is false, Returning NULL',80,__FILE__,__LINE__,__METHOD__); - - return null; - } - - $sub_schema_sub_entry = isset($entry[0]) ? $entry[0] : false; - if (! $sub_schema_sub_entry) { - if (DEBUG_ENABLED) - debug_log('Sub Entry is false, Returning NULL',80,__FILE__,__LINE__,__METHOD__); - - return null; - } - - $this->_schemaDN = isset($entry[$sub_schema_sub_entry][0]) ? $entry[$sub_schema_sub_entry][0] : false; - - if (DEBUG_ENABLED) - debug_log('Returning (%s)',25,__FILE__,__LINE__,__METHOD__,$this->_schemaDN); - - return $this->_schemaDN; - } - - /** - * Fetches the raw schema array for the subschemaSubentry of the server. Note, - * this function has grown many hairs to accomodate more LDAP servers. It is - * needfully complicated as it now supports many popular LDAP servers that - * don't necessarily expose their schema "the right way". - * - * Please note: On FC systems, it seems that php_ldap uses /etc/openldap/ldap.conf in - * the search base if it is blank - so edit that file and comment out the BASE line. - * - * @param string $schema_to_fetch - A string indicating which type of schema to - * fetch. Five valid values: 'objectclasses', 'attributetypes', - * 'ldapsyntaxes', 'matchingruleuse', or 'matchingrules'. - * Case insensitive. - * @param dn $dn (optional) This paremeter is the DN of the entry whose schema you - * would like to fetch. Entries have the option of specifying - * their own subschemaSubentry that points to the DN of the system - * schema entry which applies to this attribute. If unspecified, - * this will try to retrieve the schema from the RootDSE subschemaSubentry. - * Failing that, we use some commonly known schema DNs. Default - * value is the Root DSE DN (zero-length string) - * @return array an array of strings of this form: - * Array ( - * [0] => "(1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' DESC 'Pool ... - * [1] => "(1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' DESC 'Sa ... - * etc. - */ - function getRawSchema($schema_to_fetch,$dn='') { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',25,__FILE__,__LINE__,__METHOD__,$schema_to_fetch,$dn); - - $valid_schema_to_fetch = array('objectclasses','attributetypes','ldapsyntaxes','matchingrules','matchingruleuse'); - - if (! $this->connect()) - return false; - - # error checking - $schema_to_fetch = strtolower($schema_to_fetch); - - if (!is_null($this->_schema_entries) && isset($this->_schema_entries[$schema_to_fetch])) { - $schema = $this->_schema_entries[$schema_to_fetch]; - - if (DEBUG_ENABLED) - debug_log('Returning CACHED (%s)',25,__FILE__,__LINE__,__METHOD__,$schema); - - return $schema; - } - - # This error message is not localized as only developers should ever see it - if (! in_array($schema_to_fetch,$valid_schema_to_fetch)) - error(sprintf('Bad parameter provided to function to %s::getRawSchema(). "%s" is not valid for the schema_to_fetch parameter.', - get_class($this),htmlspecialchars($schema_to_fetch)),'error','index.php'); - - # Try to get the schema DN from the specified entry. - $schema_dn = $this->getSchemaDN($dn); - - # Do we need to try again with the Root DSE? - if (! $schema_dn) - $schema_dn = $this->getSchemaDN(''); - - # Store the eventual schema retrieval in $schema_search - $schema_search = null; - - if ($schema_dn) { - if (DEBUG_ENABLED) - debug_log('Using Schema DN (%s)',24,__FILE__,__LINE__,__METHOD__,$schema_dn); - - foreach (array('(objectClass=*)','(objectClass=subschema)') as $schema_filter) { - if (DEBUG_ENABLED) - debug_log('Looking for schema with Filter (%s)',24,__FILE__,__LINE__,__METHOD__,$schema_filter); - - $schema_search = @ldap_read($this->connect(),$schema_dn,$schema_filter,array($schema_to_fetch),0,0,0,LDAP_DEREF_ALWAYS); - - if (is_null($schema_search)) - continue; - - $schema_entries = @ldap_get_entries($this->connect(),$schema_search); - - if (DEBUG_ENABLED) - debug_log('Search returned [%s]',24,__FILE__,__LINE__,__METHOD__,$schema_entries); - - if (is_array($schema_entries) && isset($schema_entries['count']) && $schema_entries['count']) { - if (DEBUG_ENABLED) - debug_log('Found schema with (DN:%s) (FILTER:%s) (ATTR:%s)',24,__FILE__,__LINE__,__METHOD__, - $schema_dn,$schema_filter,$schema_to_fetch); - - break; - } - - if (DEBUG_ENABLED) - debug_log('Didnt find schema with filter (%s)',24,__FILE__,__LINE__,__METHOD__,$schema_filter); - - unset($schema_entries); - $schema_search = null; - } - } - - /* Second chance: If the DN or Root DSE didn't give us the subschemaSubentry, ie $schema_search - * is still null, use some common subSchemaSubentry DNs as a work-around. */ - if (is_null($schema_search)) { - if (DEBUG_ENABLED) - debug_log('Attempting work-arounds for "broken" LDAP servers...',24,__FILE__,__LINE__,__METHOD__); - - foreach ($this->getBaseDN() as $base) { - $ldap['W2K3 AD'][expand_dn_with_base($base,'cn=Aggregate,cn=Schema,cn=configuration,')] = '(objectClass=*)'; - $ldap['W2K AD'][expand_dn_with_base($base,'cn=Schema,cn=configuration,')] = '(objectClass=*)'; - $ldap['W2K AD'][expand_dn_with_base($base,'cn=Schema,ou=Admin,')] = '(objectClass=*)'; - } - - # OpenLDAP and Novell - $ldap['OpenLDAP']['cn=subschema'] = '(objectClass=*)'; - - foreach ($ldap as $ldap_server_name => $ldap_options) { - foreach ($ldap_options as $ldap_dn => $ldap_filter) { - if (DEBUG_ENABLED) - debug_log('Attempting [%s] (%s) (%s)
',24,__FILE__,__LINE__,__METHOD__, - $ldap_server_name,$ldap_dn,$ldap_filter); - - $schema_search = @ldap_read($this->connect(),$ldap_dn,$ldap_filter, - array($schema_to_fetch), 0, 0, 0, LDAP_DEREF_ALWAYS); - if (is_null($schema_search)) - continue; - - $schema_entries = @ldap_get_entries($this->connect(),$schema_search); - - if (DEBUG_ENABLED) - debug_log('Search returned [%s]',24,__FILE__,__LINE__,__METHOD__,$schema_entries); - - if ($schema_entries && isset($schema_entries[0][$schema_to_fetch])) { - if (DEBUG_ENABLED) - debug_log('Found schema with filter of (%s)',24,__FILE__,__LINE__,__METHOD__,$ldap_filter); - - break; - } - - if (DEBUG_ENABLED) - debug_log('Didnt find schema with filter (%s)',24,__FILE__,__LINE__,__METHOD__,$ldap_filter); - - unset($schema_entries); - $schema_search = null; - } - if ($schema_search) - break; - } - } - - if (is_null($schema_search)) { - /* Still cant find the schema, try with the RootDSE - * Attempt to pull schema from Root DSE with scope "base", or - * Attempt to pull schema from Root DSE with scope "one" (work-around for Isode M-Vault X.500/LDAP) */ - foreach (array('base','one') as $ldap_scope) { - if (DEBUG_ENABLED) - debug_log('Attempting to find schema with scope (%s), filter (objectClass=*) and a blank base.',24,__FILE__,__LINE__,__METHOD__, - $ldap_scope); - - switch ($ldap_scope) { - case 'base': - $schema_search = @ldap_read($this->connect(),'','(objectClass=*)',array($schema_to_fetch),0,0,0,LDAP_DEREF_ALWAYS); - break; - - case 'one': - $schema_search = @ldap_list($this->connect(),'','(objectClass=*)',array($schema_to_fetch),0,0,0,LDAP_DEREF_ALWAYS); - break; - } - - if (is_null($schema_search)) - continue; - - $schema_entries = @ldap_get_entries($this->connect(),$schema_search); - if (DEBUG_ENABLED) - debug_log('Search returned [%s]',24,__FILE__,__LINE__,__METHOD__,$schema_entries); - - if ($schema_entries && isset($schema_entries[0][$schema_to_fetch])) { - if (DEBUG_ENABLED) - debug_log('Found schema with filter of (%s)',24,__FILE__,__LINE__,__METHOD__,'(objectClass=*)'); - - break; - } - - if (DEBUG_ENABLED) - debug_log('Didnt find schema with filter (%s)',24,__FILE__,__LINE__,__METHOD__,'(objectClass=*)'); - - unset($schema_entries); - $schema_search = null; - } - } - - $schema_error_message = 'Please contact the phpLDAPadmin developers and let them know:
  • Which LDAP server you are running, including which version
  • What OS it is running on
  • Which version of PHP
  • As well as a link to some documentation that describes how to obtain the SCHEMA information

We\'ll then add support for your LDAP server in an upcoming release.'; - $schema_error_message_array = array('objectclasses','attributetypes'); - - # Shall we just give up? - if (is_null($schema_search)) { - - # We need to have objectclasses and attribues, so display an error, asking the user to get us this information. - if (in_array($schema_to_fetch,$schema_error_message_array)) { - error(sprintf('Our attempts to find your SCHEMA for "%s" have FAILED.

%s',$schema_to_fetch,$schema_error_message),'error','index.php'); - - } else { - $return = false; - - if (DEBUG_ENABLED) - debug_log('Returning because schema_search is NULL (%s)',25,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - } - - # Did we get something unrecognizable? - if (gettype($schema_search) != 'resource') { - if (in_array($schema_to_fetch,$schema_error_message_array)) { - error(sprintf('Our attempts to find your SCHEMA for "%s" has return UNEXPECTED results.

(We expected a "resource" for $schema_search, instead, we got (%s))

%s

Dump of $schema_search:
%s
', - $schema_to_fetch,gettype($schema_search),$schema_error_message,serialize($schema_search)),'error','index.php'); - - } else { - $return = false; - - if (DEBUG_ENABLED) - debug_log('Returning because schema_search type is not a resource (%s)',25,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - } - - if (! $schema_entries) { - $return = false; - if (DEBUG_ENABLED) - debug_log('Returning false since ldap_get_entries() returned false.',25,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - if(! isset($schema_entries[0][$schema_to_fetch])) { - if (in_array($schema_to_fetch,$schema_error_message_array)) { - error(sprintf('Our attempts to find your SCHEMA for "%s" has return UNEXPECTED results.

(We expected a "%s" in the $schema array but it wasnt there.)

%s

Dump of $schema_search:
%s
', - $schema_to_fetch,gettype($schema_search),$schema_error_message,serialize($schema_entries)),'error','index.php'); - - } else { - $return = false; - - if (DEBUG_ENABLED) - debug_log('Returning because (%s) isnt in the schema array. (%s)',25,__FILE__,__LINE__,__METHOD__,$schema_to_fetch,$return); - - return $return; - } - } - - /* Make a nice array of this form: - Array ( - [0] => "(1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' DESC 'Pool ...)" - [1] => "(1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' DESC 'Sa ...)" - etc.) */ - - $schema = $schema_entries[0][$schema_to_fetch]; - unset($schema['count']); - $this->_schema_entries[$schema_to_fetch] = $schema; - - if (DEBUG_ENABLED) - debug_log('Returning (%s)',25,__FILE__,__LINE__,__METHOD__,$schema); - - return $schema; - } - - /** - * Return the attribute used for login - */ - function getLoginAttr() { - return $this->login_attr; - } - - /** - * Fetches whether the login_attr feature is enabled for a specified server. - * - * This is configured in config.php thus: - * - * $ldapservers->SetValue($i,'login','attr',''); - * - * - * By virtue of the fact that the login_attr is not blank and not 'dn', the - * feature is configured to be enabled. - * - * @default uid - * @return bool - */ - function isLoginAttrEnabled() { - if ((strcasecmp($this->getLoginAttr(),'dn') != 0) && trim($this->getLoginAttr())) - $return = true; - else - $return = false; - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - /** - * Fetches whether the login_attr feature is enabled for a specified server. - * - * This is configured in config.php thus: - * - * $ldapservers->SetValue($i,'login','attr','string'); - * - * - * @return bool - */ - function isLoginStringEnabled() { - if (DEBUG_ENABLED) - debug_log('login_attr is [%s]',80,__FILE__,__LINE__,__METHOD__,$this->getLoginAttr()); - - if (! strcasecmp($this->getLoginAttr(),'string')) - $return = true; - else - $return = false; - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - /** - * Fetches the login_attr string if enabled for a specified server. - * - * This is configured in config.php thus: - * - * $ldapservers->SetValue($i,'login','login_string','uid=,ou=People,dc=example,dc=com'); - * - * - * @return string|false - */ - function getLoginString() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__,__FILE__,__LINE__,__METHOD__); - - return $this->login_string; - } - - /** - * Fetch whether the user has configured a certain server login to be non anonymous - * - * - * $ldapservers->SetValue($i,'login','anon_bind','true|false'); - * - * - * @default true - * @return bool - */ - function isAnonBindAllowed() { - # If only_login_allowed_dns is set, then we cant have anonymous. - if (count($_SESSION[APPCONFIG]->ldapservers->GetValue($this->server_id,'login','allowed_dns')) > 0) - $return = false; - else - $return = $_SESSION[APPCONFIG]->ldapservers->GetValue($this->server_id,'login','anon_bind'); - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - /** - * Fetches whether TLS has been configured for use with a certain server. - * - * Users may configure phpLDAPadmin to use TLS in config,php thus: - * - * $ldapservers->SetValue($i,'login','tls','true|false'); - * - * - * @default false - * @return bool - */ - function isTLSEnabled() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); - - return $this->tls; - } - - /** - * Returns true if the user has configured the specified server to enable branch (non-leaf) renames. - * - * This is configured in config.php thus: - * - * $ldapservers->SetValue($i,'server','branch_rename','true|false'); - * - * - * @default false - * @param int $server_id The ID of the server of interest from config.php. - * @return bool - */ - function isBranchRenameEnabled() { - debug_log('Entered with (), Returning (%s).',17,__FILE__,__LINE__,__METHOD__,$this->branch_rename); - - return $this->branch_rename; - } - - /** - * Gets an associative array of ObjectClass objects for the specified - * server. Each array entry's key is the name of the objectClass - * in lower-case and the value is an ObjectClass object. - * - * @param string $dn (optional) It is easier to fetch schema if a DN is provided - * which defines the subschemaSubEntry attribute (all entries should). - * - * @return array An array of ObjectClass objects. - * - * @see ObjectClass - * @see getSchemaObjectClass - */ - function SchemaObjectClasses($dn='') { - debug_log('Entered with (%s)',25,__FILE__,__LINE__,__METHOD__,$dn); - - # Set default return - $return = null; - - if ($return = get_cached_item($this->server_id,'schema','objectclasses')) { - debug_log('Returning CACHED [%s] (%s)',25,__FILE__,__LINE__,__METHOD__,$this->server_id,'objectclasses'); - - return $return; - } - - $raw_oclasses = $this->getRawSchema('objectclasses',$dn); - - if ($raw_oclasses) { - # build the array of objectClasses - $return = array(); - - foreach ($raw_oclasses as $class_string) { - if (is_null($class_string) || ! strlen($class_string)) - continue; - - $object_class = new ObjectClass($class_string,$this); - $return[strtolower($object_class->getName())] = $object_class; - } - - # Now go through and reference the parent/child relationships - foreach ($return as $oclass) { - foreach ($oclass->getSupClasses() as $parent_name) { - if (isset($return[strtolower($parent_name)])) - $return[strtolower($parent_name)]->addChildObjectClass($oclass->getName()); - } - } - - ksort($return); - - # cache the schema to prevent multiple schema fetches from LDAP server - set_cached_item($this->server_id,'schema','objectclasses',$return); - } - - debug_log('Returning (%s)',25,__FILE__,__LINE__,__METHOD__,$return); - return $return; - } - - /** - * Gets a single ObjectClass object specified by name. - * - * @param string $oclass_name The name of the objectClass to fetch. - * @param string $dn (optional) It is easier to fetch schema if a DN is provided - * which defines the subschemaSubEntry attribute (all entries should). - * - * @return ObjectClass The specified ObjectClass object or false on error. - * - * @see ObjectClass - * @see SchemaObjectClasses - */ - function getSchemaObjectClass($oclass_name,$dn='') { - $oclass_name = strtolower($oclass_name); - $oclasses = $this->SchemaObjectClasses($dn); - - # Default return value - $return = false; - - if (isset($oclasses[$oclass_name])) - $return = $oclasses[$oclass_name]; - - debug_log('Entered with (%s,%s), Returning (%s).',25,__FILE__,__LINE__,__METHOD__,$oclass_name,$dn,$return); - return $return; - } - - /** - * Gets a single AttributeType object specified by name. - * - * @param string $oclass_name The name of the AttributeType to fetch. - * @param string $dn (optional) It is easier to fetch schema if a DN is provided - * which defines the subschemaSubEntry attribute (all entries should). - * - * @return AttributeType The specified AttributeType object or false on error. - * - * @see AttributeType - * @see SchemaAttributes - */ - function getSchemaAttribute($attr_name,$dn=null) { - $attr_name = real_attr_name(strtolower($attr_name)); - $schema_attrs = $this->SchemaAttributes($dn); - - # Default return value - $return = false; - - if (isset($schema_attrs[$attr_name])) - $return = $schema_attrs[$attr_name]; - - debug_log('Entered with (%s,%s), Returning (%s).',25,__FILE__,__LINE__,__METHOD__,$attr_name,$dn,$return); - return $return; - } - - /** - * Gets an associative array of AttributeType objects for the specified - * server. Each array entry's key is the name of the attributeType - * in lower-case and the value is an AttributeType object. - * - * @param int $server_id The ID of the server whose AttributeTypes to fetch - * @param string $dn (optional) It is easier to fetch schema if a DN is provided - * which defines the subschemaSubEntry attribute (all entries should). - * - * @return array An array of AttributeType objects. - */ - function SchemaAttributes($dn=null) { - debug_log('Entered with (%s)',25,__FILE__,__LINE__,__METHOD__,$dn); - - # Set default return - $return = null; - - if ($return = get_cached_item($this->server_id,'schema','attributes')) { - debug_log('(): Returning CACHED [%s] (%s)',25,__FILE__,__LINE__,__METHOD__,$this->server_id,'attributes'); - return $return; - } - - $raw_attrs = $this->getRawSchema('attributeTypes',$dn); - if ($raw_attrs) { - # build the array of attribueTypes - $syntaxes = $this->SchemaSyntaxes($dn); - $attrs = array(); - - /** - * bug 856832: create two arrays - one indexed by name (the standard - * $attrs array above) and one indexed by oid (the new $attrs_oid array - * below). This will help for directory servers, like IBM's, that use OIDs - * in their attribute definitions of SUP, etc - */ - $attrs_oid = array(); - foreach ($raw_attrs as $attr_string) { - if (is_null($attr_string) || ! strlen($attr_string)) - continue; - - $attr = new AttributeType($attr_string); - if (isset($syntaxes[$attr->getSyntaxOID()])) { - $syntax = $syntaxes[$attr->getSyntaxOID()]; - $attr->setType($syntax->getDescription()); - } - $attrs[strtolower($attr->getName())] = $attr; - - /** - * bug 856832: create an entry in the $attrs_oid array too. This - * will be a ref to the $attrs entry for maintenance and performance - * reasons - */ - $attrs_oid[$attr->getOID()] = &$attrs[strtolower($attr->getName())]; - } - - # go back and add data from aliased attributeTypes - foreach ($attrs as $name => $attr) { - $aliases = $attr->getAliases(); - - if (is_array($aliases) && count($aliases) > 0) { - /* foreach of the attribute's aliases, create a new entry in the attrs array - * with its name set to the alias name, and all other data copied.*/ - foreach ($aliases as $alias_attr_name) { - $new_attr = clone $attr; - - $new_attr->setName($alias_attr_name); - $new_attr->addAlias($attr->getName()); - $new_attr->removeAlias($alias_attr_name); - $new_attr_key = strtolower($alias_attr_name); - $attrs[$new_attr_key] = $new_attr; - } - } - } - - # go back and add any inherited descriptions from parent attributes (ie, cn inherits name) - foreach ($attrs as $key => $attr) { - $sup_attr_name = $attr->getSupAttribute(); - $sup_attr = null; - - if (trim($sup_attr_name)) { - - /* This loop really should traverse infinite levels of inheritance (SUP) for attributeTypes, - * but just in case we get carried away, stop at 100. This shouldn't happen, but for - * some weird reason, we have had someone report that it has happened. Oh well.*/ - $i = 0; - while ($i++<100 /** 100 == INFINITY ;) */) { - - if (isset($attrs_oid[$sup_attr_name])) { - $attr->setSupAttribute($attrs_oid[$sup_attr_name]->getName()); - $sup_attr_name = $attr->getSupAttribute(); - } - - if (! isset($attrs[strtolower($sup_attr_name)])){ - error(sprintf('Schema error: attributeType "%s" inherits from "%s", but attributeType "%s" does not exist.', - $attr->getName(),$sup_attr_name,$sup_attr_name),'error','index.php'); - return; - } - - $sup_attr = $attrs[strtolower($sup_attr_name)]; - $sup_attr_name = $sup_attr->getSupAttribute(); - - # Does this superior attributeType not have a superior attributeType? - if (is_null($sup_attr_name) || strlen(trim($sup_attr_name)) == 0) { - - /* Since this attribute's superior attribute does not have another superior - * attribute, clone its properties for this attribute. Then, replace - * those cloned values with those that can be explicitly set by the child - * attribute attr). Save those few properties which the child can set here:*/ - $tmp_name = $attr->getName(); - $tmp_oid = $attr->getOID(); - $tmp_sup = $attr->getSupAttribute(); - $tmp_aliases = $attr->getAliases(); - $tmp_single_val = $attr->getIsSingleValue(); - $tmp_desc = $attr->getDescription(); - - /* clone the SUP attributeType and populate those values - * that were set by the child attributeType */ - $attr = clone $sup_attr; - - $attr->setOID($tmp_oid); - $attr->setName($tmp_name); - $attr->setSupAttribute($tmp_sup); - $attr->setAliases($tmp_aliases); - $attr->setDescription($tmp_desc); - - /* only overwrite the SINGLE-VALUE property if the child explicitly sets it - * (note: All LDAP attributes default to multi-value if not explicitly set SINGLE-VALUE) */ - if ($tmp_single_val) - $attr->setIsSingleValue(true); - - /* replace this attribute in the attrs array now that we have populated - new values therein */ - $attrs[$key] = $attr; - - # very important: break out after we are done with this attribute - $sup_attr_name = null; - $sup_attr = null; - break; - } - } - } - } - - ksort($attrs); - - # Add the used in and required_by values. - $schema_object_classes = $this->SchemaObjectClasses(); - if (! is_array($schema_object_classes)) - return array(); - - foreach ($schema_object_classes as $object_class) { - $must_attrs = $object_class->getMustAttrNames($schema_object_classes); - $may_attrs = $object_class->getMayAttrNames($schema_object_classes); - $oclass_attrs = array_unique(array_merge($must_attrs,$may_attrs)); - - # Add Used In. - foreach ($oclass_attrs as $attr_name) { - if (isset($attrs[strtolower($attr_name)])) - $attrs[strtolower($attr_name)]->addUsedInObjectClass($object_class->getName()); - - else { - #echo "Warning, attr not set: $attr_name
"; - } - } - - # Add Required By. - foreach ($must_attrs as $attr_name) { - if (isset($attrs[strtolower($attr_name)])) - $attrs[strtolower($attr_name)]->addRequiredByObjectClass($object_class->getName()); - - else { - #echo "Warning, attr not set: $attr_name
"; - } - } - - # Force May - foreach ($object_class->force_may as $attr_name) { - if (isset($attrs[strtolower($attr_name->name)])) - $attrs[strtolower($attr_name->name)]->setForceMay(); - - else { - #echo "Warning, attr not set: $attr_name
"; - } - } - } - - $return = $attrs; - - # cache the schema to prevent multiple schema fetches from LDAP server - set_cached_item($this->server_id,'schema','attributes',$return); - } - - debug_log('Returning (%s)',25,__FILE__,__LINE__,__METHOD__,$return); - return $return; - } - - /** - * Returns an array of MatchingRule objects for the specified server. - * The key of each entry is the OID of the matching rule. - */ - function MatchingRules($dn=null) { - # Set default return - $return = null; - - if ($return = get_cached_item($this->server_id,'schema','matchingrules')) { - debug_log('Returning CACHED [%s] (%s).',25,__FILE__,__LINE__,__METHOD__,$this->server_id,'matchingrules'); - return $return; - } - - # build the array of MatchingRule objects - $raw_matching_rules = $this->getRawSchema('matchingRules',$dn); - - if ($raw_matching_rules) { - $rules = array(); - - foreach ($raw_matching_rules as $rule_string) { - if (is_null($rule_string) || 0 == strlen($rule_string)) - continue; - - $rule = new MatchingRule($rule_string); - $key = strtolower($rule->getName()); - $rules[$key] = $rule; - } - - ksort($rules); - - /* For each MatchingRuleUse entry, add the attributes who use it to the - * MatchingRule in the $rules array.*/ - $raw_matching_rule_use = $this->getRawSchema('matchingRuleUse'); - - if ($raw_matching_rule_use != false) { - foreach ($raw_matching_rule_use as $rule_use_string) { - if ($rule_use_string == null || 0 == strlen($rule_use_string)) - continue; - - $rule_use = new MatchingRuleUse($rule_use_string); - $key = strtolower($rule_use->getName()); - - if (isset($rules[$key])) - $rules[$key]->setUsedByAttrs($rule_use->getUsedByAttrs()); - } - - } else { - /* No MatchingRuleUse entry in the subschema, so brute-forcing - * the reverse-map for the "$rule->getUsedByAttrs()" data.*/ - $attrs = $this->SchemaAttributes($dn); - if (is_array($attrs)) - foreach ($attrs as $attr) { - $rule_key = strtolower($attr->getEquality()); - - if (isset($rules[$rule_key])) - $rules[$rule_key]->addUsedByAttr($attr->getName()); - } - } - - $return = $rules; - - # cache the schema to prevent multiple schema fetches from LDAP server - set_cached_item($this->server_id,'schema','matchingrules',$return); - } - - debug_log('Entered with (%s), Returning (%s).',25,__FILE__,__LINE__,__METHOD__,$dn,$return); - return $return; - } - - /** - * Returns an array of Syntax objects that this LDAP server uses mapped to - * their descriptions. The key of each entry is the OID of the Syntax. - */ - function SchemaSyntaxes($dn=null) { - # Set default return - $return = null; - - if ($return = get_cached_item($this->server_id,'schema','syntaxes')) { - debug_log('Returning CACHED [%s] (%s).',25,__FILE__,__LINE__,__METHOD__,$this->server_id,'syntaxes'); - return $return; - } - - $raw_syntaxes = $this->getRawSchema('ldapSyntaxes',$dn); - - if ($raw_syntaxes) { - # build the array of attributes - $return = array(); - - foreach ($raw_syntaxes as $syntax_string) { - $syntax = new Syntax($syntax_string); - $key = strtolower(trim($syntax->getOID())); - - if (! $key) - continue; - - $return[$key] = $syntax; - } - - ksort($return); - - # cache the schema to prevent multiple schema fetches from LDAP server - set_cached_item($this->server_id,'schema','syntaxes',$return); - } - - debug_log('Entered with (%s), Returning (%s).',25,__FILE__,__LINE__,__METHOD__,$dn,$return); - return $return; - } - - /** - * Add objects - * - */ - function add($dn,$entry_array) { - $this->lastop = 'write'; - foreach ($entry_array as $attr => $val) { - $entry_array[$attr] = dn_unescape($val); - } - $result = @ldap_add($this->connect(true,$this->lastop,false,false),dn_escape($dn),$entry_array); - - if ($result) { - $tree = get_cached_item($this->server_id,'tree'); - $tree->addEntry($dn); - - set_cached_item($this->server_id,'tree','null',$tree); - } - - return $result; - } - - /** - * Modify objects - */ - function modify($dn,$update_array) { - $this->lastop = 'write'; - return @ldap_modify($this->connect(true,$this->lastop,false,false),dn_escape($dn),$update_array); - } - - /** - * Modify attributes - */ - function attrModify($dn,$update_array) { - $this->lastop = 'write'; - return @ldap_mod_add($this->connect(true,$this->lastop,false,false),dn_escape($dn),$update_array); - } - - function attrDelete($dn,$update_array) { - $this->lastop = 'write'; - return @ldap_mod_del($this->connect(true,$this->lastop,false,false),dn_escape($dn),$update_array); - } - - function attrReplace($dn,$update_array) { - $this->lastop = 'write'; - return @ldap_mod_replace($this->connect(true,$this->lastop,false,false),dn_escape($dn),$update_array); - } - - /** - * Delete objects - */ - function delete($dn) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$dn); - - $this->lastop = 'write'; - $result = @ldap_delete($this->connect(true,$this->lastop,false,false),dn_escape($dn)); - if (DEBUG_ENABLED) - debug_log('Delete Result (%s)',16,__FILE__,__LINE__,__METHOD__,$result); - - if ($result) { - $tree = get_cached_item($this->server_id,'tree'); - $tree->delEntry($dn); - - set_cached_item($this->server_id,'tree','null',$tree); - } - - return $result; - } - - /** - * Rename objects - * - */ - function rename($dn,$new_rdn,$container,$deleteoldrdn) { - $this->lastop = 'write'; - if (! @ldap_rename($this->connect(true,$this->lastop,false,false),$dn,$new_rdn,$container,$deleteoldrdn)) { - system_message(array( - 'title'=>_('Could not rename the entry.'), - 'body'=>ldap_error_msg($this->error(),$this->errno()), - 'type'=>'error')); - - } else { - # Update the tree - $tree = get_cached_item($this->server_id,'tree'); - $newdn = sprintf('%s,%s',$new_rdn,$container); - $tree->renameEntry($dn, $newdn); - - set_cached_item($this->server_id,'tree','null',$tree); - - return true; - } - } - - /** - * Return error from last operation - * @todo: This may not infact return the right error - especially if a different connect(params) were used. - */ - function error() { - return ldap_error($this->connect(false,$this->lastop)); - } - - /** - * Return errno from last operation - * @todo: This may not infact return the right error - especially if a different connect(params) were used. - */ - function errno() { - return ldap_errno($this->connect(false,$this->lastop)); - } - - /** - * Gets whether an entry exists based on its DN. If the entry exists, - * returns true. Otherwise returns false. - * - * If we are not aware of the dn, and a read results in a hit, then - * we'll update the info for the tree. - * - * @param string $dn The DN of the entry of interest. - * @return bool - */ - function dnExists($dn) { - # Set default return - $return = false; - $this->lastop = 'read'; - - $tree = get_cached_item($this->server_id,'tree'); - if (! $tree) - $tree = Tree::getInstance($this->server_id); - - $entry_dn = $tree->getEntry($dn); - if ($entry_dn) { - if (DEBUG_ENABLED) - debug_log('Returning CACHED HIT (%s)',17,__FILE__,__LINE__,__METHOD__,$this->server_id,$dn); - return true; - - } elseif ($tree->isMissed($dn)) { - if (DEBUG_ENABLED) - debug_log('Returning CACHED MISS (%s)',17,__FILE__,__LINE__,__METHOD__,$this->server_id,$dn); - return false; - - # We havent looked for this dn. - } else { - if (DEBUG_ENABLED) - debug_log('Search for (%s) [%s]',16,__FILE__,__LINE__,__METHOD__,$this->server_id,$dn); - - # if the entry is not in the tree, we are doing a global search - $search_result = @ldap_read($this->connect(false),dn_escape($dn),'objectClass=*',array('dn')); - - if ($search_result) { - $num_entries = ldap_count_entries($this->connect(false),$search_result); - - if ($num_entries > 0) - $return = true; - else - $return = false; - - } else { - $return = false; - } - } - - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$this->server_id,$dn,$return); - - return $return; - } - - /** - * Gets a list of child entries for an entry. Given a DN, this function fetches the list of DNs of - * child entries one level beneath the parent. For example, for the following tree: - * - * - * dc=example,dc=com - * ou=People - * cn=Dave - * cn=Fred - * cn=Joe - * ou=More People - * cn=Mark - * cn=Bob - * - * - * Calling getContainerContents("ou=people,dc=example,dc=com") - * would return the following list: - * - * - * cn=Dave - * cn=Fred - * cn=Joe - * ou=More People - * - * - * @param string $dn The DN of the entry whose children to return. - * @param int $size_limit (optional) The maximum number of entries to return. - * If unspecified, no limit is applied to the number of entries in the returned. - * @param string $filter (optional) An LDAP filter to apply when fetching children, example: "(objectClass=inetOrgPerson)" - * @return array An array of DN strings listing the immediate children of the specified entry. - */ - - function getContainerContents($dn,$size_limit=0,$filter='(objectClass=*)',$deref=LDAP_DEREF_ALWAYS) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$size_limit,$filter,$deref); - - $return = array(); - - $search = $this->search(null,dn_escape($dn),$filter,array('dn'),'one',true,$deref,/*($size_limit > 0 ? $size_limit+1 : $size_limit)*/$size_limit); - if ($search) { - foreach ($search as $searchdn => $entry) { - $child_dn = $entry['dn']; - $return[] = $child_dn; - } - } - - if (DEBUG_ENABLED) - debug_log('Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - /** - * A handy ldap searching function very similar to PHP's ldap_search() with the - * following exceptions: Callers may specify a search scope and the return value - * is an array containing the search results rather than an LDAP result resource. - * - * Example usage: - * - * $samba_users = $ldapserver->search(null,"ou=People,dc=example,dc=com", - * "(&(objectClass=sambaAccount)(objectClass=posixAccount))", - * array("uid","homeDirectory")); - * print_r( $samba_users ); - * - * // prints (for example): - * // Array ( - * // [uid=jsmith,ou=People,dc=example,dc=com] => Array ( - * // [dn] => "uid=jsmith,ou=People,dc=example,dc=com" - * // [uid] => "jsmith" - * // [homeDirectory] => "\\server\jsmith" - * // ) - * // [uid=byoung,ou=People,dc=example,dc=com] => Array ( - * // [dn] => "uid=byoung,ou=Samba,ou=People,dc=example,dc=com" - * // [uid] => "byoung" - * // [homeDirectory] => "\\server\byoung" - * // ) - * // ) - * - * - * WARNING: This function will use a lot of memory on large searches since the entire result set is - * stored in a single array. For large searches, you should consider sing the less memory intensive - * PHP LDAP API directly (ldap_search(), ldap_next_entry(), ldap_next_attribute(), etc). - * - * @param resource $resource If an existing LDAP results should be used. - * @param string $filter The LDAP filter to use when searching (example: "(objectClass=*)") (see RFC 2254) - * @param string $base_dn The DN of the base of search. - * @param array $attrs An array of attributes to include in the search result (example: array( "objectClass", "uid", "sn" )). - * @param string $scope The LDAP search scope. Must be one of "base", "one", or "sub". Standard LDAP search scope. - * @param bool $sort_results Specify false to not sort results by DN - * or true to have the returned array sorted by DN (uses ksort) - * or an array of attribute names to sort by attribute values - * @param int $deref When handling aliases or referrals, this specifies whether to follow referrals. Must be one of - * LDAP_DEREF_ALWAYS, LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, or LDAP_DEREF_FINDING. See the PHP LDAP API for details. - * @param int $size_limit Size limit for search - */ - function search($resource=null,$base_dn=null,$filter,$attrs=array(),$scope='sub',$sort_results=true,$deref=LDAP_DEREF_NEVER,$size_limit=0) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s,%s,%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__, - is_resource($this),$base_dn,$filter,$attrs,$scope,$sort_results,$deref); - $this->lastop = 'read'; - - # If we dont have a resource, we'll connect with default settings - if (! is_resource($resource)) - $resource = $this->connect(false); - - # If the baseDN is null, we'll just search the first DN. - if (is_null($base_dn)) - foreach ($this->getBaseDN() as $baseDN) { - $base_dn = $baseDN; - break; - } - - if (DEBUG_ENABLED) - debug_log('%s search PREPARE.',16,__FILE__,__LINE__,__METHOD__,$scope); - - switch ($scope) { - case 'base': - $search = @ldap_read($resource,$base_dn,$filter,$attrs,0,$size_limit,0,$deref); - break; - - case 'one': - $search = @ldap_list($resource,$base_dn,$filter,$attrs,0,$size_limit,0,$deref); - break; - - case 'sub': - default: - $search = @ldap_search($resource,$base_dn,$filter,$attrs,0,$size_limit,0,$deref); - break; - } - - if (DEBUG_ENABLED) - debug_log('Search scope [%s] base [%s] filter [%s] attrs [%s] COMPLETE (%s).',16,__FILE__,__LINE__,__METHOD__, - $scope,$base_dn,$filter,$attrs,is_null($search)); - - if (! $search) - return array(); - - $return = array(); - - # @todo: this needs to convert everything to lowercase to work. - if (is_array($sort_results)) - # we sort with the more important attribute (the first one) at the end - for ($i = count($sort_results) - 1; $i >= 0; --$i) - if (($sort_results[$i] == 'dn') || in_array($sort_results[$i], $attrs)) - ldap_sort($resource, $search, $sort_results[$i]); - - # Get the first entry identifier - if ($entry_id = ldap_first_entry($resource,$search)) { - - # Iterate over the entries - while ($entry_id) { - - # Get the distinguished name of the entry - $dn = ldap_get_dn($resource,$entry_id); - - if (DEBUG_ENABLED) - debug_log('Got DN [%s].',64,__FILE__,__LINE__,__METHOD__,$dn); - - $return[$dn]['dn'] = $dn; - - # Get the attributes of the entry - $attrs = ldap_get_attributes($resource,$entry_id); - - if (DEBUG_ENABLED) - debug_log('Got ATTRS [%s].',64,__FILE__,__LINE__,__METHOD__,$attrs); - - # Get the first attribute of the entry - if ($attr = ldap_first_attribute($resource,$entry_id,$attrs)) { - - if (DEBUG_ENABLED) - debug_log('Processing First ATTR [%s].',64,__FILE__,__LINE__,__METHOD__,$attr); - - # Iterate over the attributes - while ($attr) { - /* It seems that OpenDS complains when you do a ldap_get_values on these attributes - we'll skip them as a workaround */ - if (in_array($attr,array('isMemberOf'))) { - $attr = ldap_next_attribute($resource,$entry_id,$attrs); - continue; - } - - if ($this->isAttrBinary($attr)) - $values = ldap_get_values_len($resource,$entry_id,$attr); - else - $values = ldap_get_values($resource,$entry_id,$attr); - - # Get the number of values for this attribute - $count = $values['count']; - unset($values['count']); - - if ($count == 1) - $return[$dn][$attr] = $values[0]; - else - $return[$dn][$attr] = $values; - - $attr = ldap_next_attribute($resource,$entry_id,$attrs); - - if (DEBUG_ENABLED) - debug_log('Processing Next ATTR [%s].',64,__FILE__,__LINE__,__METHOD__,$attr); - - } # end while attr - } - - $entry_id = ldap_next_entry($resource,$entry_id); - - } # End while entry_id - } - - if (($sort_results === true) && is_array($return)) - ksort($return); - - if (DEBUG_ENABLED) - debug_log('Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - /** - * Determines if an attribute's value can contain multiple lines. Attributes that fall - * in this multi-line category may be configured in config.php. Hence, this function - * accesses the global variable $_SESSION[APPCONFIG]->custom->appearance['multi_line_attributes']; - * - * Usage example: - * - * if ($ldapserver->isMultiLineAttr('postalAddress')) - * echo ""; - * else - * echo ""; - * - * - * @param string $attr_name The name of the attribute of interestd (case insensivite) - * @param string $val (optional) The current value of the attribute (speeds up the - * process by searching for carriage returns already in the attribute value) - * @return bool - */ - function isMultiLineAttr($attr_name,$val=null) { - # Set default return - $return = false; - - # First, check the optional val param for a \n or a \r - if (! is_null($val) && (strpos($val,"\n") || strpos($val,"\r"))) - $return = true; - - # Next, compare strictly by name first - else - foreach ($_SESSION[APPCONFIG]->GetValue('appearance','multi_line_attributes') as $multi_line_attr_name) - if (strcasecmp($multi_line_attr_name,$attr_name) == 0) { - $return = true; - break; - } - - # If unfound, compare by syntax OID - if (! $return) { - $schema_attr = $this->getSchemaAttribute($attr_name); - - if ($schema_attr) { - $syntax_oid = $schema_attr->getSyntaxOID(); - - if ($syntax_oid) - foreach ($_SESSION[APPCONFIG]->GetValue('appearance','multi_line_syntax_oids') as $multi_line_syntax_oid) - if ($multi_line_syntax_oid == $syntax_oid) { - $return = true; - break; - } - } - } - - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name,$val,$return); - - return $return; - } - - /** - * Returns true if the attribute specified is required to take as input a DN. - * Some examples include 'distinguishedName', 'member' and 'uniqueMember'. - * @param string $attr_name The name of the attribute of interest (case insensitive) - * @return bool - */ - function isDNAttr($attr_name) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); - - # Simple test first - $dn_attrs = array('aliasedObjectName'); - foreach ($dn_attrs as $dn_attr) - if (strcasecmp($attr_name,$dn_attr) == 0) - return true; - - # Now look at the schema OID - $attr_schema = $this->getSchemaAttribute($attr_name); - if (! $attr_schema) - return false; - - $syntax_oid = $attr_schema->getSyntaxOID(); - if ('1.3.6.1.4.1.1466.115.121.1.12' == $syntax_oid) - return true; - if ('1.3.6.1.4.1.1466.115.121.1.34' == $syntax_oid) - return true; - - $syntaxes = $this->SchemaSyntaxes(); - if (! isset($syntaxes[$syntax_oid])) - return false; - - $syntax_desc = $syntaxes[ $syntax_oid ]->getDescription(); - if (strpos(strtolower($syntax_desc),'distinguished name')) - return true; - - return false; - } - - /** - * Responsible for setting two cookies/session-vars to indicate that a user has logged in, - * one for the logged in DN and one for the logged in password. - * - * This function is only used if 'auth_type' is set to 'cookie' or 'session'. The values - * written have the name "pla_login_dn_X" and "pla_login_pass_X" where X is the - * ID of the server to which the user is attempting login. - * - * Note that as with all cookie/session operations this function must be called BEFORE - * any output is sent to the browser. - * - * On success, true is returned. On failure, false is returned. - * - * @param string $dn The DN with which the user has logged in. - * @param string $password The password of the user logged in. - * @param bool $anon_bind Indicates that this is an anonymous bind such that - * a password of "0" is stored. - * @return bool - * @see unsetLoginDN - */ - function setLoginDN($dn,$password,$anon_bind) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$password,$anon_bind); - - if (! $this->auth_type) - return false; - - switch ($this->auth_type) { - case 'cookie': - $cookie_dn_name = sprintf('pla_login_dn_%s',$this->server_id); - $cookie_pass_name = sprintf('pla_login_pass_%s',$this->server_id); - - # we set the cookie password to 0 for anonymous binds. - if ($anon_bind) { - $dn = 'anonymous'; - $password = '0'; - } - - $res1 = pla_set_cookie($cookie_dn_name,pla_blowfish_encrypt($dn)); - $res2 = pla_set_cookie($cookie_pass_name,pla_blowfish_encrypt($password)); - if ($res1 && $res2) - return true; - else - return false; - - break; - - case 'session': - $sess_var_dn_name = sprintf('pla_login_dn_%s',$this->server_id); - $sess_var_pass_name = sprintf('pla_login_pass_%s',$this->server_id); - - # we set the cookie password to 0 for anonymous binds. - if ($anon_bind) { - $dn = 'anonymous'; - $password = '0'; - } - - $_SESSION[$sess_var_dn_name] = pla_blowfish_encrypt($dn); - $_SESSION[$sess_var_pass_name] = pla_blowfish_encrypt($password); - return true; - - break; - - default: - error(sprintf(_('Unknown auth_type: %s'),htmlspecialchars($this->auth_type)),'error','index.php'); - break; - } - } - - /** - * Log a user out of the LDAP server. - * - * Removes the cookies/session-vars set by setLoginDN() - * after a user logs out using "auth_type" of "session" or "cookie". - * Returns true on success, false on failure. - * - * @return bool True on success, false on failure. - * @see setLoginDN - */ - function unsetLoginDN() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); - - if (! $this->auth_type) - return false; - - switch ($this->auth_type) { - case 'cookie': - $logged_in_dn = $this->getLoggedInDN(); - if (! $logged_in_dn) - return false; - - $logged_in_pass = $this->getLoggedInPass(); - $anon_bind = $logged_in_dn == 'anonymous' ? true : false; - - # set cookie with expire time already passed to erase cookie from client - $expire = time()-3600; - $cookie_dn_name = sprintf('pla_login_dn_%s',$this->server_id); - $cookie_pass_name = sprintf('pla_login_pass_%s',$this->server_id); - - if ($anon_bind) { - $res1 = pla_set_cookie($cookie_dn_name,'anonymous',$expire); - $res2 = pla_set_cookie($cookie_pass_name,'0',$expire); - - } else { - $res1 = pla_set_cookie($cookie_dn_name,pla_blowfish_encrypt($logged_in_dn),$expire); - $res2 = pla_set_cookie($cookie_pass_name,pla_blowfish_encrypt($logged_in_pass),$expire); - } - - # Need to unset the cookies too, since they are still set if further processing occurs (eg: Timeout) - unset($_COOKIE[$cookie_dn_name]); - unset($_COOKIE[$cookie_pass_name]); - - if (! $res1 || ! $res2) - return false; - else - return true; - - break; - - case 'session': - # unset session variables - $session_var_dn_name = sprintf('pla_login_dn_%s',$this->server_id); - $session_var_pass_name = sprintf('pla_login_pass_%s',$this->server_id); - - if (array_key_exists($session_var_dn_name,$_SESSION)) - unset($_SESSION[$session_var_dn_name]); - - if (array_key_exists($session_var_pass_name,$_SESSION)) - unset($_SESSION[$session_var_pass_name]); - - return true; - - break; - - default: - error(sprintf(_('Unknown auth_type: %s'),htmlspecialchars($auth_type)),'error','index.php'); - break; - } - } - - /** - * Used to determine if the specified attribute is indeed a jpegPhoto. If the - * specified attribute is one that houses jpeg data, true is returned. Otherwise - * this function returns false. - * - * @param string $attr_name The name of the attribute to test. - * @return bool - * @see draw_jpeg_photos - */ - function isJpegPhoto($attr_name) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); - - # easy quick check - if (! strcasecmp($attr_name,'jpegPhoto') || ! strcasecmp($attr_name,'photo')) - return true; - - # go to the schema and get the Syntax OID - $schema_attr = $this->getSchemaAttribute($attr_name); - if (! $schema_attr) - return false; - - $oid = $schema_attr->getSyntaxOID(); - $type = $schema_attr->getType(); - - if (! strcasecmp($type,'JPEG') || ($oid == '1.3.6.1.4.1.1466.115.121.1.28')) - return true; - - return false; - } - - /** - * Given an attribute name and server ID number, this function returns - * whether the attrbiute contains boolean data. This is useful for - * developers who wish to display the contents of a boolean attribute - * with a drop-down. - * - * @param string $attr_name The name of the attribute to test. - * @return bool - */ - function isAttrBoolean($attr_name) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); - - $type = ($schema_attr = $this->getSchemaAttribute($attr_name)) ? $schema_attr->getType() : null; - - if (! strcasecmp('boolean',$type ) || - ! strcasecmp('isCriticalSystemObject',$attr_name) || - ! strcasecmp('showInAdvancedViewOnly',$attr_name)) - return true; - - else - return false; - } - - /** - * Given an attribute name and server ID number, this function returns - * whether the attrbiute may contain binary data. This is useful for - * developers who wish to display the contents of an arbitrary attribute - * but don't want to dump binary data on the page. - * - * @param string $attr_name The name of the attribute to test. - * @return bool - * - * @see isJpegPhoto - */ - function isAttrBinary($attr_name) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); - - /** - * Determining if an attribute is binary can be an expensive operation. - * We cache the results for each attr name on each server in the $attr_cache - * to speed up subsequent calls. The $attr_cache looks like this: - * - * Array - * 0 => Array - * 'objectclass' => false - * 'cn' => false - * 'usercertificate' => true - * 1 => Array - * 'jpegphoto' => true - * 'cn' => false - */ - - static $attr_cache; - $attr_name = strtolower($attr_name); - - if (isset($attr_cache[$this->server_id][$attr_name])) - return $attr_cache[$this->server_id][$attr_name]; - - if ($attr_name == 'userpassword') { - $attr_cache[$this->server_id][$attr_name] = false; - return false; - } - - # Quick check: If the attr name ends in ";binary", then it's binary. - if (strcasecmp(substr($attr_name,strlen($attr_name) - 7),';binary') == 0) { - $attr_cache[$this->server_id][$attr_name] = true; - return true; - } - - # See what the server schema says about this attribute - $schema_attr = $this->getSchemaAttribute($attr_name); - if (! is_object($schema_attr)) { - - /* Strangely, some attributeTypes may not show up in the server - * schema. This behavior has been observed in MS Active Directory.*/ - $type = null; - $syntax = null; - - } else { - $type = $schema_attr->getType(); - $syntax = $schema_attr->getSyntaxOID(); - } - - if (strcasecmp($type,'Certificate') == 0 || - strcasecmp($type,'Binary') == 0 || - strcasecmp($attr_name,'usercertificate') == 0 || - strcasecmp($attr_name,'usersmimecertificate') == 0 || - strcasecmp($attr_name,'networkaddress') == 0 || - strcasecmp($attr_name,'objectGUID') == 0 || - strcasecmp($attr_name,'objectSID') == 0 || - strcasecmp($attr_name,'jpegPhoto') == 0 || - $syntax == '1.3.6.1.4.1.1466.115.121.1.10' || - $syntax == '1.3.6.1.4.1.1466.115.121.1.28' || - $syntax == '1.3.6.1.4.1.1466.115.121.1.5' || - $syntax == '1.3.6.1.4.1.1466.115.121.1.8' || - $syntax == '1.3.6.1.4.1.1466.115.121.1.9' - ) { - - $attr_cache[$this->server_id][$attr_name] = true; - return true; - - } else { - $attr_cache[$this->server_id][$attr_name] = false; - return false; - } - } - - /** - * Returns true if the specified attribute is configured as read only - * in config.php with the $read_only_attrs array. - * Attributes are configured as read-only in config.php thus: - * - * $read_only_attrs = array( "objectClass", "givenName" ); - * - * - * @param string $attr The name of the attribute to test. - * @return bool - */ - function isAttrReadOnly($attr) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr); - - $read_only_attrs = isset($_SESSION[APPCONFIG]->read_only_attrs) ? $_SESSION[APPCONFIG]->read_only_attrs : array(); - $read_only_except_dn = isset($_SESSION[APPCONFIG]->read_only_except_dn) ? $_SESSION[APPCONFIG]->read_only_except_dn : ''; - - $attr = trim($attr); - if (! $attr) - return false; - - if (! isset($read_only_attrs)) - return false; - - if (! is_array($read_only_attrs)) - return false; - - # Is the user excluded? - if (isset($read_only_except_dn) && $read_only_except_dn && $this->userIsMember($this->getLoggedInDN(),$read_only_except_dn)) - return false; - - foreach ($read_only_attrs as $attr_name) - if (strcasecmp($attr,trim($attr_name)) == 0) - return true; - - return false; - } - - /** - * Returns true if the specified attribute is configured as hidden - * in config.php with the $hidden_attrs array or the $hidden_attrs_ro - * array. - * Attributes are configured as hidden in config.php thus: - * - * $hidden_attrs = array( "objectClass", "givenName" ); - * - * or - * - * $hidden_attrs_ro = array( "objectClass", "givenName", "shadowWarning", - * "shadowLastChange", "shadowMax", "shadowFlag", - * "shadowInactive", "shadowMin", "shadowExpire" ); - * - * - * @param string $attr The name of the attribute to test. - * @return bool - */ - function isAttrHidden($attr) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr); - - $hidden_attrs = isset($_SESSION[APPCONFIG]->hidden_attrs) ? $_SESSION[APPCONFIG]->hidden_attrs : array(); - $hidden_attrs_ro = isset($_SESSION[APPCONFIG]->hidden_attrs_ro) ? $_SESSION[APPCONFIG]->hidden_attrs_ro : array(); - $hidden_except_dn = isset($_SESSION[APPCONFIG]->hidden_except_dn) ? $_SESSION[APPCONFIG]->hidden_except_dn : ''; - - $attr = trim($attr); - if (! $attr) - return false; - - if (! isset($hidden_attrs)) - return false; - - if (! is_array($hidden_attrs)) - return false; - - if (! isset($hidden_attrs_ro)) - $hidden_attrs_ro = $hidden_attrs; - - if (! is_array($hidden_attrs_ro)) - $hidden_attrs_ro = $hidden_attrs; - - # Is the user excluded? - if (isset($hidden_except_dn) && $hidden_except_dn && $this->userIsMember($this->getLoggedInDN(),$hidden_except_dn)) - return false; - - if ($this->isReadOnly()) { - foreach ($hidden_attrs_ro as $attr_name) - if (strcasecmp($attr,trim($attr_name)) == 0) - return true; - - } else { - foreach ($hidden_attrs as $attr_name) - if (strcasecmp($attr,trim($attr_name)) == 0) - return true; - } - - return false; - } - - /** - * Fetches the password of the currently logged in user (for auth_types "cookie", "session" and "http" only) - * or false if the current login is anonymous. - * - * @return string - * @see have_auth_info - * @see getLoggedInDN - */ - function getLoggedInPass() { - if (DEBUG_ENABLED) - debug_log('Entered with ()',17,__FILE__,__LINE__,__METHOD__); - - if (! $this->auth_type) - return false; - - switch ($this->auth_type) { - case 'cookie': - $cookie_name = sprintf('pla_login_pass_%s',$this->server_id); - $pass = isset($_COOKIE[$cookie_name]) ? $_COOKIE[$cookie_name] : false; - - if ($pass == '0') - return null; - else - return pla_blowfish_decrypt($pass); - - break; - - case 'session': - $session_var_name = sprintf('pla_login_pass_%s',$this->server_id); - $pass = isset($_SESSION[$session_var_name]) ? $_SESSION[$session_var_name] : false; - - if ($pass == '0') - return null; - else - return pla_blowfish_decrypt($pass); - break; - - case 'http': - $pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : false; - - if ($pass == '0') - return null; - else - return $pass; - break; - - case 'config': - return $this->login_pass; - break; - - default: - error(sprintf(_('Unknown auth_type: %s'),htmlspecialchars($this->auth_type)),'error','index.php'); - } - } - - /** - * Returns the DN who is logged in currently to the given server, which may - * either be a DN or the string 'anonymous'. This applies only for auth_types - * "cookie", "session" and "http". - * - * One place where this function is used is the tree viewer: - * After a user logs in, the text "Logged in as: " is displayed under the server - * name. This information is retrieved from this function. - * - * @return string - * @see have_auth_info - * @see getLoggedInPass - */ - function getLoggedInDN() { - # Set default return - $return = false; - - if (DEBUG_ENABLED) - debug_log('auth_type is [%s]',66,__FILE__,__LINE__,__METHOD__,$this->auth_type); - - if ($this->auth_type) { - switch ($this->auth_type) { - case 'cookie': - $cookie_name = sprintf('pla_login_dn_%s',$this->server_id); - - if (isset($_COOKIE[$cookie_name])) - $return = pla_blowfish_decrypt($_COOKIE[$cookie_name]); - else - $return = false; - - break; - - case 'session': - $session_var_name = sprintf('pla_login_dn_%s',$this->server_id); - - if (isset($_SESSION[$session_var_name])) - $return = pla_blowfish_decrypt($_SESSION[$session_var_name]); - else - $return = false; - - break; - - case 'http': - if (isset($_SERVER['PHP_AUTH_USER'])) { - if ($this->isLoginAttrEnabled()) { - if ($this->isLoginStringEnabled()) { - $return = str_replace('',$_SERVER['PHP_AUTH_USER'],$this->getLoginString()); - - } else { - if ($this->login_dn) - $this->connect(true,'user',false,true,$this->login_dn,$this->login_pass); - else - $this->connect(true,'anonymous'); - - if (! empty($this->login_class)) - $filter = sprintf('(&(objectClass=%s)(%s=%s))', - $this->login_class,$this->getLoginAttr(),$_SERVER['PHP_AUTH_USER']); - else - $filter = sprintf('%s=%s',$this->getLoginAttr(),$_SERVER['PHP_AUTH_USER']); - - foreach ($this->getBaseDN() as $base_dn) { - $result = $this->search(null,$base_dn,$filter,array('dn')); - $result = array_pop($result); - $return = $result['dn']; - if ($return) - break; - } - } - - } else { - $return = $_SERVER['PHP_AUTH_USER']; - } - - } else - $return = false; - - if ($return) { - $dn = $return; - $pass = ''; - - if (isset($_SERVER['PHP_AUTH_PW'])) - $pass = $_SERVER['PHP_AUTH_PW']; - - if ($this->userIsAllowedLogin($dn)) { - $ds = $this->connect(false,'user',true,true,$dn,$pass); - - if (! is_resource($ds)) { - system_message(array( - 'title'=>_('Authenticate to server'), - 'body'=>_('Bad username or password. Please try again.'), - 'type'=>'error'), - sprintf('cmd.php?cmd=login_form&server_id=%s',$this->server_id)); - } - - $this->login_dn = $dn; - $this->login_pass = $pass; - - } else { - $return = false; - } - } - - break; - - case 'config': - $return = $this->login_dn; - break; - - default: - error(sprintf(_('Unknown auth_type: %s'),htmlspecialchars($auth_type)),'error','index.php'); - } - } - - if (DEBUG_ENABLED) - debug_log('Entered with (), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$return); - - return $return; - } - - /** - * Gets the operational attributes for an entry. Given a DN, this function fetches that entry's - * operational (ie, system or internal) attributes. These attributes include "createTimeStamp", - * "creatorsName", and any other attribute that the LDAP server sets automatically. The returned - * associative array is of this form: - * - * Array ( - * [creatorsName] => Array ( - * [0] => "cn=Admin,dc=example,dc=com" - * ) - * [createTimeStamp]=> Array ( - * [0] => "10401040130" - * ) - * [hasSubordinates] => Array ( - * [0] => "FALSE" - * ) - * ) - * - * - * @param string $dn The DN of the entry whose interal attributes are desired. - * @param int $deref For aliases and referrals, this parameter specifies whether to - * follow references to the referenced DN or to fetch the attributes for - * the referencing DN. See http://php.net/ldap_search for the 4 valid - * options. - * @return array An associative array whose keys are attribute names and whose values - * are arrays of values for the aforementioned attribute. - */ - function getDNSysAttrs($dn,$deref=LDAP_DEREF_NEVER) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$deref); - - $attrs = array('creatorsname','createtimestamp','modifiersname', - 'structuralObjectClass','entryUUID','modifytimestamp', - 'subschemaSubentry','hasSubordinates','+'); - - $search = $this->search(null,$dn,'(objectClass=*)',$attrs,'base',false,$deref); - - $return_attrs = array(); - foreach ($search as $dn => $attrs) - foreach ($attrs as $attr => $value) { - if (is_array($value)) { - foreach ($value as $val) $return_attrs[$attr][] = $val; - } else { - $return_attrs[$attr][] = $value; - } - } - - return $return_attrs; - } - - /** - * Gets the user defined operational attributes for an entry. Given a DN, this function fetches that entry's - * operational (ie, system or internal) attributes. - * - * These attributes should be treated as internal attributes. - * - * The returned associative array is of this form: - * - * Array ( - * [nsroleDN] => Array ( - * [0] => "cn=nsManagedDisabledRole,dc=example,dc=com", - * [1] => "cn=nsDisabledRole,dc=example,dc=com", - * [2] => "cn=nsAdminRole,dc=example,dc=com" - * ) - * [passwordExpirationTime]=> Array ( - * [0] => "20080314183611Z" - * ) - * [passwordAllowChangeTime] => Array ( - * [0] => "20080116175354Z" - * ) - * ) - * - * - * @param string $dn The DN of the entry whose interal attributes are desired. - * @param int $deref For aliases and referrals, this parameter specifies whether to - * follow references to the referenced DN or to fetch the attributes for - * the referencing DN. See http://php.net/ldap_search for the 4 valid - * options. - * @return array An associative array whose keys are attribute names and whose values - * are arrays of values for the aforementioned attribute. - */ - function getCustomDNSysAttrs($dn,$deref=LDAP_DEREF_NEVER) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$deref); - - $attrs = $this->custom_sys_attrs; - $search = $this->search(null,$dn,'(objectClass=*)',$attrs,'base',false,$deref); - - $return_attrs = array(); - foreach ($search as $dn => $attrs) - foreach ($attrs as $attr => $value) { - if (is_array($value)) { - foreach ($value as $val) $return_attrs[$attr][] = $val; - } else { - $return_attrs[$attr][] = $value; - } - } - - return $return_attrs; - } - - /** - * Gets the user defined operational attributes for an entry. Given a DN, this function fetches that entry's - * operational (ie, system or internal) attributes. - * - * These attributes should be treated as regular attributes, not as internal attributes. - * - * The returned associative array is of this form: - * - * Array ( - * [nsroleDN] => Array ( - * [0] => "cn=nsManagedDisabledRole,dc=example,dc=com", - * [1] => "cn=nsDisabledRole,dc=example,dc=com", - * [2] => "cn=nsAdminRole,dc=example,dc=com" - * ) - * [passwordExpirationTime]=> Array ( - * [0] => "20080314183611Z" - * ) - * [passwordAllowChangeTime] => Array ( - * [0] => "20080116175354Z" - * ) - * ) - * - * - * @param string $dn The DN of the entry whose interal attributes are desired. - * @param int $deref For aliases and referrals, this parameter specifies whether to - * follow references to the referenced DN or to fetch the attributes for - * the referencing DN. See http://php.net/ldap_search for the 4 valid - * options. - * @return array An associative array whose keys are attribute names and whose values - * are arrays of values for the aforementioned attribute. - */ - function getCustomDNAttrs($dn,$deref=LDAP_DEREF_NEVER) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$deref); - - $attrs = $this->custom_attrs; - $search = $this->search(null,$dn,'(objectClass=*)',$attrs,'base',false,$deref); - - $return_attrs = array(); - foreach ($search as $dn => $attrs) - foreach ($attrs as $attr => $value) { - if (is_array($value)) { - foreach ($value as $val) $return_attrs[$attr][] = $val; - } else { - $return_attrs[$attr][] = $value; - } - } - - return $return_attrs; - } - - /** - * Gets the attributes/values of an entry. Returns an associative array whose - * keys are attribute value names and whose values are arrays of values for - * said attribute. Optionally, callers may specify true for the parameter - * $lower_case_attr_names to force all keys in the associate array (attribute - * names) to be lower case. - * - * Sample return value of getDNAttrs( 0, "cn=Bob,ou=pepole,dc=example,dc=com" ) - * - * - * Array ( - * [objectClass] => Array ( - * [0] => person - * [1] => top - * ) - * [cn] => Array ( - * [0] => Bob - * ) - * [sn] => Array ( - * [0] => Jones - * ) - * [dn] => Array ( - * [0] => cn=Bob,ou=pepole,dc=example,dc=com - * ) - * ) - * - * - * @param string $dn The distinguished name (DN) of the entry whose attributes/values to fetch. - * @param bool $lower_case_attr_names (optional) If true, all keys of the returned associative - * array will be lower case. Otherwise, they will be cased as the LDAP server returns - * them. - * @param int $deref For aliases and referrals, this parameter specifies whether to - * follow references to the referenced DN or to fetch the attributes for - * the referencing DN. See http://php.net/ldap_search for the 4 valid - * options. - * @return array - * @see getDNSysAttrs - * @see getDNAttr - */ - function getDNAttrs($dn,$lower_case_attr_names=false,$deref=LDAP_DEREF_NEVER) { - global $CACHE; - - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$lower_case_attr_names,$deref); - - $attrs = null; - - if (isset($CACHE['dnattrs'][$dn])) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s), Returning CACHED (%s)',17,__FILE__,__LINE__,__METHOD__, - $dn,$lower_case_attr_names,$deref,$CACHE['dnattrs'][$dn]); - - $attrs = $CACHE['dnattrs'][$dn]; - - } else { - $attrs = $this->search(null,dn_escape($dn),'(objectClass=*)',array(),'base',false,$deref); - if (count($attrs)) - $attrs = array_pop($attrs); - - foreach ($attrs as $key => $values) - if (! is_array($attrs[$key])) - $attrs[$key] = array($attrs[$key]); - - $CACHE['dnattrs'][$dn] = $attrs; - } - - if ($lower_case_attr_names) - $attrs = array_change_key_case($attrs); - - return $attrs; - } - - /** - * Much like getDNAttrs(), but only returns the values for - * one attribute of an object. Example calls: - * - * - * print_r( getDNAttr( 0, "cn=Bob,ou=people,dc=example,dc=com", "sn" ) ); - * Array ( - * [0] => "Smith" - * ) - * - * print_r( getDNAttr( 0, "cn=Bob,ou=people,dc=example,dc=com", "objectClass" ) ); - * Array ( - * [0] => "top" - * [1] => "person" - * ) - * - * - * @param string $dn The distinguished name (DN) of the entry whose attributes/values to fetch. - * @param string $attr The attribute whose value(s) to return (ie, "objectClass", "cn", "userPassword") - * @param bool $lower_case_attr_names (optional) If true, all keys of the returned associative - * array will be lower case. Otherwise, they will be cased as the LDAP server returns - * them. - * @param int $deref For aliases and referrals, this parameter specifies whether to - * follow references to the referenced DN or to fetch the attributes for - * the referencing DN. See http://php.net/ldap_search for the 4 valid - * options. - * @see getDNAttrs - * @return array - */ - function getDNAttr($dn,$attr,$lower_case_attr_names=false,$deref=LDAP_DEREF_NEVER) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$attr,$lower_case_attr_names,$deref); - - if ($lower_case_attr_names) - $attr = strtolower($attr); - - $attrs = $this->getDNAttrs($dn,$lower_case_attr_names,$deref); - - if (isset($attrs[$attr])) - return $attrs[$attr]; - else - return array(); - } - - /** - * Given a DN string, this returns the top container portion of the string. - * @param string $dn The DN whose container string to return. - * @return string The container - * @see get_rdn - * @see get_container - */ - function getContainerTop($dn) { - $return = $dn; - - foreach ($this->getBaseDN() as $base_dn) { - if (preg_match("/${base_dn}$/i",$dn)) { - $return = $base_dn; - break; - } - } - - if (DEBUG_ENABLED) - debug_log('Entered with (%s), Returning (%s)',17,__FILE__,__LINE__,__METHOD__,$dn,$return); - return $return; - } - - /** - * Given a DN string and a path like syntax, this returns the parent container portion of the string. - * @param string $dn The DN whose container string to return. - * @param string $path Either '/', '.' or something like '../../' - * @return string The container - * @see get_rdn - * @see get_container - */ - function getContainerParent($container,$path) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',17,__FILE__,__LINE__,__METHOD__,$container,$path); - - $top = $this->getContainerTop($container); - - if ($path[0] == '/') { - $container = $top; - $path = substr($path, 1); - - } elseif ($path == '.') { - return $container; - - } - - $parenttree = explode('/',$path); - - foreach ($parenttree as $index => $value) { - if ($value == '..') { - if (get_container($container)) - $container = get_container($container); - - if ($container == $top) - break; - } elseif($value) { - $container = "$value,$container"; - } else { - break; - } - } - - return $container; - } - - /** - * Determins if the specified attribute is contained in the $unique_attrs list - * configured in config.php. - * @return bool True if the specified attribute is in the $unique_attrs list and false - * otherwise. - */ - function isUniqueAttr($attr_name) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); - - $unique_attrs = isset($_SESSION[APPCONFIG]->unique_attrs) ? $_SESSION[APPCONFIG]->unique_attrs : array(); - - if (isset($unique_attrs) && is_array($unique_attrs)) - foreach ($unique_attrs as $attr) - if (strcasecmp($attr_name,$attr) == 0) - return true; - - return false; - } - - /** - * This function will check whether the value for an attribute being changed - * is already assigned to another DN. - * - * Inputs: - * @param dn $dn DN that is being changed - * @param string $attr_name Attribute being changed - * @param string|array $new values New values for the attribute - * - * Returns the bad value, or null if all values are OK - */ - function checkUniqueAttr($dn,$attr_name,$new_value) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s)',17,__FILE__,__LINE__,__METHOD__, - $dn,$attr_name,count($new_value)); - - # Is this attribute in the unique_attrs list? - if ($this->isUniqueAttr($attr_name)) { - - $con = $this->connect(false,'unique_attr',false,true, - $_SESSION[APPCONFIG]->ldapservers->GetValue($this->server_id,'unique_attrs','dn'), - $_SESSION[APPCONFIG]->ldapservers->GetValue($this->server_id,'unique_attrs','pass')); - - if (! $con) - error(sprintf(_('Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file.'),$this->name), - 'error','index.php'); - - # Build our search filter to double check each attribute. - $searchfilter = '(|'; - - if (is_array($new_value)) - foreach ($new_value as $val) - $searchfilter .= sprintf('(%s=%s)',$attr_name,clean_search_vals($val)); - - elseif ($new_value) - $searchfilter .= sprintf('(%s=%s)',$attr_name,clean_search_vals($new_value)); - - $searchfilter .= ')'; - - # Do we need a sanity check to just in case $new_value was null and hence the search string is bad? - foreach ($this->getBaseDN() as $base_dn) { - - # Do the search - $search = $this->search($con,$base_dn,$searchfilter,array('dn',$attr_name),'sub',false,LDAP_DEREF_ALWAYS); - - foreach ($search as $searchdn => $result) - - # If one of the attributes is owned to somebody else, then we may as well die here. - if ($result['dn'] != $dn) - if (is_array($result[$attr_name])) { - foreach ($result[$attr_name] as $attr) - foreach ($new_value as $new_value_attr) - if ($new_value_attr == $attr) - return $attr; - - } else { - foreach ($new_value as $new_value_attr) - if ($new_value_attr == $result[$attr_name]) - return $result[$attr_name]; - } - } - - # If we get here, then it must be OK? - return; - - } else { - return; - } - } - - /** - * This function will test if a user is a member of a group. - * - * Inputs: - * @param string $user membership value that is being checked - * @param dn $group DN to see if user is a member - * @return bool true|false - */ - function userIsMember($user,$group) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',17,__FILE__,__LINE__,__METHOD__,$user,$group); - - $user = strtolower($user); - $group = $this->getDNAttrs($group,false,$deref=LDAP_DEREF_NEVER); - - if (is_array($group)) { - $group = array_change_key_case($group); - - # If you are using groupOfNames objectClass - if (array_key_exists('member',$group) && ! is_array($group['member'])) - $group['member'] = array($group['member']); - - if (array_key_exists('member',$group) && - in_array($user,arrayLower($group['member']))) - - return true; - - # If you are using groupOfUniqueNames objectClass - if (array_key_exists('uniquemember',$group) && ! is_array($group['uniquemember'])) - $group['uniquemember'] = array($group['uniquemember']); - - if (array_key_exists('uniquemember',$group) && - in_array($user,arrayLower($group['uniquemember']))) - - return true; - } - - return false; - } - - /** - */ - function userIsAllowedLogin($user) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$user); - - $user = trim(strtolower($user)); - - if (! $_SESSION[APPCONFIG]->ldapservers->GetValue($this->server_id,'login','allowed_dns')) - return true; - - foreach ($_SESSION[APPCONFIG]->ldapservers->GetValue($this->server_id,'login','allowed_dns') as $login_allowed_dn) { - if (DEBUG_ENABLED) - debug_log('Working through (%s)',80,__FILE__,__LINE__,__METHOD__,$login_allowed_dn); - - /* Check if $login_allowed_dn is an ldap search filter - * Is first occurence of 'filter=' (case ensitive) at position 0 ? */ - if (preg_match('/^\([&|]\(/',$login_allowed_dn)) { - $filter = $login_allowed_dn; - - foreach($this->getBaseDN() as $base_dn) { - $dn_array = array(); - - $results = $this->search(null,$base_dn,$filter,array('dn')); - - if (DEBUG_ENABLED) - debug_log('Search, Filter [%s], BaseDN [%s] Results [%s]',16,__FILE__,__LINE__,__METHOD__, - $filter, $base_dn,$results); - - if ($results) { - foreach ($results as $result) - $dn_array[] = $result['dn']; - - $dn_array = array_unique($dn_array); - - if (count($dn_array) !== 0) - foreach ($dn_array as $result_dn) { - if (DEBUG_ENABLED) - debug_log('Comparing with [%s]',80,__FILE__,__LINE__,__METHOD__,$result_dn); - - # Check if $result_dn is a user DN - if (strcasecmp($user,trim(strtolower($result_dn))) == 0) - return true; - - # Check if $result_dn is a group DN - if ($this->userIsMember($user,$result_dn)) - return true; - } - } - } - } - - # Check if $login_allowed_dn is a user DN - if (strcasecmp($user,trim(strtolower($login_allowed_dn))) == 0) - return true; - - # Check if $login_allowed_dn is a group DN - if ( $this->userIsMember($user,$login_allowed_dn) ) - return true; - } - return false; - } - - /** - * Get the LDAP base DN for a named DN. - * - * @param string $dn DN in question - * @return string $base_dn - */ - function getDNBase($dn) { - foreach ($this->getBaseDN() as $base_dn) { - if (preg_match('/'.$base_dn.'$/',$dn)) - return $base_dn; - } - - return null; - } - - /** - * This function determines if the specified attribute is contained in the force_may list - * as configured in config.php. - * - * @return bool True if the specified attribute is in the $force_may list and false - * otherwise. - */ - function isForceMay($attr_name) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',17,__FILE__,__LINE__,__METHOD__,$attr_name); - - return in_array($attr_name,$this->force_may); - } -} - -class LDAPservers { - /* All LDAP servers */ - var $_ldapservers; - - /* Default settings for a new LDAP server configuration. */ - var $default; - - function LDAPservers() { - $this->default = new StdClass; - - $this->default->server['name'] = array( - 'desc'=>'Server name', - 'var'=>'name', - 'default'=>'LDAP Server'); - - $this->default->server['host'] = array( - 'desc'=>'Host Name', - 'var'=>'host', - 'default'=>'127.0.0.1'); - - $this->default->server['port'] = array( - 'desc'=>'Port Number', - 'var'=>'port', - 'default'=>389); - - /* Normally PLA will direct all read/write operations to host/port above. However, - * if you specify hostwr/portwr, then write operations will be directed to that host/port. - * Keep in mind, PLA is unaware that they may be two separate hosts and replication delays. */ - $this->default->server['hostwr'] = array( - 'desc'=>'Host Name for write replica', - 'var'=>'hostwr', - 'default'=>null); - - $this->default->server['portwr'] = array( - 'desc'=>'Port Number for write replica', - 'var'=>'portwr', - 'default'=>389); - - $this->default->server['base'] = array( - 'desc'=>'Base DN', - 'default'=>array()); - - $this->default->server['tls'] = array( - 'desc'=>'Connect using TLS', - 'var'=>'tls', - 'default'=>false); - - $this->default->server['auth_type'] = array( - 'desc'=>'Authentication Type', - 'var'=>'auth_type', - 'default'=>'cookie'); - - $this->default->server['low_bandwidth'] = array( - 'desc'=>'Enable LOW Bandwidth optimisations', - 'var'=>'low_bandwidth', - 'default'=>false); - - $this->default->server['read_only'] = array( - 'desc'=>'Server is in READ ONLY mode', - 'var'=>'read_only', - 'default'=>false); - - $this->default->server['branch_rename'] = array( - 'desc'=>'Permit renaming branches', - 'var'=>'branch_rename', - 'default'=>false); - - /* This was created for IDS - since it doesnt present STRUCTURAL against objectClasses - * definitions when reading the schema.*/ - $this->default->server['schema_oclass_default'] = array( - 'desc'=>'When reading the schema, and it doesnt specify objectClass type, default it to this', - 'var'=>'schema_oclass_default', - 'default'=>null); - - $this->default->login['dn'] = array( - 'desc'=>'User Login DN', - 'var'=>'login_dn', - 'default'=>''); - - $this->default->login['pass'] = array( - 'desc'=>'User Login Password', - 'var'=>'login_pass', - 'default'=>''); - - $this->default->login['attr'] = array( - 'desc'=>'Attribute to use to find the users DN', - 'var'=>'login_attr', - 'default'=>'dn'); - - $this->default->login['fallback_dn'] = array( - 'desc'=>'Enable fallback to dn when using attr != dn', - 'var'=>'login_fallback_dn', - 'default'=>false); - - $this->default->login['class'] = array( - 'desc'=>'Strict login to users containing a specific objectClass', - 'default'=>null); - - $this->default->login['string'] = array( - 'desc'=>'Login string if using auth_type=string', - 'var'=>'login_string', - 'default'=>null); - - $this->default->login['anon_bind'] = array( - 'desc'=>'Whether to allow anonymous binds', - 'default'=>true); - - $this->default->login['allowed_dns'] = array( - 'desc'=>'Limit logins to users who match any of the following LDAP filters', - 'default'=>array()); - - $this->default->login['timeout'] = array( - 'desc'=>'Session timout in seconds', - 'var'=>'session_timeout', - 'default'=>session_cache_expire()-1); - - $this->default->appearance['password_hash'] = array( - 'desc'=>'Default HASH to use for passwords', - 'var'=>'default_hash', - 'default'=>'md5'); - - $this->default->appearance['show_create'] = array( - 'desc'=>'Show CREATE options in the tree', - 'var'=>'show_create', - 'default'=>true); - - $this->default->appearance['visible'] = array( - 'desc'=>'Whether this LDAP server is visible in the tree', - 'var'=>'visible', - 'default'=>true); - - $this->default->auto_number['enable'] = array( - 'desc'=>'Enable the AUTO UID feature', - 'default'=>true); - - $this->default->auto_number['mechanism'] = array( - 'desc'=>'Mechanism to use to search for automatic numbers', - 'default'=>'search'); - - $this->default->auto_number['search_base'] = array( - 'desc'=>'Base DN to use for search mechanisms', - 'default'=>null); - - $this->default->auto_number['min'] = array( - 'desc'=>'Minimum UID number to start with', - 'default'=>1000); - - $this->default->auto_number['dn'] = array( - 'desc'=>'DN to use when evaluating numbers', - 'default'=>null); - - $this->default->auto_number['pass'] = array( - 'desc'=>'Password for DN to use when evaluating numbers', - 'default'=>null); - - $this->default->auto_number['uidpool_dn'] = array( - 'desc'=>'DN to use for the uidPool', - 'default'=>'cn=uidPool,dc=example,dc=com'); - - $this->default->force_may['attrs'] = array( - 'desc'=>'Attributes to force as MAY attributes, even though the schema may indicate that they are MUST attributes', - 'var' => 'force_may', - 'default'=>array()); - - $this->default->unique_attrs['dn'] = array( - 'desc'=>'DN to use when evaluating uniqueness', - 'default'=>null); - - $this->default->unique_attrs['pass'] = array( - 'desc'=>'Password for DN to use when evaluating uniqueness', - 'default'=>null); - - $this->default->custom['pages_prefix'] = array( - 'desc'=>'Path to custom pages', - 'default'=>null); - - $this->default->server['sasl_auth'] = array( - 'desc' => 'Use SASL authentication when binding LDAP server', - 'var' => 'sasl_auth', - 'default' => false); - - $this->default->server['sasl_mech'] = array( - 'desc' => 'SASL mechanism used while binding LDAP server', - 'var' => 'sasl_mech', - 'default' => 'PLAIN'); - - $this->default->server['sasl_realm'] = array( - 'desc' => 'SASL realm name', - 'var' => 'sasl_realm', - 'default' => ''); - - $this->default->server['sasl_authz_id'] = array( - 'desc' => 'SASL authorization id', - 'var' => 'sasl_authz_id', - 'default' => ''); - - $this->default->server['sasl_authz_id_regex'] = array( - 'desc' => 'SASL authorization id PCRE regular expression', - 'var' => 'sasl_authz_id_regex', - 'default' => null); - - $this->default->server['sasl_authz_id_replacement'] = array( - 'desc' => 'SASL authorization id PCRE regular expression replacement string', - 'var' => 'sasl_authz_id_replacement', - 'default' => null); - - $this->default->server['sasl_props'] = array( - 'desc' => 'SASL properties', - 'var' => 'sasl_props', - 'default' => null); - - $this->default->server['custom_attrs'] = array( - 'desc' => 'Custom operational attributes to be treated as regular attributes', - 'var' => 'custom_attrs', - 'default' => array('')); - - $this->default->server['custom_sys_attrs'] = array( - 'desc' => 'Custom operational attributes to be treated as internal attributes', - 'var' => 'custom_sys_attrs', - 'default' => array('')); - } - - function SetValue($server_id,$key,$index,$value) { - if (defined('DEBUG_ENABLED') && (DEBUG_ENABLED)) - debug_log('Entered with (%s,%s,%s,%s)',3,__FILE__,__LINE__,__METHOD__, - $server_id,$key,$index,$value); - - if (! isset($this->default->$key)) - error("ERROR: Setting a key [$key] that isnt predefined.",'error','index.php'); - else - $default = $this->default->$key; - - if (! isset($default[$index])) - error("ERROR: Setting a index [$index] that isnt predefined.",'error','index.php'); - else - $default = $default[$index]; - - # Test if its should be an array or not. - if (is_array($default['default']) && ! is_array($value)) - error("Error in configuration file, {$key}['$index'] SHOULD be an array of values.",'error','index.php'); - - if (! is_array($default['default']) && is_array($value)) - error("Error in configuration file, {$key}['$index'] should NOT be an array of values.",'error','index.php'); - - # Some special processing. - # @todo: Add ldaps port details here. - if ($key == 'server') { - switch ($index) { - case 'host' : - if (strstr($value,'ldapi://')) - $this->_ldapservers[$server_id][$key]['port'] = false; - break; - } - } - $this->_ldapservers[$server_id][$key][$index] = $value; - } - - function GetValue($server_id,$key,$index) { - if (isset($this->_ldapservers[$server_id][$key][$index])) - $return = $this->_ldapservers[$server_id][$key][$index]; - else - $return = $this->default->{$key}[$index]['default']; - - if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s), Returning (%s)',3,__FILE__,__LINE__,__METHOD__, - $server_id,$key,$index,$return); - - return $return; - } - - function GetServerList($onlyvisible=true) { - global $CACHE; - - if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) - debug_log('Entered with (%s)',3,__FILE__,__LINE__,__METHOD__,$onlyvisible); - - if (! isset($CACHE['serverlist'])) { - $CACHE['serverlist'] = array(); - - foreach ($this->_ldapservers as $id => $ldapserver) - if (! $onlyvisible || ($onlyvisible && $this->GetValue($id,'appearance','visible'))) - $CACHE['serverlist'][$id] = true; - - } else { - if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) - debug_log('Entered with (%s), Returning CACHED (%s)',3,__FILE__,__LINE__,__METHOD__,$onlyvisible,$CACHE['serverlist']); - - return array_keys($CACHE['serverlist']); - } - - if (defined('DEBUG_ENABLED') && DEBUG_ENABLED) - debug_log('Entered with (%s), Returning (%s)',3,__FILE__,__LINE__,__METHOD__,$onlyvisible,$CACHE['serverlist']); - - return array_keys($CACHE['serverlist']); - } - - function Instance($server_id=null) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s)',3,__FILE__,__LINE__,__METHOD__,$server_id); - - global $CACHE; - - # If no server_id defined, then pick the lowest one. - if (is_null($server_id)) - $server_id = min($this->GetServerList()); - - if (! isset($CACHE['instance'][$server_id])) { - if (DEBUG_ENABLED) - debug_log('New instance of server (%s)',3,__FILE__,__LINE__,__METHOD__,$server_id); - - $instance = new LDAPserver($server_id); - - foreach ($this->default as $key => $details) { - foreach ($details as $index => $value) { - if (isset($value['var'])) - $instance->{$value['var']} = $this->GetValue($server_id,$key,$index); - } - } - - $CACHE['instance'][$server_id] = $instance; - - } else { - if (DEBUG_ENABLED) - debug_log('Returning CACHEd instance (%s)',3,__FILE__,__LINE__,__METHOD__,$server_id); - } - - return $CACHE['instance'][$server_id]; - } -} -?> diff --git a/lib/session_functions.php b/lib/session_functions.php index 2a32370..39555e5 100644 --- a/lib/session_functions.php +++ b/lib/session_functions.php @@ -1,29 +1,31 @@ _('Configuration cache stale.'), 'body'=>_('Your configuration has been automatically refreshed.'), - 'type'=>'info')); + 'type'=>'info','special'=>true)); $config_file = CONFDIR.'config.php'; - check_config($config_file); + $config = check_config($config_file); + if (! $config) + debug_dump_backtrace('config is empty?',1); } else { # Sanity check, specially when upgrading from a previous release. @@ -154,12 +165,20 @@ function pla_session_start() { # If we came via index.php, then set our $config. if (! isset($_SESSION[APPCONFIG]) && isset($config)) $_SESSION[APPCONFIG] = $config; + + # Restore our sysmsg's if there were any. + if ($sysmsg) { + if (! isset($_SESSION['sysmsg']) || ! is_array($_SESSION['sysmsg'])) + $_SESSION['sysmsg'] = array(); + + $_SESSION['sysmsg'] = array_merge($_SESSION['sysmsg'],$sysmsg); + } } /** * Stops the current session. */ -function pla_session_close() { +function app_session_close() { @session_write_close(); } ?> diff --git a/lib/syslog.php b/lib/syslog.php index e375a5c..53c478e 100644 --- a/lib/syslog.php +++ b/lib/syslog.php @@ -1,12 +1,9 @@ and Alcôve - * @package phpLDAPadmin - * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the @@ -21,16 +18,18 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA + * + * @author Benjamin Drieu and Alcôve + * @package phpLDAPadmin */ # If config_default.php hasnt been called yet, then return. if (! defined('APPCONFIG') || ! isset($_SESSION[APPCONFIG])) return; -/* Initialize syslog */ -if ($_SESSION[APPCONFIG]->GetValue('debug','syslog')) { - define_syslog_variables(); - openlog('phpldapadmin', LOG_ODELAY, LOG_DAEMON ); +# Initialize syslog +if ($_SESSION[APPCONFIG]->getValue('debug','syslog') && function_exists('syslog')) { + openlog('phpldapadmin',LOG_ODELAY,LOG_DAEMON); } /** @@ -39,66 +38,53 @@ if ($_SESSION[APPCONFIG]->GetValue('debug','syslog')) { * is true. * * @param emergency Syslog emergency. - * @param log_string String to log. + * @param log_string String to log. */ -function syslog_msg ( $emergency, $log_string, $ldapserver=null ) { - if (isset($_SESSION[APPCONFIG]) && $_SESSION[APPCONFIG]->GetValue('debug','syslog')) { +function syslog_msg($emergency,$log_string) { + if (! function_exists('syslog') || ! isset($_SESSION[APPCONFIG]) || ! $_SESSION[APPCONFIG]->getValue('debug','syslog')) + return; - if (isset($ldapserver->server_id)) - $log_string = sprintf('(%s) %s',$ldapserver->getLoggedInDN(),$log_string); - - syslog ( $emergency, $log_string ); - } - - return true; + return syslog($emergency,$log_string); } /** * Issue an error message via syslog. * - * @param log_string Log message to send to syslog. - * @param server_id If set, print the logged user as well. - * + * @param log_string Log message to send to syslog. * @return true on success. */ -function syslog_err ( $log_string, $ldapserver=null ) { - return syslog_msg ( LOG_ERR, $log_string, $ldapserver ); +function syslog_err($log_string) { + return syslog_msg(LOG_ERR,$log_string); } /** * Issue a warning message via syslog. * - * @param log_string Log message to send to syslog. - * @param server_id If set, print the logged user as well. - * + * @param log_string Log message to send to syslog. * @return true on success. */ -function syslog_warning ( $log_string, $ldapserver=null ) { - return syslog_msg ( LOG_WARNING, $log_string, $ldapserver ); +function syslog_warning($log_string) { + return syslog_msg(LOG_WARNING,$log_string); } /** * Issue a notice message via syslog. * - * @param log_string Log message to send to syslog. - * @param server_id If set, print the logged user as well. - * + * @param log_string Log message to send to syslog. * @return true on success. */ -function syslog_notice ( $log_string, $ldapserver=null ) { - return syslog_msg ( LOG_NOTICE, $log_string, $ldapserver ); +function syslog_notice($log_string) { + return syslog_msg(LOG_NOTICE,$log_string); } /** * Issue a debug message via syslog, only if $log_level is set to * 'debug' from the config file. * - * @param log_string Log message to send to syslog. - * @param server_id If set, print the logged user as well. - * + * @param log_string Log message to send to syslog. * @return true on success or if debug log is not activated. */ -function syslog_debug ( $log_string, $ldapserver=null ) { - return syslog_msg ( LOG_DEBUG, $log_string, $ldapserver ); +function syslog_debug($log_string) { + return syslog_msg(LOG_DEBUG,$log_string); } ?> diff --git a/lib/template_functions.php b/lib/template_functions.php index ac7a88b..b317afc 100644 --- a/lib/template_functions.php +++ b/lib/template_functions.php @@ -1,1048 +1,25 @@ stack[count($this->stack)] = &$pos; - $this->stack_ref = &$pos; - } - - function pop_pos() { - unset($this->stack[count($this->stack) - 1]); - $this->stack_ref = &$this->stack[count($this->stack) - 1]; - } - - function parse($file) { - $f = fopen($file,'r'); - $strInputXML = fread($f,filesize($file)); - fclose($f); - - $this->resParser = xml_parser_create(); - xml_set_object($this->resParser,$this); - xml_set_element_handler($this->resParser,'tagOpen','tagClosed'); - - xml_set_character_data_handler($this->resParser,'tagData'); - - $this->push_pos($this->arrOutput); - - $this->strXmlData = xml_parse($this->resParser,$strInputXML); - - if (! $this->strXmlData) - die(sprintf('XML error: %s at line %d in file %s', - xml_error_string(xml_get_error_code($this->resParser)), - xml_get_current_line_number($this->resParser), - $file)); - - xml_parser_free($this->resParser); - - return $this->arrOutput; - } - - function tagOpen($parser,$name,$attrs) { - $name = strtolower($name); - - if (isset($this->stack_ref[$name])) { - if (! isset($this->stack_ref[$name][0])) { - $tmp = $this->stack_ref[$name]; - unset($this->stack_ref[$name]); - $this->stack_ref[$name][0] = $tmp; - } - - $cnt = count($this->stack_ref[$name]); - $this->stack_ref[$name][$cnt] = array(); - if (isset($attrs)) - $this->stack_ref[$name][$cnt] = $attrs; - - $this->push_pos($this->stack_ref[$name][$cnt]); - - } else { - $this->stack_ref[$name]=array(); - - if (isset($attrs)) - $this->stack_ref[$name]=$attrs; - - $this->push_pos($this->stack_ref[$name]); - } - } - - function tagData($parser,$tagData) { - if (trim($tagData) != '') { - - if (isset($this->stack_ref['#text'])) - $this->stack_ref['#text'] .= $tagData; - else - $this->stack_ref['#text'] = $tagData; - } - } - - function tagClosed($parser,$name) { - $this->pop_pos(); - } -} - -class Templates { - var $_creation_template = array(); - var $_editing_template = array(); - var $_js_hash = array(); - - function Templates($server_id) { - if (DEBUG_ENABLED) - debug_log('Entered with ()',5,__FILE__,__LINE__,__METHOD__); - - if ($this->_creation_template = get_cached_item($server_id,'template','creation')) { - if (DEBUG_ENABLED) - debug_log('Using CACHED [%s]',5,__FILE__,__LINE__,__METHOD__,'templates'); - - } else { - $dir = opendir(TMPLDIR.'creation'); - - $this->template_num = 0; - while( ( $file = readdir( $dir ) ) !== false ) { - if (! preg_match('/.xml$/',$file)) continue; - - if ($_SESSION[APPCONFIG]->GetValue('appearance','custom_templates_only') - && ! preg_match('/^custom_/',$file)) - continue; - - $objXML = new xml2array(); - $xmldata = $objXML->parse(TMPLDIR.'creation/'.$file); - - $template_name = preg_replace('/.xml$/','',$file); - $this->_creation_template[$template_name] = array(); - - $this->storeTemplate($this->_creation_template[$template_name],$xmldata); - } - masort($this->_creation_template,'title'); - set_cached_item($server_id,'template','creation',$this->_creation_template); - } - - if ($this->_editing_template = get_cached_item($server_id,'template','editing')) { - if (DEBUG_ENABLED) - debug_log('Using CACHED [%s]',5,__FILE__,__LINE__,__METHOD__,'templates'); - - } else { - $dir = opendir(TMPLDIR.'modification'); - - $this->template_num = 0; - while (($file = readdir($dir)) !== false) { - if (! preg_match('/.xml$/',$file)) - continue; - - if ($_SESSION[APPCONFIG]->GetValue('appearance','custom_templates_only') - && ! preg_match('/^custom_/',$file)) - continue; - - $objXML = new xml2array(); - $xmldata = $objXML->parse(TMPLDIR.'modification/'.$file); - - $template_name = preg_replace('/.xml$/','',$file); - $this->_editing_template[$template_name] = array(); - - $this->storeTemplate($this->_editing_template[$template_name], $xmldata); - } - - masort($this->_creation_template,'title'); - set_cached_item($server_id,'template','editing',$this->_editing_template); - } - } - - function storeTemplate(&$template,$xmldata) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',5,__FILE__,__LINE__,__METHOD__,$template,$xmldata); - - global $ldapserver; - - $template['objectclass'] = array(); - foreach ($xmldata['template'] as $xml_key => $xml_value) { - if (DEBUG_ENABLED) - debug_log('Foreach loop Key [%s] Value [%s]',4,__FILE__,__LINE__,__METHOD__,$xml_key,is_array($xml_value)); - - switch ($xml_key) { - - # Build our object Classes from the DN and Template. - case ('objectclasses') : - if (isset($xmldata['template']['objectclasses']) && is_array($xmldata['template']['objectclasses'])) { - foreach ($xmldata['template']['objectclasses']['objectclass'] as $index => $details) { - - if (is_numeric($index)) { - # XML files with only 1 objectClass dont have a numeric index. - if ($schema = $ldapserver->getSchemaObjectClass($details['ID'])) { - - # If we havent recorded this objectclass already, do so now. - if (! isset($template['objectclass']) || - ! in_array($schema->getName(),$template['objectclass'])) { - - $template['objectclass'][] = $schema->getName(); - } - - # This objectClass doesnt exist. - } else { - } - - } else { - if ($schema = $ldapserver->getSchemaObjectClass($details)) { - if (! isset($template['objectclass']) || - //! in_array($details,$template['objectclass'])) { - ! in_array($schema->getName(),$template['objectclass'])) { - - $template['objectclass'][] = $schema->getName(); - } - - # This objectClass doesnt exist. - } else { - } - } - } - } - - break; - - # Build our attribute list from the DN and Template. - case ('attributes') : - if (DEBUG_ENABLED) - debug_log('Case [%s]',4,__FILE__,__LINE__,__METHOD__,'attributes'); - - if (isset($xmldata['template']['attributes']) && is_array($xmldata['template']['attributes'])) { - $template['attribute'] = array(); - - foreach ($xmldata['template']['attributes'] as $tattrs) { - foreach ($tattrs as $index => $attr_details) { - - if (DEBUG_ENABLED) - debug_log('Foreach tattrs Key [%s] Value [%s]',4,__FILE__,__LINE__,__METHOD__, - $index,serialize($attr_details)); - - # Single attribute XML files are not indexed. - if (is_numeric($index)) { - if ($attr = $ldapserver->getSchemaAttribute($attr_details['ID'])) - $template['attribute'][$attr->getName()] = $this->_parseXML($index,$attr_details); - - } else { - if (! strcmp($index,'ID')) - continue; - - if ($attr = $ldapserver->getSchemaAttribute($tattrs['ID'])) { - foreach ($attr_details as $key => $values) { - if (is_array($values) && isset($values['ID'])) { - $template['attribute'][$attr->getName()][$index]['_KEY:'.$values['ID']] = $this->_parseXML($key,$values); - - } elseif (is_array($values) && isset($values['#text'])) { - $template['attribute'][$attr->getName()][$index][] = $values['#text']; - - } else { - $template['attribute'][$attr->getName()][$index] = $this->_parseXML($key,$values); - } - } - } - } - } - } - - # Do we have an override parameter? - foreach ($template['attribute'] as $key => $data) { - if (isset($data['override'])) { - $template['attribute'][$data['override']] = $data; - unset($template['attribute'][$key]); - $template['attribute'][$key] = $data['override']; - } - } - } - - break; - - default : - if (isset($xml_value['#text'])) - $template[$xml_key] = $xml_value['#text']; - else - $template[$xml_key] = $xml_value; - } - } - - if (! count($template['objectclass'])) { - $template['invalid'] = 1; - $template['invalid_reason'] = _('ObjectClasses in XML dont exist in LDAP server.'); - return; - } - - # Collect our structural, must & may attributes. - $template['must'] = array(); - $template['may'] = array(); - $template['empty_attrs'] = array(); - - $superclasslist = array(); - foreach ($template['objectclass'] as $oclass) { - - # If we get some superclasses - then we'll need to go through them too. - $supclass = true; - $enherited = false; - while ($supclass == true) { - $schema_object = $ldapserver->getSchemaObjectClass($oclass); - - if ($schema_object->getType() == 'structural' && (! $enherited)) - $template['structural'][] = $oclass; - - if ($schema_object->getMustAttrs() ) - foreach ($schema_object->getMustAttrs() as $index => $detail) { - $objectclassattr = $detail->getName(); - - // We add the 'objectClass' attribute, only if it's explicitly - // in the template attribute list - if (! in_array($objectclassattr,$template['must']) - && ((strcasecmp('objectClass',$objectclassattr) != 0) - || ((strcasecmp('objectClass',$objectclassattr) == 0) - && isset($template['attribute']['objectClass'])))) { - - # Go through the aliases, and ignore any that are already defined. - $ignore = false; - $attr = $ldapserver->getSchemaAttribute($objectclassattr); - foreach ($attr->aliases as $alias) { - if (in_array($alias,$template['must'])) { - $ignore = true; - break; - } - } - - if ($ignore) - continue; - - if (isset($template['attribute'][$objectclassattr]) && - ! is_array($template['attribute'][$objectclassattr])) - - $template['must'][] = - $template['attribute'][$objectclassattr]; - - else - $template['must'][] = $objectclassattr; - } - } - - if ($schema_object->getMayAttrs()) - foreach ($schema_object->getMayAttrs() as $index => $detail) { - $objectclassattr = $detail->getName(); - - if (! in_array($objectclassattr,$template['may'])) - $template['may'][] = $objectclassattr; - } - - # Keep a list to objectclasses we have processed, so we dont get into a loop. - $oclass_processed[] = $oclass; - $supoclasses = $schema_object->getSupClasses(); - - if (count($supoclasses) || count($superclasslist)) { - foreach ($supoclasses as $supoclass) { - if (! in_array($supoclass,$oclass_processed)) - $superclasslist[] = $supoclass; - } - - $oclass = array_shift($superclasslist); - if ($oclass) - $enherited = true; - else - $supclass = false; - - } else { - $supclass = false; - } - } - } - - # Remove any must attributes in the may list. - foreach ($template['may'] as $index => $detail) { - if (in_array($detail,$template['must'])) { - unset($template['may'][$index]); - continue; - } - } - - # Remove any attributes not in the xml file and not in the dn. - foreach ($template['may'] as $index => $detail) { - if (isset($template['attribute']) - && ! isset($template['attribute'][$detail])) { - - unset($template['may'][$index]); - continue; - } - - if (! isset($attrs[$detail])) - if (isset($template['attribute'][$detail])) - $template['empty_attrs'][$detail] = $template['attribute'][$detail]; - else - $template['empty_attrs'][$detail]['display'] = $detail; - - else - $template['attrs'][$detail] = $attrs[$detail]; - } - - # Add the must attrs to the attributes key. - foreach ($template['must'] as $index => $detail) { - - if (! isset($attrs[$detail])) { - if (isset($template['attribute'][$detail])) - $template['empty_attrs'][$detail] = $template['attribute'][$detail]; - else - $template['empty_attrs'][$detail]['display'] = $detail; - - $template['empty_attrs'][$detail]['must'] = true; - } else - $template['attrs'][$detail] = $attrs[$detail]; - } - - # are there attributes defined in templates but not in may/must attributes ? - foreach ($template['attribute'] as $attr => $details) { - if (!isset($template['empty_attrs'][$attr])) $template['empty_attrs'][$attr] = $details; - } - - # Check if there are any items without a page or order parameter, and make it 1 and 255. - foreach ($template['empty_attrs'] as $index => $detail) { - if (! isset($detail['page'])) - $template['empty_attrs'][$index]['page'] = 1; - if (! isset($detail['order'])) - $template['empty_attrs'][$index]['order'] = 255; - } - - # Check we have some manditory items. - foreach (array('rdn','structural','visible') as $key) { - if (! isset($template[$key]) - || (! is_array($template[$key]) && ! trim($template[$key]))) { - - $template['invalid'] = 1; - $template['invalid_reason'] = sprintf(_('Missing %s in the XML file.'),$key); - break; - } - } - - # Define attribute type according to the values - foreach ($template['empty_attrs'] as $attr => $details) { - if (isset($template['empty_attrs'][$attr]['type'])) continue; - - if (isset($details['option'])) { - if (is_array($details['option'])) { - $details['type'] = 'select'; - } elseif (preg_match('/^=php\.(\w+)\((.*)\)$/', $details['option'], $matches)) { - $args = preg_split('/,/',$matches[2]); - switch($matches[1]) { - case 'GetNextNumber' : - break; - case 'MultiList' : - $template['empty_attrs'][$attr]['type'] = 'multiselect'; - break; - case 'PickList' : - $template['empty_attrs'][$attr]['type'] = 'select'; - break; - case 'RandomPassword' : - break; - case 'DrawChooserLink' : - break; - default : - break; - } - } - } - } - } - - function _parseXML($index,$attr_details) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s)',5,__FILE__,__LINE__,__METHOD__,$index,$attr_details); - - if (! $attr_details) { - return ''; - - } elseif (! is_array($attr_details)) { - return $attr_details; - - } elseif (isset($attr_details['#text'])) { - - # If index is numeric, then this is part of an array... - return $attr_details['#text']; - } - - foreach ($attr_details as $key => $values) { - if (($key == 'ID') && ! is_array($values)) - continue; - - elseif (isset($values['ID']) && (! $key['#text'])) { - $key = '_KEY:'.$values['ID']; - unset($values['ID']); - - } elseif (isset($values['ID']) && ($values['#text'])) { - $key = '_KEY:'.$values['ID']; - } - - $parseXML[$key] = $this->_parseXML($index,$values); - } - - return $parseXML; - } - - function getCreationTemplate($template) { - return isset($this->_creation_template[$template]) ? $this->_creation_template[$template] : null; - } - - function getEditingTemplate($template) { - return isset($this->_editing_template[$template]) ? $this->_editing_template[$template] : null; - } - - function getCreationTemplates() { - return $this->_creation_template; - } - - function getEditingTemplates() { - return $this->_editing_template; - } - - function OnChangeAdd($ldapserver,$origin,$value) { - if (DEBUG_ENABLED) - debug_log('Entered with (%s,%s,%s)',5,__FILE__,__LINE__,__METHOD__,$ldapserver->server_id,$origin,$value); - - global $_js_hash; - - # limit to 2 fields because of 'C:\\my directory\\foobar' - list($command,$arg) = split(':',$value,2); - - switch ($command) { - /* - autoFill:string - string is a literal string, and may contain many fields like %attr|start-end/flags% - to substitute values read from other fields. - |start-end is optional, but must be present if the k flag is used. - /flags is optional. - - flags may be: - T: Read display text from selection item (drop-down list), otherwise, read the value of the field - For fields that aren't selection items, /T shouldn't be used, and the field value will always be read. - k: Tokenize: - If the "k" flag is not given: - A |start-end instruction will perform a sub-string operation upon - the value of the attr, passing character positions start-end through. - start can be 0 for first character, or any other integer. - end can be 0 for last character, or any other integer for a specific position. - If the "k" flag is given: - The string read will be split into fields, using : as a delimiter - "start" indicates which field number to pass through. - l: Make the result lower case. - U: Make the result upper case. - */ - case 'autoFill' : - list($attr,$string) = preg_split('(([^,]+),(.*))',$arg,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); - preg_match_all('/%(\w+)(\|[0-9]*-[0-9]*)?(\/[klTUA]+)?%/U',$string,$matchall); - //print"
";print_r($matchall); //0 = highlevel match, 1 = attr, 2 = subst, 3 = mod
-
-				if (! isset($_js_hash['autoFill'.$origin]))
-					$_js_hash['autoFill'.$origin] = '';
-
-				$formula = $string;
-				$formula = preg_replace('/^([^%])/','\'$1',$formula);
-				$formula = preg_replace('/([^%])$/','$1\'',$formula);
-
-				# Check that our attributes match our schema attributes.
-				foreach ($matchall[1] as $index => $checkattr) {
-					$matchattr = $ldapserver->getSchemaAttribute($checkattr);
-
-					# If the attribute is the same as in the XML file, then dont need to do anything.
-					if ($matchattr->getName() == $checkattr)
-						continue;
-
-					$formula = preg_replace("/$checkattr/",$matchattr->getName(),$formula);
-					$matchall[1][$index] = $matchattr->getName();
-				}
-
-				$elem_id = 0;
-
-				foreach ($matchall[0] as $index => $null) {
-					$match_attr = $matchall[1][$index];
-					$match_subst = $matchall[2][$index];
-					$match_mod = $matchall[3][$index];
-
-					$substrarray = array();
-
-					if (! isset($varcount[$match_attr]))
-						$varcount[$match_attr] = 0;
-					else
-						$varcount[$match_attr]++;
-
-					$js_match_attr = $match_attr;
-					$match_attr = $js_match_attr.'xx'.$varcount[$match_attr];
-
-					$formula = preg_replace('/%'.$js_match_attr.'([|\/%])/','%'.$match_attr.'$1',$formula,1);
-
-					$_js_hash['autoFill'.$origin] .= sprintf("  var %s;\n",$match_attr);
-					$_js_hash['autoFill'.$origin] .= sprintf(
-							"  var elem$elem_id = document.getElementById(pre+'%s'+suf);\n".
-							"  if (!elem$elem_id) return;\n", $js_match_attr);
-
-					if (strstr($match_mod,'T')) {
-						$_js_hash['autoFill'.$origin] .= sprintf("  %s = elem$elem_id.options[elem$elem_id.selectedIndex].text;\n",
-							$match_attr);
-					} else {
-						$_js_hash['autoFill'.$origin] .= sprintf("  %s = elem$elem_id.value;\n",$match_attr);
-					}
-
-					$elem_id++;
-
-					if (strstr($match_mod,'k')) {
-						preg_match_all('/([0-9]+)/',trim($match_subst),$substrarray);
-						if (isset($substrarray[1][0])) {
-							$tok_idx = $substrarray[1][0];
-						} else {
-							$tok_idx = '0';
-						}
-						$_js_hash['autoFill'.$origin] .= sprintf("   %s = %s.split(':')[%s];\n",$match_attr,$match_attr,$tok_idx);
-					} else {
-						preg_match_all('/([0-9]*)-([0-9]*)/',trim($match_subst),$substrarray);
-						if ((isset($substrarray[1][0]) && $substrarray[1][0]) || (isset($substrarray[2][0]) && $substrarray[2][0])) {
-							$_js_hash['autoFill'.$origin] .= sprintf("   %s = %s.substr(%s,%s);\n",
-								$match_attr,$match_attr,
-								$substrarray[1][0] ? $substrarray[1][0] : '0',
-								$substrarray[2][0] ? $substrarray[2][0] : sprintf('%s.length',$match_attr));
-						}
-					}
-
-					if (strstr($match_mod,'l')) {
-						$_js_hash['autoFill'.$origin] .= sprintf("   %s = %s.toLowerCase();\n",$match_attr,$match_attr);
-					}
-					if (strstr($match_mod,'U')) {
-						$_js_hash['autoFill'.$origin] .= sprintf("   %s = %s.toUpperCase();\n",$match_attr,$match_attr);
-					}
-					if (strstr($match_mod,'A')) {
-						$_js_hash['autoFill'.$origin] .= sprintf("   %s = toAscii(%s);\n",$match_attr,$match_attr);
-					}
-
-					# Matchfor only entry without modifiers.
-					$formula = preg_replace('/^%('.$match_attr.')%$/U','$1 + \'\'',$formula);
-					# Matchfor only entry with modifiers.
-					$formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[klTUA]+)?%$/U','$1 + \'\'',$formula);
-					# Matchfor begining entry.
-					$formula = preg_replace('/^%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[klTUA]+)?%/U','$1 + \'',$formula);
-					# Matchfor ending entry.
-					$formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[klTUA]+)?%$/U','\' + $1 ',$formula);
-					# Match for entries not at begin/end.
-					$formula = preg_replace('/%('.$match_attr.')(\|[0-9]*-[0-9]*)?(\/[:lTUA]+)?%/U','\' + $1 + \'',$formula);
-					$_js_hash['autoFill'.$origin] .= "\n";
-				}
-
-				$_js_hash['autoFill'.$origin] .= sprintf(" fillRec(pre+'%s'+suf, %s); // %s\n",$attr,$formula,$string);
-				$_js_hash['autoFill'.$origin] .= "\n";
-				break;
-
-			default: $return = '';
-		}
-		return '1';
-	}
-
-	function getJsHash() {
-		global $_js_hash;
-		return $_js_hash;
-	}
-
-	// @todo: The XML files need to change the field seperater to something else (ie: not comma)
-	// as it is clashing when a DN is used as an argument.
-	static function EvaluateDefault(&$ldapserver,$value,$container,$counter='',$default=null) {
-		if (DEBUG_ENABLED)
-			debug_log('Entered with (%s,%s,%s,%s)',5,__FILE__,__LINE__,__METHOD__,
-				$ldapserver->server_id,$value,$container,$counter);
-
-		if (preg_match('/^=php\.(\w+)\((.*)\)$/',$value,$matches)) {
-			$args = preg_split('/,/',$matches[2]);
-			$vals = array();
-
-			switch($matches[1]) {
-				case 'GetNextNumber' :
-					/*
-					 * mandatory arguments:
-					 * * arg 0
-					 *	- "$" => 'auto_number','search_base' in config file
-					 *	- "/","..","." => get container parent as usual
-					 * * arg 1
-					 *	- "gid" or "uid" for autosearch
-					 *	- idem or real attribute name for uidpool mechanism
-					 *	(gid and uid are mapped to sambaNextGroupRid and sambaNextUserRid)
-					 * optional arguments:
-					 * * arg 2 (uidpool mechanism only)
-					 *	- "true" increments attribute by 1
-					 *	- "false" do nothing
-					 * * arg 3 (uidpool mechanism only)
-					 *	ldap filter (must match one entry only in container)
-					 * * arg 4
-					 *	calculus on number, eg:
-					 *	*2;+1000 => number = (2*number) + 1000
-					 */
-
-					if ($args[0] == '$')
-						$args[0] = $_SESSION[APPCONFIG]->ldapservers->GetValue($ldapserver->server_id,'auto_number','search_base');
-
-					$container = $ldapserver->getContainerParent($container,$args[0]);
-					$vals = get_next_number($ldapserver,$container,$args[1],(!empty($args[2]) && ($args[2] == 'false')) ? false : true,(!empty($args[3])) ? $args[3] : false);
-					# operate calculus on next number.
-					if (!empty($args[4])) {
-						$mod = split(';',$args[4]);
-						$next_number = $vals;
-						foreach ($mod as $calc) {
-							$operand = $calc{0};
-							$operator = substr ($calc,1);
-
-							switch ($operand) {
-								case '*':
-									$next_number = $next_number * $operator;
-									break;
-
-								case '+':
-									$next_number = $next_number + $operator;
-									break;
-
-								case '-':
-									$next_number = $next_number - $operator;
-									break;
-
-								case '/':
-									$next_number = $next_number / $operator;
-									break;
-							}
-						}
-
-						$vals = $next_number;
-					}
-					break;
-
-				case 'PickList' :
-					/*
-					 * PickList Syntax:
-					 * arg0: container, from current position
-					 * arg1: LDAP filter. must replace '&' by '&'
-					 * arg2: list attribute key
-					 * arg3: display, as usual
-					 * optional arguments:
-					 * arg4: output attribute
-					 * arg5: container override
-					 * arg6: csv list (; separator) of added values. syntax key => display_attribute=value; key...
-					 * arg7: csv list (; separator) of sort attributes (less to more important)
-					 * example
-					 * =php.PickList(/,(&(objectClass=sambaGroupMapping)(|(cn=domain administrator)(cn=domain users)(cn=domain guests))),sambaSID,%cn% (%sambaSID%),sambaPrimaryGroupSID,dmdname=users:::dmdName=groups:::dc=example:::dc=com, S-1-5-XX-YYY => cn=Administrators ; S-1-5-XX-YYY => cn=Users ; S-1-5-XX-YYY => cn=Guests ; S-1-5-XX-YYY => cn=power users,cn)
-					 */
-
-					$container = $ldapserver->getContainerParent($container,$args[0]);
-					preg_match_all('/%(\w+)(\|.+)?(\/[lU])?%/U',$args[3],$matchall);
-					//print_r($matchall); // -1 = highlevel match, 1 = attr, 2 = subst, 3 = mod
-
-					$ldap_attrs = $matchall[1];
-					array_push($ldap_attrs,$args[2]);
-
-					$args[1] = str_replace ('&','&',$args[1]);
-
-					# arg5 overrides container
-					if (!empty($args[5]))
-						$container = str_replace(':::',',',$args[5]);
-
-					if (!empty($args[7])) {
-						$sort_attrs = split(';',$args[7]);
-						$ldap_attrs = array_merge($ldap_attrs,$sort_attrs);
-					}
-
-					$picklistvalues = return_ldap_hash($ldapserver,$container,$args[1],$args[2],$ldap_attrs,
-						(isset($args[7])) ? $sort_attrs : false);
-
-					if (!empty($args[6])) {
-						$args[6] = str_replace(':::',',',$args[6]);
-						$fixedvalues = split(';',$args[6]);
-
-						foreach ($fixedvalues as $fixedvalue) {
-							$fixedvalue = preg_split('#=\>#',$fixedvalue);
-							$displayvalue = split('=',$fixedvalue[1]);
-							$newvalue[trim($fixedvalue[0])] = array( $args[2] => trim($fixedvalue[0]),
-								trim($displayvalue[0]) => trim($displayvalue[1]));
-							$picklistvalues = array_merge($picklistvalues,$newvalue);
-						}
-					}
-
-					$vals = array();
-
-					foreach ($picklistvalues as $key => $values) {
-						$display = $args[3];
-
-						foreach ($matchall[1] as $arg)
-							$display = preg_replace('/%('.$arg.')(\|.+)?(\/[lU])?%/U',$values[$arg],$display);
-
-						if (! isset($picklist[$values[$args[2]]])) {
-							$vals['_KEY:'.$values[$args[2]]] = $display;
-							$picklist[$display] = true;
-						}
-					}
-
-					break;
-
-				case 'MultiList' :
-					/*
-					 * MultiList Syntax:
-					 */
-					/**
-					 * mandatory fields:
-					 *	arg 0: "/" ,"..","." - from container dn
-					 *	arg 1: search filter, may have values like '%gidNumber%, in case of it is replaced
-					 *		by the gidNumber setted in previous pages. '&' must be replaced by '&'
-					 *		because of xml...
-					 *	arg 2: the key of retrived values
-					 * optional fields:
-					 *	arg 3: display, as usual (plus modifier /C: Capitalize). replaced by %arg 2% if not given
-					 *	arg 4: the value furnished in output - must be attribute id. replaced by arg 2 if not given
-					 *	arg 5: override of container (replace ',' by ':::' in dn)
-					 *	arg 6: csv (; separator) list of added values. syntax: value => display_key=display_value
-					 *	arg 7: csv (; separator) list of attributes which list must be sort by. less to more important
-					 *	arg 8: size of displayed list (default: 10lines)
-					 *	arg 9: preselected values filter. see arg 1.
-					 *	arg 10: key of preselected values. replaced by arg 4 if not given. replaced bty arg 2 if both are not given.
-					 *	arg 11: base dn override for preselected values
-					 * unusual exemple:)
-					 *	 =php.MultiList(/,(&(objectClass=posixAccount)(uid=groupA*)),uid,%cn/U% (%gidNumber%),memberUid,dmdName=users,root => cn=root; nobody => cn=nobody,gidNumber,10,(gidNuber=%gidNumber%),uid)
-					 * minimal exemple:
-					 *	=php.MultiList(/,(objectClass=posixAccount),uid)
-					**/
-
-					$container = $ldapserver->getContainerParent($container,$args[0]);
-
-					/*
-					 * process filter (arg 1), eventually replace %attr% by it's value
-					 * setted in a previous page.
-					 */
-					$args[1] = str_replace('&','&',$args[1]);
-
-					preg_match_all('/%(\w+)(\|.+)?(\/[lUC])?%/U',$args[1],$filtermatchall);
-
-					if (isset($_REQUEST['form'])) {
-						$formvalues = array_change_key_case($_REQUEST['form']);
-
-						foreach ($filtermatchall[1] as $arg) {
-							$value = $formvalues[strtolower($arg)];
-							$args[1] = preg_replace('/%('.$arg.')(\|.+)?(\/[lU])?%/U',$value,$args[1]);
-						}
-					}
-
-					$args[3] = !empty($args[3]) ? $args[3] : "%{$args[2]}%";
-
-					preg_match_all('/%(\w+)(\|.+)?(\/[lUC])?%/U',$args[3],$matchall);
-					//print_r($matchall); // -1 = highlevel match, 1 = attr, 2 = subst, 3 = mod
-
-					$ldap_attrs = $matchall[1];
-					array_push($ldap_attrs,$args[2]);
-
-					/*
-					 * container is arg 5 if set
-					 * with arg 5 = 'dc=thissubtree:::dc=thistree' stands for 'dc=subtree,dc=tree'
-					 * => 'dc=subtree,dc=tree,dc=container'
-					 */
-					if (isset($args[5]) && ($args[5]))
-						$container = str_replace(':::',',',$args[5]);
-
-					/*
-					 * arg 7 is sort attributes
-					 * eg: 'sn;givenName'
-					 */
-					if (isset($args[7])) {
-						$sort_attrs = split(';',$args[7]);
-						$ldap_attrs = array_merge($ldap_attrs,$sort_attrs);
-					}
-
-					$picklistvalues = return_ldap_hash($ldapserver,$container,$args[1],$args[2],$ldap_attrs,
-						(isset($args[7]) && ($args[7])) ? $sort_attrs : false);
-
-					# arg 6 is a set of fixed values to add to search result
-					if (isset($args[6])) {
-						$args[6] = str_replace(':::',',',$args[6]);
-						$fixedvalues = split(';',$args[6]);
-
-						foreach ($fixedvalues as $fixedvalue) {
-							if (empty($fixedvalue))
-								continue;
-
-							$fixedvalue = preg_split('#=\>#',$fixedvalue);
-							$displayvalue = split('=',$fixedvalue[1]);
-							$newvalue[trim($fixedvalue[0])] = array($args[2] => trim($fixedvalue[0]),
-								trim($displayvalue[0]) => trim($displayvalue[1]));
-							$picklistvalues = array_merge($picklistvalues,$newvalue);
-						}
-					}
-
-					/*
-					 * arg 9 is the search filter for already selected values, with criteriai eventually
-					 * coming from previous pages (eg: %uid%)
-					 */
-					if (isset($args[9])) {
-						$args[9] = str_replace('&','&',$args[9]);
-
-						preg_match_all('/%(\w+)(\|.+)?(\/[lUC])?%/U',$args[9],$matchallinlist);
-
-						foreach ($matchallinlist[1] as $arg) {
-							$value=$formvalues[strtolower($arg)];
-
-							$args[9] = preg_replace('/%('.$arg.')(\|.+)?(\/[lU])?%/U',$value,$args[9]);
-						}
-
-						# arg 11 overrides container dn for selected values
-						if (!empty($args[11]))
-							$container = str_replace(':::',',',$args[11]);
-
-						$inpicklistvalues = return_ldap_hash($ldapserver,$container,$args[9],$args[2],$ldap_attrs);
-					}
-
-					$vals = array();
-
-					foreach ($picklistvalues as $key => $values) {
-						$display = $args[3];
-
-						foreach ($matchall[1] as $key => $arg) {
-							$disp_val = $values[$arg];
-							if (is_array($disp_val)) $disp_val = $disp_val[0];
-							if (!$disp_val) $disp_val = '';
-
-							if ($matchall[3][$key])
-								switch ($matchall[3][$key]) {
-									case '/l':
-									# lowercase
-										if (function_exists('mb_convert_case'))
-											$disp_val = mb_convert_case($disp_val,MB_CASE_LOWER,'utf-8');
-										else
-											$disp_val = strtolower($disp_val);
-										break;
-
-									case '/U':
-									# uppercase
-										if (function_exists('mb_convert_case'))
-											$disp_val = mb_convert_case($disp_val,MB_CASE_UPPER,'utf-8');
-										else
-											$disp_val = strtoupper($disp_val);
-										break;
-
-									case '/C':
-									# capitalize
-										if (function_exists('mb_convert_case'))
-											$disp_val = mb_convert_case($disp_val,MB_CASE_TITLE,'utf-8');
-										else
-											$disp_val = ucfirst($disp_val);
-										break;
-
-									default:
-										break;
-								}
-
-							# make value a substring of
-							preg_match_all('/^\|([0-9]*)-([0-9]*)$/',trim($matchall[2][$key]),$substrarray);
-
-							if ((isset($substrarray[1][0]) && $substrarray[1][0]) || (isset($substrarray[2][0]) && $substrarray[2][0])) {
-								$begin = $substrarray[1][0] ? $substrarray[1][0] : '0';
-								$end = $substrarray[2][0] ? $substrarray[2][0] : strlen($disp_val);
-								if (function_exists('mb_substr'))
-									$disp_val = mb_substr($disp_val,$begin,$end,'utf-8');
-								else
-									$disp_val = substr($disp_val,$begin,$end);
-							}
-
-							$display = preg_replace('/%('.$arg.')(\|.+)?(\/[lUC])?%/U',$disp_val,$display);
-						}
-
-						if (! isset($picklist[$values[$args[2]]])) {
-							$vals['_KEY:'.$values[$args[2]]] = $display;
-							$picklist[$values[$args[2]]] = true;
-						}
-					}
-
-					break;
-
-				case 'RandomPassword' :
-					$vals = password_generate();
-					printf('',
-						_('A random password was generated for you'),$vals);
-
-					break;
-
-				case 'DrawChooserLink' :
-					$vals = draw_chooser_link(sprintf('template_form.%s%s',$args[0],$counter),$args[1]);
-
-					break;
-
-				case 'Function' :
-					# Capture the function name and remove function name from $args
-					$function_name = array_shift($args);
-
-					$function_args = array();
-					foreach ($args as $arg) {
-						if (preg_match('/^%(\w+)(\|.+)?(\/[lU])?%/U',$arg,$matches)) {
-
-							$varname = $matches[1];
-
-							if (isset($_POST['form'][$varname]))
-								$function_args[] = $_POST['form'][$varname];
-							else
-								error(sprintf(_('Your template calls php.Function for a default value, however (%s) is NOT available in the POST FORM variables. The following variables are available [%s].'),$varname,
-									(isset($_POST['form']) ? implode('|',array_keys($_POST['form'])) : 'NONE')),'error','index.php');
-						} else {
-							$function_args[] = $arg;
-						}
-					}
-
-					# Call the PHP function if exists (PHP 4 >= 4.0.4, PHP 5)
-					if (function_exists($function_name))
-						$vals = call_user_func_array($function_name,$function_args);
-
-					break;
-
-				default : $vals = 'UNKNOWN';
-			}
-
-			$return = $vals;
-
-		} else {
-			$return = $value;
-		}
-
-		if (DEBUG_ENABLED)
-			debug_log('Returning (%s)',5,__FILE__,__LINE__,__METHOD__,$return);
-		return $return;
-	}
-
-	function HelperValue($helper,$id='',$container='',$ldapserver='',$counter='',$default='') {
-		if (DEBUG_ENABLED)
-			debug_log('Entered with (%s,%s,%s,%s,%s,%s)',5,__FILE__,__LINE__,__METHOD__,
-				$helper,$id,$container,$ldapserver->server_id,$counter,$default);
-
-		if ($container && $ldapserver && ! is_array($helper)) {
-			if (preg_match('/^=php./',$helper))
-				$html = sprintf('',$id,
-					$this->EvaluateDefault($ldapserver,$helper,$container,$counter));
-
-			else
-				# @todo: Enable size and width configuration in template
-				$html = sprintf('',$id,$helper);
-
-		} else {
-			if (is_array($helper)) {
-
-				$html = sprintf('';
-
-			} else {
-				print "ERROR: HelperValue NOT complete, how did you get HERE?";
-				die();
-			}
-		}
-
-		return $html;
-	}
+/**
+ * Templates Class
+ *
+ * This class will store all our templates.
+ *
+ * @package phpLDAPadmin
+ * @subpackage Templates
+ */
+class Templates extends xmlTemplates {
 }
 ?>
diff --git a/lib/timeout_functions.php b/lib/timeout_functions.php
deleted file mode 100644
index bcc5f62..0000000
--- a/lib/timeout_functions.php
+++ /dev/null
@@ -1,81 +0,0 @@
-server_id);
-
-	$_SESSION['activity']['server'][$ldapserver->server_id] = time();
-	return true;
-}
-
-/**
- * Remove the session-var "lastactivity_X" set by update_lastactivity()
- * where X is the * ID of the server
- *
- * @param object $ldapserver The LDAPServer object of the server which the user has logged in.
- */
-function unset_lastactivity($ldapserver) {
-	if (DEBUG_ENABLED)
-		debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$ldapserver->server_id);
-
-	if (isset($_SESSION['activity']['server'][$ldapserver->server_id]))
-		unset($_SESSION['activity']['server'][$ldapserver->server_id]);
-}
-
-/**
- * Check if custom session timeout has been reached for server $ldapserver.
- * If it has:
- * 	- automatically log out user by calling $ldapserver->unsetLoginDN()
- *	- return true
- *
- * @param object $ldapserver The LDAPServer object of the server which the user has logged in.
- * @return bool true on success, false on failure.
- */
-function session_timed_out($ldapserver) {
-	if (DEBUG_ENABLED)
-		debug_log('Entered with (%s)',1,__FILE__,__LINE__,__METHOD__,$ldapserver->server_id);
-
-	# If session hasn't expired yet
-	if (isset($_SESSION['activity']['server'][$ldapserver->server_id])) {
-
-		# If $session_timeout not defined, use (session_cache_expire() - 1)
-		if (! isset($ldapserver->session_timeout))
-			$session_timeout = session_cache_expire()-1;
-		else
-			$session_timeout = $ldapserver->session_timeout;
-
-		# Get the $last_activity value
-		$last_activity = $_SESSION['activity']['server'][$ldapserver->server_id];
-
-		# If diff between current time and last activity greater than $session_timeout, log out user
-		if ((time()-$last_activity) > ($session_timeout*60)) {
-
-			if (in_array($ldapserver->auth_type,array('cookie','session'))) {
-				syslog_notice('Logout for '.$ldapserver->getLoggedInDN());
-				$ldapserver->unsetLoginDN() or error(_('Could not logout.'),'error','index.php');
-			}
-
-			return true;
-
-		}
-	}
-
-	return false;
-}
-?>
diff --git a/lib/xml2array.php b/lib/xml2array.php
new file mode 100644
index 0000000..59ee746
--- /dev/null
+++ b/lib/xml2array.php
@@ -0,0 +1,146 @@
+stack[count($this->stack)] = &$pos;
+		$this->stack_ref = &$pos;
+	}
+
+	private function pop_pos() {
+		unset($this->stack[count($this->stack) - 1]);
+		$this->stack_ref = &$this->stack[count($this->stack) - 1];
+	}
+
+	public function parseXML($strInputXML,$filename) {
+		$this->resParser = xml_parser_create();
+		xml_set_object($this->resParser,$this);
+		xml_set_element_handler($this->resParser,'tagOpen','tagClosed');
+
+		xml_set_character_data_handler($this->resParser,'tagData');
+
+		$this->push_pos($this->arrOutput);
+
+		$this->strXmlData = xml_parse($this->resParser,$strInputXML);
+
+		if (! $this->strXmlData)
+			die(sprintf('XML error: %s at line %d in file %s',
+				xml_error_string(xml_get_error_code($this->resParser)),
+				xml_get_current_line_number($this->resParser),
+				$filename));
+
+		xml_parser_free($this->resParser);
+
+		$output = array();
+		foreach ($this->arrOutput as $key => $values)
+			$output[$key] = $this->cleanXML($values);
+
+		#return $this->arrOutput;
+		return $output;
+	}
+
+	private function tagOpen($parser,$name,$attrs) {
+		$name = strtolower($name);
+
+		if (isset($this->stack_ref[$name])) {
+			if (! isset($this->stack_ref[$name][0])) {
+				$tmp = $this->stack_ref[$name];
+				unset($this->stack_ref[$name]);
+				$this->stack_ref[$name][0] = $tmp;
+			}
+
+			$cnt = count($this->stack_ref[$name]);
+			$this->stack_ref[$name][$cnt] = array();
+			if (isset($attrs))
+				$this->stack_ref[$name][$cnt] = $attrs;
+
+			$this->push_pos($this->stack_ref[$name][$cnt]);
+
+		} else {
+			$this->stack_ref[$name]=array();
+
+			if (isset($attrs))
+				$this->stack_ref[$name]=$attrs;
+
+			$this->push_pos($this->stack_ref[$name]);
+		}
+	}
+
+	private function tagData($parser,$tagData) {
+		if (trim($tagData) != '') {
+
+			if (isset($this->stack_ref['#text']))
+				$this->stack_ref['#text'] .= $tagData;
+			else
+				$this->stack_ref['#text'] = $tagData;
+		}
+	}
+
+	private function tagClosed($parser,$name) {
+		$this->pop_pos();
+	}
+
+	/**
+	 * This function will parse an XML array and make a normal array.
+	 *
+	 * @return array - Clean XML data
+	 */
+	private function cleanXML($details) {
+		# Quick processing for the final branch of the XML array.
+		if (is_array($details) && isset($details['#text']))
+			return $details['#text'];
+
+		elseif (is_array($details) && isset($details['ID']) && count($details) == 1)
+			return $details['ID'];
+
+		$cleanXML = array();
+
+		# Quick processing for the final branch, when it holds the ID and values.
+		if (is_array($details) && isset($details['ID']) && count($details) > 1) {
+				$key = $details['ID'];
+				unset($details['ID']);
+				$cleanXML[$key] = $this->cleanXML($details);
+				$details = array();
+		}
+
+		# More detailed processing...
+		if (is_array($details))
+			foreach ($details as $key => $values)
+				if (is_numeric($key) && isset($values['ID']) && count($values) > 1) {
+					$key = $values['ID'];
+					unset($values['ID']);
+					$cleanXML[$key] = $this->cleanXML($values);
+
+				} elseif (isset($values['#text']))
+					$cleanXML[$key] = $this->cleanXML($values);
+
+				elseif (is_array($values))
+					$cleanXML[$key] = $this->cleanXML($values);
+
+		if (! $cleanXML)
+			return $details;
+		else
+			return $cleanXML;
+	}
+}
diff --git a/lib/xmlTemplates.php b/lib/xmlTemplates.php
new file mode 100644
index 0000000..936c187
--- /dev/null
+++ b/lib/xmlTemplates.php
@@ -0,0 +1,420 @@
+server_id = $server_id;
+		$server = $_SESSION[APPCONFIG]->getServer($this->server_id);
+		$custom_prefix = $server->getValue('custom','pages_prefix');
+		$class = $this->getClassVars();
+		$changed = false;
+
+		# Try to get the templates from our CACHE.
+		if ($this->templates = get_cached_item($server_id,$class['item'])) {
+			if (DEBUG_ENABLED)
+				debug_log('Using CACHED templates',5,__FILE__,__LINE__,__METHOD__);
+
+			# See if the template_time has expired to see if we should reload the templates.
+			foreach ($this->templates as $index => $template) {
+				# If the file no longer exists, we'll delete the template.
+				if (! file_exists($template->getFileName())) {
+					unset($this->templates[$index]);
+					$changed = true;
+
+					system_message(array(
+						'title'=>_('Template XML file removed.'),
+						'body'=>sprintf('%s %s (%s)',_('Template XML file has removed'),$template->getName(false),$template->getType()),
+						'type'=>'info','special'=>true));
+
+					continue;
+				}
+
+				if (($template->getReadTime() < (time()-$class['cachetime']))
+					&& (filectime($template->getFileName()) > $template->getReadTime())) {
+
+					system_message(array(
+						'title'=>_('Template XML file changed.'),
+						'body'=>sprintf('%s %s (%s)',_('Template XML file has changed and been reread'),$template->getName(false),$template->getType()),
+						'type'=>'info','special'=>true));
+
+					$changed = true;
+					eval(sprintf('$this->templates[$index] = new %s($this->server_id,$template->getName(false),$template->getFileName(),$template->getType(),$index);',$class['name']));
+				}
+			}
+
+			# See if there are any new template files
+			$index = max(array_keys($this->templates))+1;
+			foreach ($class['types'] as $type) {
+				$dir = $class['dir'].$type;
+				$dh = opendir($dir);
+				if (! $type)
+					$type = 'template';
+
+				while ($file = readdir($dh)) {
+					# Ignore any files that are not XML files.
+					if (! preg_match('/.xml$/',$file))
+						continue;
+
+					# Ignore any files that are not the predefined custom files.
+					if ($_SESSION[APPCONFIG]->getValue('appearance','custom_templates_only')
+						&& ! preg_match("/^${custom_prefix}/",$file))
+						continue;
+
+					$filename = sprintf('%s/%s',$dir,$file);
+
+					if (! in_array($filename,$this->getTemplateFiles())) {
+						$templatename = preg_replace('/.xml$/','',$file);
+	
+						eval(sprintf('$this->templates[$index] = new %s($this->server_id,$templatename,$filename,$type,$index);',$class['name']));
+						$index++;
+
+						$changed = true;
+
+						system_message(array(
+							'title'=>_('New Template XML found.'),
+							'body'=>sprintf('%s %s (%s)',_('A new template XML file has been loaded'),$file,$type),
+							'type'=>'info','special'=>true));
+					}
+				}
+			}
+
+		} else {
+			if (DEBUG_ENABLED)
+				debug_log('Parsing templates',5,__FILE__,__LINE__,__METHOD__);
+
+			# Need to reset this, as get_cached_item() returns null if nothing cached.
+			$this->templates = array();
+			$changed = true;
+
+			$counter = 0;
+			foreach ($class['types'] as $type) {
+				$dir = $class['dir'].$type;
+				$dh = opendir($class['dir'].$type);
+				if (! $type)
+					$type = 'template';
+
+				while ($file = readdir($dh)) {
+					# Ignore any files that are not XML files.
+					if (! preg_match('/.xml$/',$file))
+						continue;
+
+					# Ignore any files that are not the predefined custom files.
+					if ($_SESSION[APPCONFIG]->getValue('appearance','custom_templates_only')
+						&& ! preg_match("/^${custom_prefix}/",$file))
+						continue;
+
+					$filename = sprintf('%s/%s',$dir,$file);
+
+					# Store the template
+					$templatename = preg_replace('/.xml$/','',$file);
+					eval(sprintf('$this->templates[$counter] = new %s($this->server_id,$templatename,$filename,$type,$counter);',$class['name']));
+					$counter++;
+				}
+			}
+		}
+
+		if ($changed) {
+			masort($this->templates,'title');
+			set_cached_item($server_id,$class['item'],'null',$this->templates);
+		}
+	}
+
+	/**
+	 * This will return our custom class variables, used by the parent to create objects.
+	 */
+	private function getClassVars() {
+		$class = array();
+
+		switch (get_class($this)) {
+			case 'Queries':
+				$class['item'] = 'query';
+				$class['name'] = 'Query';
+				$class['cachetime'] = $_SESSION[APPCONFIG]->getValue('cache','query_time');
+				$class['types'] = array('');
+				$class['dir'] = QUERYDIR;
+
+				break;
+
+			case 'Templates':
+				$class['item'] = 'template';
+				$class['name'] = 'Template';
+				$class['cachetime'] = $_SESSION[APPCONFIG]->getValue('cache','template_time');
+				$class['types'] = array('creation','modification');
+				$class['dir'] = TMPLDIR;
+
+				break;
+
+			default:
+				debug_dump_backtrace(sprintf('Unknown class %s',get_class($this)),1);
+		}
+
+		return $class;
+	}
+
+	/**
+	 * Return a list of templates by their type
+	 * This function should return a sorted list, as the array is built sorted.
+	 *
+	 * @param string Type of template, eg: creation, modification
+	 * @return array List of templates of the type
+	 */
+	public function getTemplates($type=null) {
+		$result = array();
+
+		if (is_array($this->templates))
+			foreach ($this->templates as $template)
+				if ($template->isVisible())
+					if (is_null($type) || (! is_null($type) && $template->isType($type)))
+						array_push($result,$template);
+
+		return $result;
+	}
+
+	/**
+	 * Return a template by its ID
+	 *
+	 * @param string The template ID as it was when it was generated (normally used in $_REQUEST vars).
+	 * @return object Template (or default template if the ID doesnt exist)
+	 */
+	function getTemplate($templateid) {
+		$class = $this->getClassVars();
+
+		foreach ($this->templates as $template)
+			if ($template->getID() === $templateid)
+				return clone $template;
+
+		# If we get here, the template ID didnt exist, so return a blank template, which be interpreted as the default template
+		eval(sprintf('$object = new %s($this->server_id,null,null,"default");',$class['name']));
+		return $object;
+	}
+
+	/**
+	 * Get a list of template filenames.
+	 */
+	private function getTemplateFiles() {
+		$result = array();
+
+		foreach ($this->templates as $template)
+			array_push($result,$template->getFileName());
+
+		return $result;
+	}
+}
+
+/**
+ * XML Template Class
+ *
+ * @package phpLDAPadmin
+ * @subpackage Templates
+ */
+abstract class xmlTemplate {
+	# Server ID that the template is linked to
+	protected $server_id;
+	# Template unique ID
+	protected $id;
+	# Template name - as extracted from the filename
+	protected $name;
+	# Template type - creation/modification
+	protected $type;
+	# Time this object was created
+	protected $readtime;
+	# Template file name
+	protected $filename;
+	# The TEMPLATE attributes as per the template definition, or the DN entry
+	protected $attributes = array();
+
+	public function __construct($server_id,$name=null,$filename=null,$type=null,$id=null) {
+		$this->server_id = $server_id;
+		$this->name = $name;
+		$this->type = $type;
+		$this->filename = $filename;
+		$this->readtime = time();
+		$this->id = $id;
+
+		# If there is no filename, then this template is a default template.
+		if (is_null($filename))
+			return;
+
+		# If we have a filename, parse the template file and build the object.
+		$objXML = new xml2array();
+		$xmldata = $objXML->parseXML(file_get_contents($filename),$filename);
+		$this->storeTemplate($xmldata);
+	}
+
+	/**
+	 * Get an attribute ID
+	 *
+	 * @param string The Attribute being searched.
+	 * @return int Attribute ID in the array
+	 */
+	protected function getAttrID($attr) {
+		foreach ($this->attributes as $index => $attribute)
+			if (strtolower($attr) == $attribute->getName() || in_array(strtolower($attr),$attribute->getAliases()))
+				return $index;
+
+		return null;
+	}
+
+	/**
+	 * Get the Template filename.
+	 */
+	public function getFileName() {
+		return $this->filename;
+	}
+
+	/**
+	 * Return the template by ID
+	 */
+	public function getID() {
+		if ($this->name)
+			return sprintf('%s:%s',$this->getName(false),$this->id);
+		else
+			return 'none';
+	}
+
+	/**
+	 * Return the template name
+	 *
+	 * @param boolean Force the name to be lowercase (default)
+	 */
+	public function getName($lower=true) {
+		if ($lower)
+			return strtolower($this->name);
+		else
+			return $this->name;
+	}
+
+	/**
+	 * Get the Template read time.
+	 */
+	public function getReadTime() {
+		return $this->readtime;
+	}
+
+	/**
+	 * Return this LDAP Server object
+	 *
+	 * @return object DataStore Server
+	 */
+	protected function getServer() {
+		return $_SESSION[APPCONFIG]->getServer($this->getServerID());
+	}
+
+	/**
+	 * Return the LDAP server ID
+	 *
+	 * @return int Server ID
+	 */
+	protected function getServerID() {
+		return $this->server_id;
+	}
+
+	/**
+	 * Test if a template is of a type
+	 *
+	 * @return boolean
+	 */
+	public function isType($type) {
+		if ($this->type == $type)
+			return true;
+		else
+			return false;
+	}
+
+	/**
+	 * Return the template type
+	 */
+	public function getType() {
+		return $this->type;
+	}
+
+	/**
+	 * Get template title
+	 */
+	public function getTitle() {
+		if (! isset($this->title) && ! isset($this->description))
+			return '';
+
+		return isset($this->title) ? $this->title : $this->description;
+	}
+
+	/**
+	 * Add another attribute to this template
+	 *
+	 * @return int Attribute ID
+	 */
+	public function addAttribute($name,$value,$source=null) {
+		if (! is_array($value))
+			debug_dump_backtrace('Value should be an array()',1);
+
+		$server = $this->getServer();
+
+		# Initialise the Attribute Factory.
+		$attribute_factory = new AttributeFactory();
+
+		# If there isnt a schema item for this attribute
+		$attribute = $attribute_factory->newAttribute($name,$value,$server->getIndex(),$source);
+
+		$attrid = $this->getAttrID($attribute->getName());
+
+		if (is_null($attrid))
+			array_push($this->attributes,$attribute);
+		else
+			debug_dump_backtrace(sprintf('There was a request to add an attribute (%s), but it was already defined? (%s)',$attrid,__METHOD__),true);
+
+		if ($this->getID() == 'none')
+			usort($this->attributes,'sortAttrs');
+
+		return $attribute;
+	}
+
+	/**
+	 * Get the attribute names
+	 *
+	 * @return array Array of attributes Names
+	 */
+	public function getAttributeNames() {
+		$result = array();
+
+		foreach ($this->attributes as $attribute)
+			array_push($result,$attribute->getName());
+
+		return $result;
+	}
+
+	/**
+	 * Get a specific Attribute
+	 *
+	 * @param string Name of attribute to retrieve
+	 * @return object Attribute
+	 */
+	public function getAttribute($name) {
+		foreach ($this->attributes as $attribute)
+			if (($attribute->getName() == strtolower($name)) || in_array(strtolower($name),$attribute->getAliases()))
+				return $attribute;
+
+		return null;
+	}
+}
+?>
diff --git a/locale/ca_ES/LC_MESSAGES/messages.mo b/locale/ca_ES/LC_MESSAGES/messages.mo
index 76373f30413f9acd5e915d1162f8f573d6727b40..7ea172f15da4b6e55da194c5e7dc9ffaa42d74ec 100644
GIT binary patch
literal 22265
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

delta 4037
zcmYk-4N#QF9mnxK;!Du@nuxE+1rSg;Jq`p!6h#nu5v+n3wI(NEM3K|uFdAzw8p%s-
zYRDQ5R1;F$iPTY>IZd>g$;)&S$EIyk>o~C;V{JQjbZQeDJ0?S#_WR==+V1eb&p!J+
zx6kf>caN`*yLubKpN<~zqM^J>Od^s88gmshhVVf-I?R}P*n{`rO`ME>$5A+JxH01}
z0b?-_AHX8a!#bz^c~qBOct8FG2OASMXQ|vr!+SUde}jYY4$j72=Q?+UF^tX3#j#k7
z_u^_CgN>MhJ5U2UiW=y9I1&GdGw^HF{fv>uOy&Kigi0C>0o09`a6Z0{OwxRTnvsj?
z>P2ym8ORJw5z?nAM@?iU@@F39V<>KSY)9r|I&d_0OWtoHR1)z6)C+H53f@J{crs5b
zBgv@LrK4V4h#GJy*5D&pgr~6>zr=Mohc7V)^J8@5Y1DfzVYq_IU#N^nFVl>}a!f)$
z>Wl5DR3AWP;1y(S<}_-?=WqaCL@mu_)Lyua>c1Cju#_)r4;@0??;b<`wdsCJ17k4f
zFaiI7>ZsT8envHu>vYu2{ip#pA(J%Ep)%Bs8qjN~)Sq&$-$gCauTk&0;Rqeg*7DoW8CsE$9tD*O<&>nD&;tyvPDbMdQ&#at_&>bL}X)KsDd
zv;mcgov49#pqAti&c?S;1G|eudB6EL6@6jogV7rasLhv(nV600Xq|Jt1=Yb3$784^
zil7F39yOo~I2}JnWj2BJ)e;x-L6cdF;Vde9sJQVA&cMs4wT|VCsXZ5$;0jcVdysu;
z-b4x4
z2VzsB1BpjOW1)6
z@FZ69e)9ztrF33K^!U}`V6IoA_Cf_
zwfiq3f94J!nn)r?W3vAL=TM<9Q;XHO8!PbwD%A-bi9#$wWo9>OO%I|5b`s0+vU8p6
z(5XryMtPa(fk+;!||w&Q!xkg
zQJZZGYG!RX0-ts4#GzdGU@V??d+wtHdbKaQWDV$|
zeHqbTVyGz1`<;g2*iHO^c!f|YCPooI)cR|4tR#|%bwn$XOQ>v%(zo8Kt{@H(&BS5i
zyM*?R2Cwocv4i*)v58PAA`TK=#BO39@iL*^KVIvv-O9wwGsIG&f>2RP^ZRPXJdZO8
zEzc}M>F+P!cPa-QAIF6R+o7*0gPp{3Ld&PZo;Obu4{7}i2^DRwM~Iz7e`%pYmdzGI
zYpW87V%9oVVIz^^TtA1}`6_#(^!>KXaq2H%hf@!)aVq`fQPHvb9-(8UeW0QpzKGDT
z<#eLIJV9kH!7pxKS;ePLg-QYOU|%izq0Rghv5RORQnmgnZek*_mC#PzOsLE!^u)J`
z351H5&}n&C7nB-eV_z-$Pbx%x57F+l37v+4&h>U&K=6BIHaPD$e&=Qy?jv;mRbC}t
z>Z=*^9n|qzPt-eYqQt4ch>sCE>(x$MsiUYRGMwwx_#}~|k@S~3DvOB(!V*EEjd+$A
zOJos=L=*A<#eVoelU+0BfQ^Z(wFlw~1_m~5Y6{ul_$1pqerY5yA=YJ|n6%9fkN4Z3
z$M1~~1_ME}(BIVD*x=v}1>E(4&D-6@RgtR+JuaJ=SYfXv)(tOP=w9Lvwl=y;^d-AB
z$!(7$EwU4nm)O0@)sZz*UU%87)O6dLS{3Z%x9GcC>TnzrBmGyPKJ=nR+3p7pxz
zP4Azq+qc`E_N`7?QeER&5Nz~^ngT7JVt=SH-|h2yvpwESPiD3|GdDkbX1dpBk7tdW
zndk9ld3-eH6NIv%kSpvTbu982aDq@;sTD9^WjtFDpMgFWU18PibRIV=&t5f4}KYTie#u
z+|d7;sYC3AoS<#a?XsD9>+C=Be1jJRHZ_KVjrRKN1lv^bP~>L8ESFtA_XYd)-1YWs
zVe23hP2I=y6CyE17hLx7;tIQGDJW0oo$-Q2+n{

diff --git a/locale/ca_ES/LC_MESSAGES/messages.po b/locale/ca_ES/LC_MESSAGES/messages.po
index 4de35bc..27d31dd 100644
--- a/locale/ca_ES/LC_MESSAGES/messages.po
+++ b/locale/ca_ES/LC_MESSAGES/messages.po
@@ -1,2810 +1,921 @@
 # : $
+
+
 msgid ""
 msgstr ""
 "Project-Id-Version: messages\n"
 "Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2004-01-14 17:45+0200\n"
-"PO-Revision-Date: 2008-03-24 16:27+0000\n"
-"Last-Translator: Unknown \n"
 "Language-Team: phpLDAPadmin \n"
+"Last-Translator: Unknown \n"
+"POT-Creation-Date: 2005-11-29 17:45+0100\n"
+"PO-Revision-Date: 2005-11-29 18:22+0100\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2008-11-29 23:48+0000\n"
-"X-Generator: Launchpad (build Unknown)\n"
 
-#: ../../htdocs/mass_delete.php:86
-#, php-format
-msgid "%s of %s entries failed to be deleted."
-msgstr ""
 
-#: ../../lib/EntryWriter1.php:960
-msgid "("
-msgstr ""
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
-#: ../../lib/HTMLTree.php:486
-msgid "(Session timed out. Automatically logged out.)"
-msgstr ""
 
-#: ../../lib/EntryWriter1.php:962
-msgid ")"
-msgstr ""
-
-#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247
-#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261
-#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513
-#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033
-#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255
-#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463
-#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175
-#: ../../lib/page.php:200 ../../htdocs/create.php:25
-#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309
-#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76
-#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112
-#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13
-#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20
-#: ../../htdocs/update.php:61 ../../htdocs/update.php:67
-#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24
-#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21
-#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20
-#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24
-#: ../../htdocs/search.php:120 ../../htdocs/search.php:124
-#: ../../htdocs/search.php:128 ../../htdocs/search.php:265
-#: ../../htdocs/search.php:276 ../../htdocs/search.php:295
-#: ../../htdocs/search.php:299 ../../htdocs/export.php:18
-#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17
-#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25
-msgid ":"
-msgstr ""
-
-#: ../../lib/search_form_advanced.php:103
-msgid "A list of attributes to display in the results (comma-separated)"
-msgstr "Una llista d'atributs per mostrar als resultats (separats per comes)"
-
-#: ../../lib/functions.php:1292
-msgid "A query on the uidpool_dn did return a valid uidNumber."
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962
-msgid "A random password was generated for you"
-msgstr ""
-
-#: ../../lib/ldif_functions.php:532
-msgid "A valid deleteoldrdn attribute should be specified"
-msgstr ""
-
-#: ../../lib/ldif_functions.php:243
-msgid "A valid dn line is required."
-msgstr ""
-
-#: ../../lib/ldif_functions.php:538
-msgid "A valid newrdn attribute  should be specified"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104
-#: ../../htdocs/add_attr_form.php:148
-msgid "Add"
-msgstr "Afegir"
-
-#: ../../htdocs/add_value_form.php:182
-msgid "Add New Value"
-msgstr ""
-
-#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104
-msgid "Add ObjectClass and Attributes"
-msgstr "Afegir ObjectClass i Atributs"
-
-#: ../../htdocs/modify_member_form.php:145
-msgid "Add all"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479
-#, php-format
-msgid "Add an additional value to attribute '%s'"
-msgstr ""
-
-#: ../../htdocs/add_value_form.php:93
-msgid "Add new"
-msgstr ""
-
-#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470
-msgid "Add new ObjectClass"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23
-#: ../../htdocs/add_attr_form.php:72
-msgid "Add new attribute"
-msgstr "Afegir nou atribut"
-
-#: ../../htdocs/add_attr_form.php:114
-msgid "Add new binary attribute"
-msgstr "Afegir valor binari"
-
-#: ../../htdocs/modify_member_form.php:145
-msgid "Add selected"
-msgstr ""
-
-#: ../../htdocs/ldif_import.php:62
-msgid "Adding..."
-msgstr "Afegint..."
-
-#: ../../lib/search_form_predefined.php:34
-#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35
-msgid "Advanced Search Form"
-msgstr "Formulari de recerca avançada"
-
-#: ../../lib/config_default.php:646
-msgid "Alias for"
-msgstr ""
-
-#: ../../htdocs/schema.php:110
-msgid "Aliases"
-msgstr ""
-
-#: ../../htdocs/mass_delete.php:88
-msgid "All entries deleted successfully."
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:825
-#, php-format
-msgid "An attribute (%s) was modified and is highlighted below."
-msgstr "Un atribut (%s) fore modificat i està remarcat més abaix."
-
-#: ../../htdocs/update_confirm.php:100
-msgid "An entry should have one structural objectClass."
-msgstr ""
-
-#: ../../htdocs/login_form.php:60
-msgid "Anonymous"
-msgstr ""
-
-#: ../../htdocs/login.php:164
-msgid "Anonymous Bind"
-msgstr ""
-
-#: ../../htdocs/delete_form.php:102
-msgid "Are you sure you want to permanently delete this object?"
-msgstr ""
-
-#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46
-msgid "Attribute"
-msgstr "Atribut"
-
-#: ../../htdocs/schema.php:42
-msgid "Attribute Types"
-msgstr ""
-
-#: ../../lib/ldif_functions.php:455
-msgid "Attribute is not valid"
-msgstr ""
-
-#: ../../lib/ldif_functions.php:375
-msgid "Attribute not well formed"
-msgstr ""
-
-#: ../../htdocs/login_form.php:63
-msgid "Authenticate"
-msgstr ""
-
-#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442
-#: ../../htdocs/login.php:26 ../../htdocs/login.php:91
-#: ../../htdocs/login.php:116 ../../htdocs/login.php:136
-#: ../../htdocs/login.php:143 ../../htdocs/login.php:163
-#: ../../htdocs/login_form.php:19
-msgid "Authenticate to server"
-msgstr ""
-
-#: ../../htdocs/modify_member_form.php:114
-msgid "Available members"
-msgstr ""
-
-#: ../../htdocs/entry_chooser.php:65
-msgid "Back Up..."
-msgstr "Tornar a..."
-
-#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443
-#: ../../htdocs/login.php:92 ../../htdocs/login.php:144
-msgid "Bad username or password. Please try again."
-msgstr ""
-
-#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31
-msgid "Base (base dn only)"
-msgstr "Base (sols base dn)"
-
-#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52
-#: ../../htdocs/search.php:295
-msgid "Base DN"
-msgstr "Base DN"
-
-#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251
-msgid "Binary value"
-msgstr "Valor binari"
-
-#: ../../htdocs/copy.php:61
-msgid "Building snapshot of tree to copy... "
-msgstr "Construïnt la 'foto' de l'arbre per a copiar... "
-
-#: ../../lib/export_functions.php:38
-msgid "CSV (Spreadsheet)"
-msgstr ""
-
-#: ../../lib/functions.php:63
-msgid "Called to load a class that cant be found"
-msgstr ""
-
-#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77
-#: ../../htdocs/delete_form.php:127
-msgid "Cancel"
-msgstr "Cancel.lar"
-
-#: ../../htdocs/compare.php:343
-msgid "Check password"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:2427
-msgid "Check password..."
-msgstr ""
-
-#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374
-msgid "Checking passwords"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:796
-msgid "Children"
-msgstr ""
-
-#: ../../lib/functions.php:3223
-msgid "Click to popup a dialog to select a date graphically"
-msgstr ""
-
-#: ../../lib/functions.php:2239
-msgid "Click to popup a dialog to select an entry (DN) graphically"
-msgstr "Fer click per seleccionar un objecte gràficament"
-
-#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83
-#: ../../htdocs/compare.php:145
-#, php-format
-msgid "Click to view the schema definition for attribute type '%s'"
-msgstr ""
-
-#: ../../htdocs/schema.php:106
-msgid "Collective"
-msgstr ""
-
-#: ../../htdocs/update_confirm.php:303
-msgid "Commit"
-msgstr "Cometre"
-
-#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35
-#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64
-msgid "Compare"
-msgstr ""
-
-#: ../../htdocs/compare_form.php:21
-msgid "Compare another DN with"
-msgstr ""
-
-#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53
-msgid "Compare this DN with another"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:776
-msgid "Compare with another entry"
-msgstr ""
-
-#: ../../htdocs/compare.php:42
-msgid "Comparing the following DNs"
-msgstr ""
-
-#: ../../htdocs/export_form.php:84
-msgid "Compress"
-msgstr ""
-
-#: ../../lib/session_functions.php:138
-msgid "Configuration cache stale."
-msgstr ""
-
-#: ../../htdocs/mass_delete.php:92
-#, php-format
-msgid "Confirm mass delete of %s entries on server %s"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:327
-msgid "Container"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:256
-msgid "Container and ObjectClass(es)"
-msgstr ""
-
-#: ../../lib/ldif_functions.php:525
-msgid "Container is null"
-msgstr ""
-
-#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51
-msgid "Copy"
-msgstr ""
-
-#: ../../htdocs/copy_form.php:96
-msgid "Copy "
-msgstr "Copiar "
-
-#: ../../htdocs/copy.php:88
-msgid "Copy Entry"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:741
-msgid "Copy or move this entry"
-msgstr "Copiar aquest objecte"
-
-#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106
-msgid "Copy successful!"
-msgstr ""
-
-#: ../../lib/EntryWriter1.php:740
-msgid "Copy this object to another location,a new DN, or another server"
-msgstr ""
-
-#: ../../htdocs/copy.php:57
-msgid "Copying "
-msgstr "Copiant "
-
-#: ../../htdocs/ldif_import.php:70
-msgid "Could not add object:"
-msgstr "No he pogut afegir l'objecte:"
-
-#: ../../htdocs/create.php:133
-msgid "Could not add the object to the LDAP server."
-msgstr "No he pogut afegir l'objecte al servidor LDAP."
-
-#: ../../htdocs/login.php:137
-msgid "Could not bind anonymously to server."
-msgstr ""
-
-#: ../../lib/server_functions.php:350
-#, php-format
-msgid "Could not bind to the LDAP server (%s)."
-msgstr ""
-
-#: ../../lib/server_functions.php:347
-#, php-format
-msgid "Could not connect to \"%s\" on port \"%s\""
-msgstr ""
-
-#: ../../lib/HTMLTree.php:96
-msgid "Could not connect to LDAP server"
-msgstr ""
-
-#: ../../htdocs/ldif_import.php:71
-msgid "Could not delete object:"
-msgstr "No he pogut esborrar l'objecte:"
-
-#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49
-#: ../../htdocs/rdelete.php:45
-#, php-format
-msgid "Could not delete the entry: %s"
-msgstr "No he pogut esborrar l'entrada: %s"
-
-#: ../../htdocs/entry_chooser.php:101
-msgid "Could not determine base DN"
-msgstr "No he pogut determinar la base DN"
-
-#: ../../lib/HTMLTree.php:82
-msgid "Could not determine the root of your LDAP tree."
-msgstr "No s'ha pogut determinar l'arrel del servidor LDAP."
-
-#: ../../lib/functions.php:1849
-#, php-format
-msgid "Could not fetch jpeg data from LDAP server for attribute %s."
-msgstr ""
-
-#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24
-msgid "Could not logout."
-msgstr ""
-
-#: ../../htdocs/ldif_import.php:74
-msgid "Could not modify object:"
-msgstr "No he pogut modificar l'objecte:"
-
-#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72
-msgid "Could not perform ldap_mod_add operation."
-msgstr "No s'ha pogut fer l'operació del ldap_mod_add."
-
-#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50
-msgid "Could not perform ldap_modify operation."
-msgstr "No he pogut executar l'operació ldap_modify."
-
-#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73
-msgid "Could not rename object:"
-msgstr "No he pogut renombrar l'objecte:"
-
-#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61
-msgid "Could not rename the entry"
-msgstr ""
-
-#: ../../htdocs/schema.php:31
-msgid "Could not retrieve schema from"
-msgstr ""
-
-#: ../../htdocs/login.php:152
-msgid "Could not set cookie."
-msgstr ""
-
-#: ../../lib/server_functions.php:265
-msgid "Could not start TLS. Please check your LDAP server configuration."
-msgstr ""
-"No he pogut iniciar el TLS.
Revisa la teva configuració del servidor " -"LDAP." - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "Crear Objecte" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "Crear objecte com a fill" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "Crear un nou objecte a" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "Crear Nou Objecte" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "Crèdits" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "La llista actual de" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "Esborrar foto" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "Esborrar aquest objecte" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "Esborrant..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "Descripció" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "DN de destí" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "Servidor de destí" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "" - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "Nom distinguit" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "Vols fer aquests canvis?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "Documentació" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "" - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "" - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "Proveïr el valor per afegir:" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "" - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "Error" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "" - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "fallat" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "" - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "Fallida al copiar DN: " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "" - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "Tornar enrera" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "ocultar els atributs interns" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "" -"Nota: Copiar entre dos servidor funciona solsament si no hi han violacions " -"de l'esquema." - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "" -"Pista: Per a borrar un atribut, buida el formulari de texte i fes " -"click a Desar." - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "" -"Pista: Per veure l'esquema d'un atribut, fes click al nom de " -"l'atribut." - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "" - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please
report it." -msgstr "" - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "" -"Si vols afegir el teu propi criteri a la llista. Estigues segur d'editar " -"search.php per manejar-lo. Sortint." - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "Importar arxiu LDIF" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "Importar objectes d'arxiu LDIF" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "Hereda" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "" - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "" -"Sembla que el servidor LDAP s'ha configurat per no revelar la seva arrel." - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "Saltar a un atribut" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "Saltar a una ObjectClass" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "Saltar a aquesta ObjectClass" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "Error de parsejat LDIF" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "Autenticació..." - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "Sortiu d'aquest servidor" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "" - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "" - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "" - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "OID de Matching Rule" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "" - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "" - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "" - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "" - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "Modificant..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "Nom" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "Nous atributs requerits" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "Valor nou" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "" - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "" - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "" - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "" - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "" - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "" - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "" - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "" - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "" - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "" -"No tinc suficient informació per conectar al servidor. Si us plau configurar " -"correctament l'arxiu config.php" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "" - -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "" -"Nota: Es posible que es requereixi afegir nous atributs per satisfer els " -"requisits d'aquesta ObjectClass" - -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" - -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "" - -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" - -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 -msgid "ObjectClasses" -msgstr "" - -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" - -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "" - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "Valor vell" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "Un (un nivell per d'avall de la base)" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "Atributs Opcionals (MAY)" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "Si us plau especifícala a l'arxiu config.php" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 -msgid "Proceed >>" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "" - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "" - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "Esborrar realment l'atribut?" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "El progrés de la còpia recurrent" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "Esborrar tots els fills recurrentment també?" - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "Refrescar" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "Refrescar tots els contenidors extés per a" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "Refrescar aquest objecte" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "Renombrar" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "Renombrar objecte" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "Renombrant..." - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "Reportar una errada" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "Demanar funcionalitat" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "Atributs Requerits (MUST)" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "Desar els canvis" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "Esquema del servidor" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "Buscar" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "Filtre de recerca" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "Abast de la recerca" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "Buscar entrades les quals:" - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "" - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "Selecciona una plantilla per al procès de creació" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "Servidor" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "Informació del servidor per a: " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "El servidor mostra la següent informació sobre ell mateix" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "Mostrar atributs" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "mostrar els atributs interns" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "" - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 msgid "Simple Search Form" msgstr "Formulari de recerca sencilla" -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "" -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "" +msgid "Advanced Search Form" +msgstr "Formulari de recerca avançada" -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "" -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "Alguns atributs (%s) foren modificats i estan remarcats més abaix." +msgid "Server" +msgstr "Servidor" -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "" -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "" +msgid "Search for entries whose" +msgstr "Buscar entrades les quals:" -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "" -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "" -"Filtre de recerca estàndar de LDAP. Exemple: (&(sn=Smith)(givenname=David))" +msgid "Base DN" +msgstr "Base DN" -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "Sub (tot el sub-arbre)" +msgid "Search Scope" +msgstr "Abast de la recerca" -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "Exit" +msgid "Show Attributtes" +msgstr "Mostrar atributs" -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "" -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "" +msgid "Search" +msgstr "Buscar" -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "Sintaxi" +msgid "equals" +msgstr "sigui igual" -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "OID de Sintaxi" -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "" +msgid "contains" +msgstr "contingui" -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "" -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" +msgid "Request feature" +msgstr "Demanar funcionalitat" -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "" -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "" +msgid "Report a bug" +msgstr "Reportar una errada" -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "" -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "" - -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "" - -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "" - -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "" - -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "" - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "" - -#: ../../htdocs/create.php:39 -#, php-format -msgid "The container you specified (%s) does not exist. Please try again." -msgstr "" - -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "El contenidor de destí (%s) no existeix." - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "L'entrada de destí (%s) encara existeix." - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "" - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "" - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "" - -#: ../../htdocs/add_attr.php:56 -msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "" - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "" - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "" - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" -msgstr "" -"El DN sencer de la nova entrada a ser creada quan es copii l'entrada font" - -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" -msgstr "L'abast en el que buscar" - -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "" - -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "" - -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "El DN de la font i el DN de destí son els mateixos." - -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "" - -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "Aquesta acció exigeix que s'afegeixin" - -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "" - -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "" - -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "" - -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "" - -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "" - -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "" - -#: ../../htdocs/delete_form.php:46 -#, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "" - -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "" - -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "" - -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "Aquesta ObjectClass és obsoleta" - -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "" - -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "Aquest servidor no té res a mostrar." - -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "" - -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "" - -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "" - -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "" - -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 -#, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "" - -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "" - -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "" - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "" - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "" - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "" - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "Opció de criteri desconeguda: " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "" - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "" - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "Fes anar el menú de l'esquerra per a navegar" - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "" - -#: ../../lib/EntryWriter1.php:797 -#, php-format -msgid "View %s children" -msgstr "" - -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "" - -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "Veure esquema per a" - -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "Veure informació del servidor" - -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "" - -#: ../../lib/EntryWriter1.php:819 -msgid "Viewing entry in read-only mode." -msgstr "Mostrant l'objecte en el mode de no alterar." - -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" - -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "" - -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "" - -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "" - -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "" - -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 -msgid "You cannot perform updates while server is in read-only mode" -msgstr "" -"No es pot modificar l'objecte si el servidor està operant en mode " -"inalterable." - -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "" - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "" - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "" - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "" - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "" -"Encara no t'has autenticat al servidor selectionat, no pots fer cap recerca." - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "" - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "" - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 -msgid "You left the attribute value blank. Please go back and try again." -msgstr "" - -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "No se emplenat el formulari de DN." - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "" - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "T'has deixar el valor en blanc de l'atribut requerit %s." - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "No has fet cap canvi" - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "" - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "" - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "Has d'especificar un DN" - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "" - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "Es tindrá que confirmar aquesta decisió" - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "" - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" -"La teva instalació de PHP no té la funció mhash(). No puc fer hash SHA." - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "La teva instalació de PHP no soporta TLS" - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "" - -#: ../../lib/functions.php:1172 -#, php-format -msgid "" -"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " -"for server %s" -msgstr "" - -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "" -"La teva instalació de PHP no soporta el tipus d'encriptació blowfish." - -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 -msgid "Your system crypt library does not support extended DES encryption." -msgstr "" - -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 -msgid "Your system crypt library does not support md5crypt encryption." -msgstr "" - -#: ../../lib/template_functions.php:984 -#, php-format -msgid "" -"Your template calls php.Function for a default value, however (%s) is NOT " -"available in the POST FORM variables. The following variables are available " -"[%s]." -msgstr "" - -#: ../../lib/EntryReader.php:262 -#, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "" - -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "" - -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "" - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[atribut esborrat]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "afegir valor" - -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "" - -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "mostrar" - -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "" - -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "" - -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "" - -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "" - -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "Esborrar atribut" - -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "Descarregar valor" - -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "" - -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "" - -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "" - -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "" - -#: ../../htdocs/search.php:273 -msgid "export results" -msgstr "" - -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "fals" - -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "" - -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "" - -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "importar" - -#: ../../lib/HTMLTree.php:248 -msgid "info" -msgstr "info" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "" - -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "jpegPhoto conté errors
" - -#: ../../lib/functions.php:351 -msgid "light" -msgstr "" - -#: ../../lib/functions.php:132 -msgid "line" -msgstr "" - -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "" - -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "sortir" - -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "" - -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "" - -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "" - -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "nous atributs" - -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "" - -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "" - -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "no hi han entrades" - -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "No hi han atributs nous disponibles per aquest objecte" - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "cap" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "cap, esborrar valor" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "no es aplicable" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "no especificada" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "" - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "inalterable" - -#: ../../lib/HTMLTree.php:240 -msgid "refresh" -msgstr "refrescar" - -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "" - -#: ../../lib/EntryWriter1.php:1829 -msgid "rename" -msgstr "renombrar" - -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "" - -#: ../../lib/HTMLTree.php:224 msgid "schema" msgstr "esquema" -#: ../../lib/HTMLTree.php:232 + msgid "search" msgstr "buscar" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "segons" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "" +msgid "create" +msgstr "crear" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "" +msgid "info" +msgstr "info" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "" +msgid "import" +msgstr "importar" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "" +msgid "refresh" +msgstr "refrescar" + + +msgid "logout" +msgstr "sortir" + + +msgid "Create new entry here" +msgstr "Crear Nou Objecte" + + +msgid "View schema for" +msgstr "Veure esquema per a" + + +msgid "Refresh all expanded containers for" +msgstr "Refrescar tots els contenidors extés per a" + + +msgid "Create a new entry on" +msgstr "Crear nou objecte a" + + +msgid "View server-supplied information" +msgstr "Veure informació del servidor" + + +msgid "Import entries from an LDIF file" +msgstr "Importar objectes d'arxiu LDIF" + + +msgid "Logout of this server" +msgstr "Sortiu d'aquest servidor" + + +msgid "Logged in as: " +msgstr "Conectat com: " + + +msgid "read only" +msgstr "inalterable" + + +msgid "Could not determine the root of your LDAP tree." +msgstr "No s'ha pogut determinar l'arrel del servidor LDAP." + + +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Sembla que el servidor LDAP s'ha configurat per no revelar la seva arrel." + + +msgid "Please specify it in config.php" +msgstr "Si us plau especifícala a l'arxiu config.php" + + +msgid "Create a new entry in" +msgstr "Crear un nou objecte a" + + +msgid "Login..." +msgstr "Autenticació..." + + +msgid "Delete this entry" +msgstr "Esborrar aquest objecte" + + +msgid "You will be prompted to confirm this decision" +msgstr "Es tindrá que confirmar aquesta decisió" + + +msgid "Copy or move this entry" +msgstr "Copiar aquest objecte" + + +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Copiar aquest objecte per una altra localització, DN nou, o per un altre servidor." + + +msgid "Create a child entry" +msgstr "Crear objecte com a fill" + + +msgid "Rename Entry" +msgstr "Renombrar objecte" + + +msgid "Rename" +msgstr "Renombrar" + + +msgid "rename" +msgstr "renombrar" + + +msgid "Add" +msgstr "Afegir" + + +msgid "View" +msgstr "Veure" + + +msgid "Add new attribute" +msgstr "Afegir nou atribut" + + +msgid "Hide internal attributes" +msgstr "ocultar els atributs interns" + + +msgid "Show internal attributes" +msgstr "mostrar els atributs interns" + + +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "Fes click per veure la definició de l'esquema per tipus d'atribut '%s'" + + +msgid "none" +msgstr "cap" + + +msgid "Save Changes" +msgstr "Desar els canvis" + + +msgid "add value" +msgstr "afegir valor" + + +msgid "Add an additional value to attribute '%s'" +msgstr "Afegir valor adicional a aquest atribut" + + +msgid "Refresh" +msgstr "Refrescar" + + +msgid "Refresh this entry" +msgstr "Refrescar aquest objecte" + + +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "Pista: Per a borrar un atribut, buida el formulari de texte i fes click a Desar." + + +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "Pista: Per veure l'esquema d'un atribut, fes click al nom de l'atribut." + + +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "Alguns atributs (%s) foren modificats i estan remarcats més abaix." + + +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "Un atribut (%s) fore modificat i està remarcat més abaix." + + +msgid "Viewing entry in read-only mode." +msgstr "Mostrant l'objecte en el mode de no alterar." + + +msgid "no new attributes available for this entry" +msgstr "No hi han atributs nous disponibles per aquest objecte" + + +msgid "Binary value" +msgstr "Valor binari" + + +msgid "Add new binary attribute" +msgstr "Afegir valor binari" + + +msgid "Note: '%s' is an alias for '%s'" +msgstr "Sinònim per a" + + +msgid "download value" +msgstr "Descarregar valor" + + +msgid "delete attribute" +msgstr "Esborrar atribut" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "a un objecte nou" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 msgid "true" msgstr "veritat" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "" -"l'update_array està malformat. Aixó podria ser una errada del phpLDAPadmin. " -"Si us plau reportala." +msgid "false" +msgstr "fals" + + +msgid "none, remove value" +msgstr "cap, esborrar valor" + + +msgid "Really delete attribute" +msgstr "Esborrar realment l'atribut?" + + +msgid "Jump to an objectClass" +msgstr "Saltar a una ObjectClass" + + +msgid "Jump to an attribute type" +msgstr "Saltar a un atribut" + + +msgid "Schema for server" +msgstr "Esquema del servidor " + + +msgid "Required Attributes" +msgstr "Atributs Requerits (MUST)" + + +msgid "Optional Attributes" +msgstr "Atributs Opcionals (MAY)" + + +msgid "OID" +msgstr "OID" + + +msgid "Description" +msgstr "Descripció" + + +msgid "Name" +msgstr "Nom" + + +msgid "This objectClass is obsolete." +msgstr "Aquesta ObjectClass és obsoleta" + + +msgid "Inherits from" +msgstr "Hereda" + + +msgid "Jump to this objectClass definition" +msgstr "Saltar a aquesta ObjectClass" + + +msgid "Matching Rule OID" +msgstr "OID de Matching Rule" + + +msgid "Syntax OID" +msgstr "OID de Sintaxi" + + +msgid "not applicable" +msgstr "no es aplicable" + + +msgid "not specified" +msgstr "no especificada" + + +msgid "Entry %s deleted successfully." +msgstr "Entrada '%s' esborrada correctament." + + +msgid "You must specify a DN" +msgstr "Has d'especificar un DN" + + +msgid "Could not delete the entry: %s" +msgstr "No he pogut esborrar l'entrada: %s" + + +msgid "New Required Attributes" +msgstr "Nous atributs requerits" + + +msgid "This action requires you to add" +msgstr "Aquesta acció exigeix que s'afegeixin" + + +msgid "new attributes" +msgstr "nous atributs" + + +msgid "Instructions: In order to add these objectClass(es) to this entry, you must specify" +msgstr "Instruccions: Per afegir aquesta ObjectClass a aquest objecte, s'ha d'especificar" + + +msgid "that this objectClass requires. You can do so in this form." +msgstr "que aquest ObjectClass requereix. Es pot fer amb aquest formulari." + + +msgid "Add ObjectClass and Attributes" +msgstr "Afegir ObjectClass i Atributs" + + +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "Fer click per seleccionar un objecte gràficament" + + +msgid "You cannot perform updates while server is in read-only mode" +msgstr "No es pot modificar l'objecte si el servidor està operant en mode inalterable." + + +msgid "Bad server id" +msgstr "L'identificador de servidor està malament" + + +msgid "Not enough information to login to server. Please check your configuration." +msgstr "No tinc suficient informació per conectar al servidor. Si us plau configurar correctament l'arxiu config.php" + + +msgid "Could not connect to LDAP server." +msgstr "No s'ha pogut conectar al servidor LDAP" + + +msgid "Could not perform ldap_mod_add operation." +msgstr "No s'ha pogut fer l'operació del ldap_mod_add." + + +msgid "Success" +msgstr "Exit" + + +msgid "Server: " +msgstr "Servidor: " + + +msgid "Looking in: " +msgstr "Buscant a: " + + +msgid "No DN specified in query string!" +msgstr "No està present el DN a la URL" + + +msgid "Back Up..." +msgstr "Tornar a..." + + +msgid "no entries" +msgstr "no hi han entrades" + + +msgid "Could not determine base DN" +msgstr "No he pogut determinar la base DN" + -#: ../../htdocs/add_value_form.php:93 msgid "value to" msgstr "valor a" -#: ../../htdocs/add_value_form.php:112 + +msgid "Distinguished Name" +msgstr "Nom distinguit" + + +msgid "Current list of" +msgstr "La llista actual de" + + msgid "values for attribute" msgstr "valors per a l'atribut" -#: ../../htdocs/delete_form.php:48 -msgid "view entries" -msgstr "" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "" +msgid "Note: You will get an \"inappropriate matching\" error if you have not setup an EQUALITY rule on your LDAP server for this attribute." +msgstr "Nota: Sino has configurat una regla 'EQUALITY' al servidor LDAP, rebràs un error 'inappropriate matching'" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "" +msgid "Enter the value you would like to add:" +msgstr "Proveïr el valor per afegir: " -#: ../../htdocs/compare_form.php:29 -msgid "with " -msgstr "" -#~ msgid "equals" -#~ msgstr "sigui igual" +msgid "Note: You may be required to enter new attributes that these objectClass(es) require" +msgstr "Nota: Es posible que es requereixi afegir nous atributs per satisfer els requisits d'aquesta ObjectClass" -#~ msgid "contains" -#~ msgstr "contingui" -#~ msgid "create" -#~ msgstr "crear" +msgid "Syntax" +msgstr "Sintaxi" -#~ msgid "Create a new entry on" -#~ msgstr "Crear nou objecte a" -#~ msgid "Logged in as: " -#~ msgstr "Conectat com: " +msgid "You left the destination DN blank." +msgstr "No se emplenat el formulari de DN." -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "" -#~ "Copiar aquest objecte per una altra localització, DN nou, o per un altre " -#~ "servidor." -#~ msgid "View" -#~ msgstr "Veure" +msgid "The destination entry (%s) already exists." +msgstr "L'entrada de destí (%s) encara existeix." -#~ msgid "Click to view the schema defintion for attribute type '%s'" -#~ msgstr "" -#~ "Fes click per veure la definició de l'esquema per tipus d'atribut '%s'" -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "Sinònim per a" +msgid "The destination container (%s) does not exist." +msgstr "El contenidor de destí (%s) no existeix." -#~ msgid "Entry %s deleted successfully." -#~ msgstr "Entrada '%s' esborrada correctament." -#~ msgid "" -#~ "Instructions: In order to add these objectClass(es) to this entry, you must " -#~ "specify" -#~ msgstr "" -#~ "Instruccions: Per afegir aquesta ObjectClass a aquest objecte, s'ha " -#~ "d'especificar" +msgid "The source and destination DN are the same." +msgstr "El DN de la font i el DN de destí son els mateixos." -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "que aquest ObjectClass requereix. Es pot fer amb aquest formulari." -#~ msgid "Bad server id" -#~ msgstr "L'identificador de servidor està malament" +msgid "Copying " +msgstr "Copiant " -#~ msgid "Could not connect to LDAP server." -#~ msgstr "No s'ha pogut conectar al servidor LDAP" -#~ msgid "Server: " -#~ msgstr "Servidor: " +msgid "Recursive copy progress" +msgstr "El progrés de la còpia recurrent" -#~ msgid "Looking in: " -#~ msgstr "Buscant a: " -#~ msgid "No DN specified in query string!" -#~ msgstr "No està present el DN a la URL" +msgid "Building snapshot of tree to copy... " +msgstr "Construïnt la 'foto' de l'arbre per a copiar... " -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "Nota: Sino has configurat una regla 'EQUALITY' al servidor LDAP, rebràs un " -#~ "error 'inappropriate matching'" -#~ msgid "Copy successful! Would you like to " -#~ msgstr "Exit! Desitges " +msgid "Copy successful! Would you like to " +msgstr "Exit! Desitges " -#~ msgid "view the new entry" -#~ msgstr "Veure el nou objecte?" -#~ msgid "Choose a template" -#~ msgstr "Escull una plantilla" +msgid "view the new entry" +msgstr "Veure el nou objecte?" -#~ msgid "Click here to go to the login form" -#~ msgstr "Clica aquí per anar al formulari d'autenticació" -#~ msgid "Entries found: " -#~ msgstr "Entrades trobades: " +msgid "Failed to copy DN: " +msgstr "Fallida al copiar DN: " -#~ msgid "Filter performed: " -#~ msgstr "Filtre realitzat: " -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "Recerca realitzada per phpLDAPadmin a" +msgid "Copy " +msgstr "Copiar " -#~ msgid "starts with" -#~ msgstr "comenci amb" -#~ msgid "ends with" -#~ msgstr "acabi amb" +msgid "to a new object" +msgstr "a un objecte nou" -#~ msgid "sounds like" -#~ msgstr "soni com" -#~ msgid "" -#~ "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP " -#~ "or perhaps your LDAP server has access control specified that prevents LDAP " -#~ "clients from accessing the RootDSE." -#~ msgstr "No s'ha pogut treure informació LDAP del servidor" +msgid "Destination DN" +msgstr "DN de destí" -#~ msgid "ChangeLog" -#~ msgstr "Històric de canvis" -#~ msgid "Unsafe file name: " -#~ msgstr "Nom d'arxiu insegur: " +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "El DN sencer de la nova entrada a ser creada quan es copii l'entrada font" -#~ msgid "No such file: " -#~ msgstr "Arxiu no existent: " -#~ msgid "" -#~ "You have enabled auto_uid_numbers for %s in your configuration, " -#~ " but you have not specified the " -#~ "auto_uid_number_mechanism. Please correct " -#~ "this problem." -#~ msgstr "" -#~ "Has activat els auto_uid_numbers per %s a la teva configuració, " -#~ " pero no has especificat " -#~ "l'auto_uid_number_mechanism. Si us plau soluciona " -#~ " aquest problema." +msgid "Destination Server" +msgstr "Servidor de destí" -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool\" " -#~ " in your configuration for server %s, but you did not " -#~ "specify the audo_uid_number_uid_pool_dn. Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "Has especificat l'auto_uid_number_mechanism com uidpool " -#~ " a la teva configuració per al servidor %s, " -#~ "pero no has especificat el " -#~ "audo_uid_number_uid_pool_dn. Si us plau especifica'l avans de procedir." -#~ msgid "" -#~ "It appears that the uidPool you specified in your configuration (\"%s\") " -#~ " does not exist." -#~ msgstr "" -#~ "Sembla ser que el uidPool que has especificat a la teva configuració " -#~ "(%s) no existeix." +msgid "Hint: Copying between different servers only works if there are no schema violations" +msgstr "Nota: Copiar entre dos servidor funciona solsament si no hi han violacions de l'esquema." -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"search\" in your " -#~ " configuration for server %s, but you did not " -#~ "specify the \"auto_uid_number_search_base\". " -#~ "Please specify it before proceeding." -#~ msgstr "" -#~ "Has especificat l'auto_uid_number_mechanism com search a " -#~ "la teva configuració per al servidor %s, " -#~ "pero no has especificat el " -#~ "auto_uid_number_search_base. Si us plau especifica'l avans de " -#~ "procedir." -#~ msgid "" -#~ "You specified an invalid value for auto_uid_number_mechanism (\"%s\") " -#~ " in your configration. Only \"uidpool\" and " -#~ "\"search\" are valid. Please correct this " -#~ "problem." -#~ msgstr "" -#~ "Has especificat un valor no vàlid per a l'auto_uid_number_mechanism " -#~ "(%s) a la teva configuració. Sols " -#~ "uidpool i search son vàlids. " -#~ " Si us plau soluciona aquest problema." +msgid "Recursively copy all children of this object as well." +msgstr "Esborrar tots els fills recurrentment també?" -#~ msgid "" -#~ "Error: You have an error in your config file. The only three allowed values " -#~ " for auth_type in the $servers section are " -#~ "'session', 'cookie', and 'config'. You entered '%s', " -#~ " which is not allowed. " -#~ msgstr "" -#~ "Error: Tens un error al teu arxiu de configuració. Els dos únics valors " -#~ "acceptats per 'auth_type' a la secció " -#~ "$servers son 'config' i 'form'. Tu has ficat '%s', " -#~ " el qual no està acceptat. " -#~ msgid "LDAP said: %s" -#~ msgstr "LDAP diguè: %s

" +msgid "You left the value blank for required attribute (%s)." +msgstr "T'has deixar el valor en blanc de l'atribut requerit %s." -#~ msgid "Error number: %s (%s)" -#~ msgstr "Error número: %s (%s)

" -#~ msgid "Description: %s

" -#~ msgstr "Descripció: %s

" +msgid "Could not add the object to the LDAP server." +msgstr "No he pogut afegir l'objecte al servidor LDAP." -#~ msgid "Error number: %s

" -#~ msgstr "Error número: %s

" -#~ msgid "Description: (no description available)
" -#~ msgstr "Descripció: (no hi ha descripció)
" +msgid "Create Object" +msgstr "Crear Objecte" -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "" -#~ "Es una errada del phpLDAPadmin? Si ho és, si us plau diguen's-" -#~ "ho." -#~ msgid "Unrecognized error number: " -#~ msgstr "Número d'error desconegut: " +msgid "Choose a template" +msgstr "Escull una plantilla" -#~ msgid "" -#~ "

\t\t\t
You found " -#~ "a non-fatal phpLDAPadmin bug!
Error:%s " -#~ "(%s)
File: %s line " -#~ "%s, caller %s
Versions:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "server:%s
Please check and see if this bug has been reported " -#~ "here.
If it hasnt been reported, you may report this bug by clicking " -#~ "here.

" -#~ msgstr "" -#~ "
Has trobat " -#~ "un error fatal del " -#~ "phpLDAPadmin!
Error:%s " -#~ "(%s)
Arxiu: %s línia " -#~ "%s, caller %s
Versions:PLA: " -#~ "%s, PHP: %s, SAPI: %s " -#~ "
Servidor Web:%s
Envía aquesta " -#~ "errada fent click aquí.

" -#~ msgid "" -#~ "Congratulations! You found a bug in phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA " -#~ "Version:%s
PHP " -#~ "Version:%s
PHP " -#~ "SAPI:%s
Web " -#~ "server:%s
\t
\t Please " -#~ "report this bug by clicking below!" -#~ msgstr "" -#~ "Felicitats! Has trobat una errada al phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t " -#~ "\t \t \t \t \t
Error:%s
Nivell:%s
Arxiu:%s
Línia:%s
Caller:%s
Versió " -#~ "PLA:%s
Versió " -#~ "PHP:%s
PHP " -#~ "SAPI:%s
Servidor " -#~ "Web:%s
\t
\t Si us " -#~ "plau envía aquesta errada fent click abaix!" +msgid "Select a template for the creation process" +msgstr "Selecciona una plantilla per al procès de creació" -#~ msgid "Select an LDIF file:" -#~ msgstr "Selecciona un arxiu LDIF:" -#~ msgid "Line Number:" -#~ msgstr "Línia Número:" +msgid "You have not logged into the selected server yet, so you cannot perform searches on it." +msgstr "Encara no t'has autenticat al servidor selectionat, no pots fer cap recerca." + + +msgid "Click here to go to the login form" +msgstr "Clica aquí per anar al formulari d'autenticació" + + +msgid "Unrecognized criteria option: " +msgstr "Opció de criteri desconeguda: " + + +msgid "If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting." +msgstr "Si vols afegir el teu propi criteri a la llista. Estigues segur d'editar search.php per manejar-lo. Sortint." + + +msgid "Entries found: " +msgstr "Entrades trobades: " + + +msgid "Filter performed: " +msgstr "Filtre realitzat: " + + +msgid "Search performed by phpLDAPadmin in" +msgstr "Recerca realitzada per phpLDAPadmin a" + + +msgid "seconds" +msgstr "segons" + + +msgid "The scope in which to search" +msgstr "L'abast en el que buscar" + + +msgid "Sub (entire subtree)" +msgstr "Sub (tot el sub-arbre)" + + +msgid "One (one level beneath base)" +msgstr "Un (un nivell per d'avall de la base)" + + +msgid "Base (base dn only)" +msgstr "Base (sols base dn)" + + +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "Filtre de recerca estàndar de LDAP. Exemple: (&(sn=Smith)(givenname=David))" + + +msgid "Search Filter" +msgstr "Filtre de recerca" + + +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "Una llista d'atributs per mostrar als resultats (separats per comes)" + + +msgid "starts with" +msgstr "comenci amb" + + +msgid "ends with" +msgstr "acabi amb" + + +msgid "sounds like" +msgstr "soni com" + + +msgid "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE." +msgstr "No s'ha pogut treure informació LDAP del servidor" + + +msgid "Server info for: " +msgstr "Informació del servidor per a: " + + +msgid "Server reports the following information about itself" +msgstr "El servidor mostra la següent informació sobre ell mateix" + + +msgid "This server has nothing to report." +msgstr "Aquest servidor no té res a mostrar." + + +msgid "update_array is malformed. This might be a phpLDAPadmin bug. Please report it." +msgstr "l'update_array està malformat. Aixó podria ser una errada del phpLDAPadmin. Si us plau reportala." + + +msgid "Could not perform ldap_modify operation." +msgstr "No he pogut executar l'operació ldap_modify." + + +msgid "Do you want to make these changes?" +msgstr "Vols fer aquests canvis?" + + +msgid "Attribute" +msgstr "Atribut" + + +msgid "Old Value" +msgstr "Valor vell" + + +msgid "New Value" +msgstr "Valor nou" + + +msgid "[attribute deleted]" +msgstr "[atribut esborrat]" + + +msgid "Commit" +msgstr "Cometre" + + +msgid "Cancel" +msgstr "Cancel.lar" + + +msgid "You made no changes" +msgstr "No has fet cap canvi" + + +msgid "Go back" +msgstr "Tornar enrera" + + +msgid "Use the menu to the left to navigate" +msgstr "Fes anar el menú de l'esquerra per a navegar" + + +msgid "Credits" +msgstr "Crèdits" + + +msgid "ChangeLog" +msgstr "Històric de canvis" + + +msgid "Documentation" +msgstr "Documentació" + + +msgid "Unsafe file name: " +msgstr "Nom d'arxiu insegur: " + + +msgid "No such file: " +msgstr "Arxiu no existent: " + + +msgid "You have enabled auto_uid_numbers for %s in your configuration," +" but you have not specified the auto_uid_number_mechanism. Please correct" +" this problem." +msgstr "Has activat els auto_uid_numbers per %s a la teva configuració," +" pero no has especificat l'auto_uid_number_mechanism. Si us plau soluciona" +" aquest problema." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"uidpool\"" +" in your configuration for server %s, but you did not specify the" +" audo_uid_number_uid_pool_dn. Please specify it before proceeding." +msgstr "Has especificat l'auto_uid_number_mechanism com uidpool" +" a la teva configuració per al servidor %s, pero no has especificat el" +" audo_uid_number_uid_pool_dn. Si us plau especifica'l avans de procedir." + + +msgid "It appears that the uidPool you specified in your configuration (\"%s\")" +" does not exist." +msgstr "Sembla ser que el uidPool que has especificat a la teva configuració (%s)" +" no existeix." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"search\" in your" +" configuration for server %s, but you did not specify the" +" \"auto_uid_number_search_base\". Please specify it before proceeding." +msgstr "Has especificat l'auto_uid_number_mechanism com search a la teva" +" configuració per al servidor %s, pero no has especificat el" +" auto_uid_number_search_base. Si us plau especifica'l avans de procedir." + + +msgid "You specified an invalid value for auto_uid_number_mechanism (\"%s\")" +" in your configration. Only \"uidpool\" and \"search\" are valid." +" Please correct this problem." +msgstr "Has especificat un valor no vàlid per a l'auto_uid_number_mechanism (%s)" +" a la teva configuració. Sols uidpool i search son vàlids." +" Si us plau soluciona aquest problema." + + +msgid "Error: You have an error in your config file. The only three allowed values" +" for auth_type in the $servers section are 'session', 'cookie', and 'config'. You entered '%s'," +" which is not allowed. " +msgstr "Error: Tens un error al teu arxiu de configuració. Els dos únics valors acceptats per" +" 'auth_type' a la secció $servers son 'config' i 'form'. Tu has ficat '%s'," +" el qual no està acceptat. " + + +msgid "Your PHP install does not support TLS." +msgstr "La teva instalació de PHP no soporta TLS" + + +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "No he pogut iniciar el TLS.
Revisa la teva configuració del servidor LDAP." + + +msgid "LDAP said: %s" +msgstr "LDAP diguè: %s

" + + +msgid "Error" +msgstr "Error" + + +msgid "browse" +msgstr "mostrar" + + +msgid "Delete Photo" +msgstr "Esborrar foto" + + +msgid "Your system crypt library does not support blowfish encryption." +msgstr "La teva instalació de PHP no soporta el tipus d'encriptació blowfish." + + +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "La teva instalació de PHP no té la funció mhash(). No puc fer hash SHA." + + +msgid "jpegPhoto contains errors
" +msgstr "jpegPhoto conté errors
" + + +msgid "Error number: %s (%s)" +msgstr "Error número: %s (%s)

" + + +msgid "Description: %s

" +msgstr "Descripció: %s

" + + +msgid "Error number: %s

" +msgstr "Error número: %s

" + + +msgid "Description: (no description available)
" +msgstr "Descripció: (no hi ha descripció)
" + + +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "Es una errada del phpLDAPadmin? Si ho és, si us plau diguen's-ho." + + +msgid "Unrecognized error number: " +msgstr "Número d'error desconegut: " + + +msgid "
" +" " +" " +" " +"
" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
Please check and see if this bug has been reported here.
If it hasnt been reported, you may report this bug by clicking here.

" +msgstr "
" +"
" +" Has trobat un error fatal del phpLDAPadmin!
Error:%s (%s)
Arxiu:%s línia %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Servidor Web:%s
" +" Envía aquesta errada fent click aquí.

" + + +msgid "Congratulations! You found a bug in phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Please report this bug by clicking below!" +msgstr "Felicitats! Has trobat una errada al phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Nivell:%s
Arxiu:%s
Línia:%s
Caller:%s
Versió PLA:%s
Versió PHP:%s
PHP SAPI:%s
Servidor Web:%s
" +"
" +" Si us plau envía aquesta errada fent click abaix!" + + +msgid "Import LDIF File" +msgstr "Importar arxiu LDIF" + + +msgid "Select an LDIF file:" +msgstr "Selecciona un arxiu LDIF:" + + +msgid "Adding..." +msgstr "Afegint..." + + +msgid "Deleting..." +msgstr "Esborrant..." + + +msgid "Renaming..." +msgstr "Renombrant..." + + +msgid "Modifying..." +msgstr "Modificant..." + + +msgid "Failed" +msgstr "fallat" + + +msgid "LDIF Parse Error" +msgstr "Error de parsejat LDIF" + + +msgid "Could not add object:" +msgstr "No he pogut afegir l'objecte:" + + +msgid "Could not rename object:" +msgstr "No he pogut renombrar l'objecte:" + + +msgid "Could not delete object:" +msgstr "No he pogut esborrar l'objecte:" + + +msgid "Could not modify object:" +msgstr "No he pogut modificar l'objecte:" + + +msgid "Line Number:" +msgstr "Línia Número:" + + +msgid "Line:" +msgstr "Línia:" + -#~ msgid "Line:" -#~ msgstr "Línia:" diff --git a/locale/cs_CZ/LC_MESSAGES/messages.mo b/locale/cs_CZ/LC_MESSAGES/messages.mo index 495de821280277c5e4d0fb4a6da894a450da4b1a..0fdc8dfcce22ca259c44c72dc367bc2fbe52d77f 100644 GIT binary patch literal 36410 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 delta 7111 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 E0&G#E#Q*>R diff --git a/locale/cs_CZ/LC_MESSAGES/messages.po b/locale/cs_CZ/LC_MESSAGES/messages.po index eac8831..75afc77 100644 --- a/locale/cs_CZ/LC_MESSAGES/messages.po +++ b/locale/cs_CZ/LC_MESSAGES/messages.po @@ -1,2897 +1,1558 @@ # : $ + + msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2004-01-14 17:45+0200\n" -"PO-Revision-Date: 2008-03-24 16:27+0000\n" -"Last-Translator: Radek Senfeld \n" "Language-Team: phpLDAPadmin \n" +"Last-Translator: Radek Senfeld \n" +"POT-Creation-Date: 2005-11-29 17:45+0100\n" +"PO-Revision-Date: 2005-11-29 18:22+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-11-29 23:48+0000\n" -"X-Generator: Launchpad (build Unknown)\n" -#: ../../htdocs/mass_delete.php:86 -#, php-format -msgid "%s of %s entries failed to be deleted." -msgstr "%s z %s objektů se nepodařilo odstranit." -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../lib/HTMLTree.php:486 -msgid "(Session timed out. Automatically logged out.)" -msgstr "" -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr "" - -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" -msgstr "" - -#: ../../lib/search_form_advanced.php:103 -msgid "A list of attributes to display in the results (comma-separated)" -msgstr "Seznam atributů zobrazených ve výsledku hledání (oddělené čárkou)" - -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 -msgid "A random password was generated for you" -msgstr "" - -#: ../../lib/ldif_functions.php:532 -msgid "A valid deleteoldrdn attribute should be specified" -msgstr "" - -#: ../../lib/ldif_functions.php:243 -msgid "A valid dn line is required." -msgstr "Je vyžadován platný řádek s DN." - -#: ../../lib/ldif_functions.php:538 -msgid "A valid newrdn attribute should be specified" -msgstr "" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 -msgid "Add" -msgstr "Přidat" - -#: ../../htdocs/add_value_form.php:182 -msgid "Add New Value" -msgstr "Přidat novou hodnotu" - -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 -msgid "Add ObjectClass and Attributes" -msgstr "Přidat objectClass a atributy" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 -#, php-format -msgid "Add an additional value to attribute '%s'" -msgstr "Přidá další hodnotu k atributu '%s'" - -#: ../../htdocs/add_value_form.php:93 -msgid "Add new" -msgstr "Přidat nový" - -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 -msgid "Add new ObjectClass" -msgstr "Přidat objectClass" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 -msgid "Add new attribute" -msgstr "Přidat nový atribut" - -#: ../../htdocs/add_attr_form.php:114 -msgid "Add new binary attribute" -msgstr "Přidat nový binarní atribut" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "" - -#: ../../htdocs/ldif_import.php:62 -msgid "Adding..." -msgstr "Přidávání..." - -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 -msgid "Advanced Search Form" -msgstr "Rozšířené vyhledávání" - -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "" - -#: ../../htdocs/schema.php:110 -msgid "Aliases" -msgstr "Aliasy" - -#: ../../htdocs/mass_delete.php:88 -msgid "All entries deleted successfully." -msgstr "Všechny objekty byly úspěšně odstraněny." - -#: ../../lib/EntryWriter1.php:825 -#, php-format -msgid "An attribute (%s) was modified and is highlighted below." -msgstr "Atribut (%s) byl změněn a je zvýrazněn dole." - -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "" - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "" - -#: ../../htdocs/login.php:164 -msgid "Anonymous Bind" -msgstr "Připojit anonymně" - -#: ../../htdocs/delete_form.php:102 -msgid "Are you sure you want to permanently delete this object?" -msgstr "Jste si skutečně jisti, že chcete odstranit tento objekt?" - -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 -msgid "Attribute" -msgstr "Atribut" - -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "" - -#: ../../lib/ldif_functions.php:455 -msgid "Attribute is not valid" -msgstr "" - -#: ../../lib/ldif_functions.php:375 -msgid "Attribute not well formed" -msgstr "" - -#: ../../htdocs/login_form.php:63 -msgid "Authenticate" -msgstr "Přihlásit" - -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "" - -#: ../../htdocs/entry_chooser.php:65 -msgid "Back Up..." -msgstr "O úroveň výš..." - -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 -msgid "Bad username or password. Please try again." -msgstr "Nesprávné jméno nebo heslo. Opakujte přihlášení." - -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 -msgid "Base (base dn only)" -msgstr "Pouze výchozí DN" - -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 -msgid "Base DN" -msgstr "Výchozí DN" - -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 -msgid "Binary value" -msgstr "Binarní hodnota" - -#: ../../htdocs/copy.php:61 -msgid "Building snapshot of tree to copy... " -msgstr "Sestavuji obraz stromu ke kopírování... " - -#: ../../lib/export_functions.php:38 -msgid "CSV (Spreadsheet)" -msgstr "" - -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 -msgid "Cancel" -msgstr "Storno" - -#: ../../htdocs/compare.php:343 -msgid "Check password" -msgstr "" - -#: ../../lib/EntryWriter1.php:2427 -msgid "Check password..." -msgstr "" - -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "" - -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "" - -#: ../../lib/functions.php:3223 -msgid "Click to popup a dialog to select a date graphically" -msgstr "" - -#: ../../lib/functions.php:2239 -msgid "Click to popup a dialog to select an entry (DN) graphically" -msgstr "Otevře popup okno, ve kterém zvolíte DN" - -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 -#, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "" - -#: ../../htdocs/schema.php:106 -msgid "Collective" -msgstr "Collective" - -#: ../../htdocs/update_confirm.php:303 -msgid "Commit" -msgstr "Odeslat" - -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 -msgid "Compare" -msgstr "" - -#: ../../htdocs/compare_form.php:21 -msgid "Compare another DN with" -msgstr "" - -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 -msgid "Compare this DN with another" -msgstr "" - -#: ../../lib/EntryWriter1.php:776 -msgid "Compare with another entry" -msgstr "" - -#: ../../htdocs/compare.php:42 -msgid "Comparing the following DNs" -msgstr "" - -#: ../../htdocs/export_form.php:84 -msgid "Compress" -msgstr "" - -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "" - -#: ../../htdocs/mass_delete.php:92 -#, php-format -msgid "Confirm mass delete of %s entries on server %s" -msgstr "Potvďte hromadný výmaz v počtu %s objektů na serveru %s" - -#: ../../lib/EntryWriter1.php:327 -msgid "Container" -msgstr "Složka" - -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "" - -#: ../../lib/ldif_functions.php:525 -msgid "Container is null" -msgstr "" - -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 -msgid "Copy" -msgstr "" - -#: ../../htdocs/copy_form.php:96 -msgid "Copy " -msgstr "Kopírovat " - -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:741 -msgid "Copy or move this entry" -msgstr "Kopírovat tento objekt" - -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "" - -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "" - -#: ../../htdocs/copy.php:57 -msgid "Copying " -msgstr "Kopíruji " - -#: ../../htdocs/ldif_import.php:70 -msgid "Could not add object:" -msgstr "Nelze přidat objekt:" - -#: ../../htdocs/create.php:133 -msgid "Could not add the object to the LDAP server." -msgstr "Nelze objekt do LDAP serveru přidat." - -#: ../../htdocs/login.php:137 -msgid "Could not bind anonymously to server." -msgstr "K serveru se nelze připojit anonymně." - -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "" - -#: ../../lib/server_functions.php:347 -#, php-format -msgid "Could not connect to \"%s\" on port \"%s\"" -msgstr "Nelze se připojit k \"%s\" na portu \"%s\"" - -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "" - -#: ../../htdocs/ldif_import.php:71 -msgid "Could not delete object:" -msgstr "Nelze odstranit objekt:" - -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 -#, php-format -msgid "Could not delete the entry: %s" -msgstr "Nebylo možné odstranit objekt: %s" - -#: ../../htdocs/entry_chooser.php:101 -msgid "Could not determine base DN" -msgstr "Nelze zjistit výchozí DN" - -#: ../../lib/HTMLTree.php:82 -msgid "Could not determine the root of your LDAP tree." -msgstr "Nepodařilo se zjistit kořen Vašeho LDAP stromu." - -#: ../../lib/functions.php:1849 -#, php-format -msgid "Could not fetch jpeg data from LDAP server for attribute %s." -msgstr "" - -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 -msgid "Could not logout." -msgstr "Nelze se odhlásit." - -#: ../../htdocs/ldif_import.php:74 -msgid "Could not modify object:" -msgstr "Nelze upravit objekt:" - -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 -msgid "Could not perform ldap_mod_add operation." -msgstr "Nelze provést ldap_mod_add operaci." - -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 -msgid "Could not perform ldap_modify operation." -msgstr "Nelze provést operaci ldap_modify." - -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 -msgid "Could not rename object:" -msgstr "Nelze přejmenovat objekt:" - -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 -msgid "Could not rename the entry" -msgstr "Objekt nelze přejmenovat" - -#: ../../htdocs/schema.php:31 -msgid "Could not retrieve schema from" -msgstr "Nelze získat schéma z" - -#: ../../htdocs/login.php:152 -msgid "Could not set cookie." -msgstr "Cookie nemohla být uložena." - -#: ../../lib/server_functions.php:265 -msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "" -"Nelze inicializovat TLS.
Zkontolujte prosím konfiguraci svého LDAP " -"serveru." - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "Vytvořit objekt" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "Vytvořit nového potomka" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "Vytvořit nový" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "Autoři" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "Současný výpis" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "DN" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "DSLM Export objektu: %s" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "Odstranit" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "Smazat %s" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "Odstranit fotografii" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "Smazat všech %s objektů" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "Smazat tento objekt" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "Odstraňuji %s" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "Odstraňování..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "Průběh odstraňování na serveru \"%s\"" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "Popis" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "Cílové DN" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "Cílový server" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "" - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "Distinguished Name" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "Přejete si provést tyto změny?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "Ignorovat chyby" - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "Podpořit projekt" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "Během vyhledávání došlo k chybě." - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "Zadejte hodnotu, kterou chcete přidat:" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "Objekt" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "Objekt %s a jeho podstrom byly úspěšně odstraněny." - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "Zvolit objekt" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "Equality" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "Chyba" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "" -"Chyba při volání mass_delete.php. V POSTu chybí proměnná mass_delete." - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "Export" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "Formát exportu" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "Exportovat podstrom" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "selhal" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "Přidání atributu selhalo." - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "Nepodařilo se okopírovat DN: " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "Nepodařilo se odstranit objekt %s" - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "Soubor" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "Filtr" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "Generováno phpLDAPadminem dne %s" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "Jdi" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "Jdi na %s" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "Schovat interní atributy" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "" -"Rada: Kopírování mezi servery funguje jedině za předpokladu, že nedojde k " -"neshodě schémat" - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "" -"Rada: Pro smazání atributu vyprázděte textové políčko a klepněte na " -"Uložit." - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "" -"Rada: K zobrazení schémata pro atribut klepněte na název atributu." - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "Nápověda: Musíte zvolit alespoň jednu structural objectClass." - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please report it." -msgstr "" - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "" -"Pokud si přejete přidat svoje vlastní vyhledávací kritéria, ujistěte se, že " -"jste je přidali do search.php." - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "Importovat soubor LDIF" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "Importovat data ze souboru LDIF" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "Odvozeno od objectClass" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "" - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "Neplatná hodnota RDN" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "Neplatný exportní formát" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "Zdá se, že LDAP server je nastavený tak, že nezobrazuje svůj kořen." - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "Jdi na Matching Rule" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "Jdi na typ atributu" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "Jdi na objectClass" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "Jdi na definici této objectClass" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "LDIF Export objektu: %s" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "Chyba v souboru LDIF" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "Konce řádků" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "Seznam objektů k odstranění:" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "Přihlašovací DN" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "Přihlásit se..." - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "Odhlásit se od tohoto serveru" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "" - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "Zdeformované pole mass_delete." - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "Hromadný výmaz" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "Hromadý výmaz není umožněn. Můžete ho povolit v souboru config.php." - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "Výběrové kritérium OID" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "Matching Rules" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "Maximální délka" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "" - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "" - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "" - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "Soubor LDIF nebyl nalezen." - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "Úprava proběhla úspěšně!" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "Upravování..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "Název" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "Nový vyžadovaný atribut" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "Nová hodnota" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "Ne" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "Nebylo zadáno DN" - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "" - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "Nebylo zadáno jméno atributu." - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "Nebyla nalezena žádná aplikace pro export." - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "" - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "Žádné interní atributy" - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "Nikdo není přihlášen k tomuto serveru." - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "V config.php nejsou definovány žádné dotazy." - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "Objekt neexistuje: %s" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "Nebyla nalezena verze. Předpokládám 1." - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "" -"Nedostatek informací pro přihlášení k serveru. Ověřte prosím nastavení." - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "" - -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "" -"Poznámka: Není vyloučené, že budete vyzváni k zadání nových atributů " -"vyžadovaných touto objectClass" - -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" -"Poznámka: tato operace může mít fatální následky a nelze ji vrátit zpět. " -"Speciální pozornost věnujte aliasům, odkazům a ostatním věcem, které můžou " -"způsobit problémy." - -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "Byl překročen limitní parametr pro vyhledávání." - -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" - -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 -msgid "ObjectClasses" -msgstr "objectClassy" - -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" - -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "" - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "Zastaralé" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "Původní hodnota" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "O jednu úroveň níž" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "Volitelné atributy" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "Řazení" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "Rodičovská objectClass" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "Heslo" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "Odstranit také všechny potomky?" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "Nastavte ho prosím v souboru config.php" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "Předdefinovaná vyhledávání" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 -msgid "Proceed >>" -msgstr "Proveď >>" - -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "" - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "" - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "Skutečně smazat atribut" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "Rekurzivní kopie" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "Průběh rekurzivního kopírování" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "Průběh rekurzivního odstranění" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "Při kopírování zahrnout všechny potomky tohoto objektu." - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "Obnovit" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "Obnovit všechny otevřené složky" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "Obnovit tento objekt" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "Přejmenovat" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "Přejmenovat objekt" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "Přejmenovávání..." - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "Nahlásit chybu" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "Napište si o novou funkci" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "Vyžadované atributy" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "Uložit změny" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "Uložit přepis objektu" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "Uloží přepis tohoto objektu a všech jeho potomků" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "Schéma serveru" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "Vyhledat" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "Vyhledávací filtr" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "Oblast prohledávání" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "Vyhledat objekty kde" - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "Bezpečnostní chyba: Soubor, který uploadujete může být závadný." - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "Zvolte předdefinované vyhledávání" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "Zvolte šablonu pro vytvoření objektu" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "Server" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "Server info pro: " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "Server o sobě poskytuje následující informace" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "Zobrazit atributy" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "Zobrazit interní atributy" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "Výsledky od %s do %s." - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 msgid "Simple Search Form" msgstr "Rychlé vyhledávání" -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "" -"Kvůli změně svého hesla se nyní musíte přihlásit znova - s novým heslem." -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "Single Valued" +msgid "Advanced Search Form" +msgstr "Rozšířené vyhledávání" -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "" -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "Některé atributy (%s) byly modifikováný a jsou zvýrazněny dole." +msgid "Server" +msgstr "Server" -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "" -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "" +msgid "Search for entries whose" +msgstr "Vyhledat objekty kde" -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "" -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "" -"Standardní LDAP vyhledávací filtr. Přiklad: (&(sn=Smith)(givenname=David))" +msgid "Base DN" +msgstr "Výchozí DN" -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "Celý podstrom" +msgid "Search Scope" +msgstr "Oblast prohledávání" -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "Substring Rule" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "Hotovo" +msgid "Show Attributtes" +msgstr "Zobrazit atributy" -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "" -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "" +msgid "Search" +msgstr "Vyhledat" -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "" +msgid "Select a predefined search" +msgstr "Zvolte předdefinované vyhledávání" -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "Syntaxe OID" -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "Syntaxe" +msgid "Predefined Searches" +msgstr "Předdefinovaná vyhledávání" -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "Šablona" -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" +msgid "No queries have been defined in config.php." +msgstr "V config.php nejsou definovány žádné dotazy." -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "" -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "" +msgid "Request feature" +msgstr "Napište si o novou funkci" -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "" -"Atribut \"%s\" je v konfiguraci phpLDAPadminu označen jako \"jen pro čtení\"." -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "" +msgid "Report a bug" +msgstr "Nahlásit chybu" -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "" -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "" - -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "" - -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "" - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "" - -#: ../../htdocs/create.php:39 -#, php-format -msgid "The container you specified (%s) does not exist. Please try again." -msgstr "Složka (%s) neexistuje. Opakujte prosím akci." - -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "Cílová složka (%s) neexistuje." - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "Objekt (%s) již v cílovém DN existuje." - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "" - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "" - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "" - -#: ../../htdocs/add_attr.php:56 -msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "" -"Soubor, který jste zvolili je buď prázdný nebo neexistuje. Vraťte se prosím " -"zpět a akci opakujte." - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "" -"Při uploadu souboru došlo zřejmě k selhání sítě, neboť se podařilo získat " -"jen část souboru." - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "" -"Soubor, který se pokoušeli uložit je příliš veliký. Upravte prosím hodnotu " -"upload_max_size v php.ini." - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" -msgstr "Celé DN nového objektu bude vytvořeno kopií zdrojového objektu" - -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" -msgstr "Oblast vyhledávání" - -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "" - -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "Server plně nepodporuje LDAP protocol." - -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "Zdrojové a cílové DN se shodují." - -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "" - -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "K provedení této akce musíte přidat" - -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "" -"Tento atribut byl administrátorem phpLDAPadminu označen jako \"jen pro " -"čtení\"." - -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "" - -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "" - -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "Toto se může přihodit z několika příčin. Nejpravděpodobnější jsou:" - -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "" - -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "Tento objekt nemá atributy" - -#: ../../htdocs/delete_form.php:46 -#, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "Tento objekt je kořenem podstromu, který obsahuje %s objektů." - -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "" - -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "" - -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "Tato objectClass je zastaralá" - -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "" - -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "Server neposkytuje žádné informace." - -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "" - -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "" - -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "" - -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "" - -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "Celkem objektů" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "Typ" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 -#, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "" -"Se zadanými přístupovými oprávněními se nelze připojit k %s a získat " -"auto_uid. Zkontrolujte prosím konfiguraci." - -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "" - -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "" - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "" - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "" - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "Neznámý auth_type: %s" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "" - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "Neznámá vyhledávací kritéria: " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "" - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "Soubor LDIF je prázdný." - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "Použití" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "K navigaci použijte prosím menu v levé části obrazovky" - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "Používají atributy" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "Používáno těmito objectClass" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "User Modification" - -#: ../../lib/EntryWriter1.php:797 -#, php-format -msgid "View %s children" -msgstr "Zobrazit potomky (%s)" - -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "Zobrazit potomka" - -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "Zobrazit schéma pro" - -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "Zobrazit serverem poskytované informace" - -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "" - -#: ../../lib/EntryWriter1.php:819 -msgid "Viewing entry in read-only mode." -msgstr "Prohlížení objekt v módu \"pouze pro čtení\"." - -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" - -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "" - -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "" -"Při rekurzivní kopii pracovat pouze s objekty, které splňují zvolený filtr" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "Ano" - -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "Ano, odstranit!" - -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "" -"Nepřipojujete se pomocí 'https'. Prohlížeč odešle Vaše přihlášení v " -"nešifrované podobě." - -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 -msgid "You cannot perform updates while server is in read-only mode" -msgstr "Nelze provádět úpravy dokud je server v módu \"pouze pro čtení\"" - -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "" -"Nelze přejmenovat objekt, který má potomky. Toto se například vztahuje na " -"všechny objekty, které nejsou typu \"list\"." - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "Nezměnili jste RDN" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "" -"Nepřiřadili jste žádné objectClass k tomuto objektu. Vraťte se prosím zpět a " -"akci opakujte." - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "Nevybrali jste žádné objekty k odstranění." - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "" - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "Nelze provádět vyhledávání na serveru bez předchozího přihlášení." - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "" - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "Ponechali jste pole RDN nevyplněné." - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 -msgid "You left the attribute value blank. Please go back and try again." -msgstr "Nevyplnili jste hodnotu atributu. Vraťte se zpět a akci opakujte." - -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "Ponechali jste kolonku cílové DN prázdnou." - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "Nezadali jste uživatelské heslo." - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "Nevyplnili jste pole pro vyžadovaný atribut %s." - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "Neprovedli jste žádné změny" - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "Musíte zvolit exportní formát." - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "" - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "Musíte zadat DN" - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "" - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "Budete požádáni o potvrzení tohoto rozhodnutí" - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "" -"V konfiguraci PHP jsou zakázány uploady souborů. Pro pokračování upravte " -"prosím php.ini." - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" -"Tato instalace PHP nepodporuje funkci mhash(). Nelze aplikovat SHA hash." - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "Tato instalace PHP neobsahuje podporu pro TLS" - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "" - -#: ../../lib/functions.php:1172 -#, php-format -msgid "" -"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " -"for server %s" -msgstr "" -"V konfiguraci phpLDAPadminu je uveden neplatný parametr auto_uid_search_base " -"pro server %s" - -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "Tato instalace PHP neobsahuje podporu pro šifru Blowfish." - -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 -msgid "Your system crypt library does not support extended DES encryption." -msgstr "" - -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 -msgid "Your system crypt library does not support md5crypt encryption." -msgstr "Tato instalace PHP neobsahuje podporu pro šifru md5crypt." - -#: ../../lib/template_functions.php:984 -#, php-format -msgid "" -"Your template calls php.Function for a default value, however (%s) is NOT " -"available in the POST FORM variables. The following variables are available " -"[%s]." -msgstr "" - -#: ../../lib/EntryReader.php:262 -#, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "" - -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "" - -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "Vaše verze PHP korektně neprovede tento dotaz." - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[atribut odstraněn]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "přidat hodnotu" - -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "" - -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "procházet" - -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "chyba" - -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "" - -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "" - -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "znak" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "znaků" - -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "smazat atribut" - -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "stáhnout data" - -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "prázdný" - -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "" - -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "" - -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "" - -#: ../../htdocs/search.php:273 -msgid "export results" -msgstr "" - -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "false" - -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "" - -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "rada" - -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "import" - -#: ../../lib/HTMLTree.php:248 -msgid "info" -msgstr "info" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "" - -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "jpegPhoto obsahuje chyby
" - -#: ../../lib/functions.php:351 -msgid "light" -msgstr "light" - -#: ../../lib/functions.php:132 -msgid "line" -msgstr "" - -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "přihlásit" - -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "odhlásit se" - -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "mass_delete v POSTu není pole." - -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "" - -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "" - -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "nový" - -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "nové atributy" - -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "žádný popis" - -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "" - -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "žádné objekty" - -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "nejsou dostupné žádné nové atributy pro tento objekt" - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "nejsou dostupné žádné nové binární atributy pro tento objekt" - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "žádný" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "žádný, odebrat hodnotu" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "nepoužitelný" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "nespecifikovaný" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" -"phpLDAPadmin rekurzivně odstraní tento objekt a všech jeho %s potomků. " -"Pozorně si prohlédněte seznam objektů, které tato operace odstraní. Přejete " -"si pokračovat?" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "Nebo možná phpLDAPadmin neví jak získat schéma pro Váš server." - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "jen pro čtení" - -#: ../../lib/HTMLTree.php:240 -msgid "refresh" -msgstr "obnovit" - -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "" - -#: ../../lib/EntryWriter1.php:1829 -msgid "rename" -msgstr "přejmenovat" - -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "" - -#: ../../lib/HTMLTree.php:224 msgid "schema" msgstr "schéma" -#: ../../lib/HTMLTree.php:232 + msgid "search" msgstr "vyhledat" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "sekund" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "" +msgid "create" +msgstr "vytvořit" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "" +msgid "info" +msgstr "info" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "" +msgid "import" +msgstr "import" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "" +msgid "refresh" +msgstr "obnovit" + + +msgid "logout" +msgstr "odhlásit se" + + +msgid "Create new entry here" +msgstr "Vytvořit nový" + + +msgid "View schema for" +msgstr "Zobrazit schéma pro" + + +msgid "Refresh all expanded containers for" +msgstr "Obnovit všechny otevřené složky" + + +msgid "Create a new entry on" +msgstr "Vytvořit nový objekt v" + + +msgid "new" +msgstr "nový" + + +msgid "View server-supplied information" +msgstr "Zobrazit serverem poskytované informace" + + +msgid "Import entries from an LDIF file" +msgstr "Importovat data ze souboru LDIF" + + +msgid "Logout of this server" +msgstr "Odhlásit se od tohoto serveru" + + +msgid "Logged in as: " +msgstr "Přihlášen jako: " + + +msgid "read only" +msgstr "jen pro čtení" + + +msgid "This attribute has been flagged as read only by the phpLDAPadmin administrator" +msgstr "Tento atribut byl administrátorem phpLDAPadminu označen jako \"jen pro čtení\"." + + +msgid "Could not determine the root of your LDAP tree." +msgstr "Nepodařilo se zjistit kořen Vašeho LDAP stromu." + + +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Zdá se, že LDAP server je nastavený tak, že nezobrazuje svůj kořen." + + +msgid "Please specify it in config.php" +msgstr "Nastavte ho prosím v souboru config.php" + + +msgid "Login..." +msgstr "Přihlásit se..." + + +msgid "login" +msgstr "přihlásit" + + +msgid "Delete this entry" +msgstr "Smazat tento objekt" + + +msgid "You will be prompted to confirm this decision" +msgstr "Budete požádáni o potvrzení tohoto rozhodnutí" + + +msgid "Copy or move this entry" +msgstr "Kopírovat tento objekt" + + +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Okopíruje tento objekt do jiného umístění, nového DN, nebo na jiný server" + + +msgid "Export" +msgstr "Export" + + +msgid "Save a dump of this object" +msgstr "Uložit přepis objektu" + + +msgid "Save a dump of this object and all of its children" +msgstr "Uloží přepis tohoto objektu a všech jeho potomků" + + +msgid "Export subtree" +msgstr "Exportovat podstrom" + + +msgid "Create a child entry" +msgstr "Vytvořit nového potomka" + + +msgid "Rename Entry" +msgstr "Přejmenovat objekt" + + +msgid "Rename" +msgstr "Přejmenovat" + + +msgid "rename" +msgstr "přejmenovat" + + +msgid "Add" +msgstr "Přidat" + + +msgid "View" +msgstr "Zobrazit" + + +msgid "View 1 child" +msgstr "Zobrazit potomka" + + +msgid "View %s children" +msgstr "Zobrazit potomky (%s)" + + +msgid "Add new attribute" +msgstr "Přidat nový atribut" + + +msgid "Add new ObjectClass" +msgstr "Přidat objectClass" + + +msgid "Hide internal attributes" +msgstr "Schovat interní atributy" + + +msgid "Show internal attributes" +msgstr "Zobrazit interní atributy" + + +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "Klepnutím zobrazíte definiční schéma pro atribut typu '%s'" + + +msgid "none" +msgstr "žádný" + + +msgid "No internal attributes" +msgstr "Žádné interní atributy" + + +msgid "This entry has no attributes" +msgstr "Tento objekt nemá atributy" + + +msgid "Save Changes" +msgstr "Uložit změny" + + +msgid "add value" +msgstr "přidat hodnotu" + + +msgid "Add an additional value to attribute '%s'" +msgstr "Přidá další hodnotu k atributu '%s'" + + +msgid "Refresh" +msgstr "Obnovit" + + +msgid "Refresh this entry" +msgstr "Obnovit tento objekt" + + +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "Rada: Pro smazání atributu vyprázděte textové políčko a klepněte na Uložit." + + +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "Rada: K zobrazení schémata pro atribut klepněte na název atributu." + + +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "Některé atributy (%s) byly modifikováný a jsou zvýrazněny dole." + + +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "Atribut (%s) byl změněn a je zvýrazněn dole." + + +msgid "Viewing entry in read-only mode." +msgstr "Prohlížení objekt v módu \"pouze pro čtení\"." + + +msgid "no new attributes available for this entry" +msgstr "nejsou dostupné žádné nové atributy pro tento objekt" + + +msgid "no new binary attributes available for this entry" +msgstr "nejsou dostupné žádné nové binární atributy pro tento objekt" + + +msgid "Binary value" +msgstr "Binarní hodnota" + + +msgid "Add new binary attribute" +msgstr "Přidat nový binarní atribut" + + +msgid "Note: '%s' is an alias for '%s'" +msgstr "Alias k %s" + + +msgid "download value" +msgstr "stáhnout data" + + +msgid "delete attribute" +msgstr "smazat atribut" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "jako nový objekt" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 msgid "true" msgstr "true" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "" -"update_array je poškozené. Může se jednat o chybu v phpLDAPadmin. Prosíme " -"Vás, abyste chybu nahlásili." +msgid "false" +msgstr "false" -#: ../../htdocs/add_value_form.php:93 -msgid "value to" -msgstr "hodnota pro" -#: ../../htdocs/add_value_form.php:112 -msgid "values for attribute" -msgstr "hodnoty pro atribut" +msgid "none, remove value" +msgstr "žádný, odebrat hodnotu" + + +msgid "Really delete attribute" +msgstr "Skutečně smazat atribut" + + +msgid "Add New Value" +msgstr "Přidat novou hodnotu" + + +msgid "The server does not fully support the LDAP protocol." +msgstr "Server plně nepodporuje LDAP protocol." + + +msgid "Your version of PHP does not correctly perform the query." +msgstr "Vaše verze PHP korektně neprovede tento dotaz." + + +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "Nebo možná phpLDAPadmin neví jak získat schéma pro Váš server." + + +msgid "Jump to an objectClass" +msgstr "Jdi na objectClass" + + +msgid "Jump to an attribute type" +msgstr "Jdi na typ atributu" + + +msgid "Jump to a matching rule" +msgstr "Jdi na Matching Rule" + + +msgid "Schema for server" +msgstr "Schéma serveru" + + +msgid "Required Attributes" +msgstr "Vyžadované atributy" + + +msgid "Optional Attributes" +msgstr "Volitelné atributy" + + +msgid "Optional Binary Attributes" +msgstr "Volitelné binární atributy" + + +msgid "OID" +msgstr "OID" + + +msgid "Aliases" +msgstr "Aliasy" + + +msgid "Description" +msgstr "Popis" + + +msgid "no description" +msgstr "žádný popis" + + +msgid "Name" +msgstr "Název" + + +msgid "Equality" +msgstr "Equality" + + +msgid "This objectClass is obsolete." +msgstr "Tato objectClass je zastaralá" + + +msgid "Inherits from" +msgstr "Odvozeno od objectClass" + + +msgid "Parent to" +msgstr "Rodičovská objectClass" + + +msgid "Jump to this objectClass definition" +msgstr "Jdi na definici této objectClass" + + +msgid "Matching Rule OID" +msgstr "Výběrové kritérium OID" + + +msgid "Syntax OID" +msgstr "Syntaxe OID" + + +msgid "not applicable" +msgstr "nepoužitelný" + + +msgid "not specified" +msgstr "nespecifikovaný" + + +msgid "character" +msgstr "znak" + + +msgid "characters" +msgstr "znaků" + + +msgid "Used by objectClasses" +msgstr "Používáno těmito objectClass" + + +msgid "Used by Attributes" +msgstr "Používají atributy" + + +msgid "Maximum Length" +msgstr "Maximální délka" + + +msgid "Syntaxes" +msgstr "Syntaxe" + + +msgid "Matching Rules" +msgstr "Matching Rules" + + +msgid "Obsolete" +msgstr "Zastaralé" + + +msgid "Ordering" +msgstr "Řazení" + + +msgid "Substring Rule" +msgstr "Substring Rule" + + +msgid "Single Valued" +msgstr "Single Valued" + + +msgid "Collective" +msgstr "Collective" + + +msgid "User Modification" +msgstr "User Modification" + + +msgid "Usage" +msgstr "Použití" + + +msgid "Could not retrieve schema from" +msgstr "Nelze získat schéma z" + + +msgid "Type" +msgstr "Typ" + + +msgid "Entry %s deleted successfully." +msgstr "Objekt '%s' byl úspěšně odstraněn." + + +msgid "You must specify a DN" +msgstr "Musíte zadat DN" + + +msgid "Could not delete the entry: %s" +msgstr "Nebylo možné odstranit objekt: %s" + + +msgid "No such entry: %s" +msgstr "Objekt neexistuje: %s" + + +msgid "Delete %s" +msgstr "Smazat %s" + + +msgid "Permanently delete all children also?" +msgstr "Odstranit také všechny potomky?" + + +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "Tento objekt je kořenem podstromu, který obsahuje %s objektů." + -#: ../../htdocs/delete_form.php:48 msgid "view entries" msgstr "zobrazit objekty" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "" +msgid "phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?" +msgstr "phpLDAPadmin rekurzivně odstraní tento objekt a všech jeho %s potomků. Pozorně si prohlédněte seznam objektů, které tato operace odstraní. Přejete si pokračovat?" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "" -#: ../../htdocs/compare_form.php:29 -msgid "with " -msgstr "" +msgid "Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems." +msgstr "Poznámka: tato operace může mít fatální následky a nelze ji vrátit zpět. Speciální pozornost věnujte aliasům, odkazům a ostatním věcem, které můžou způsobit problémy." -#~ msgid "equals" -#~ msgstr "je" -#~ msgid "contains" -#~ msgstr "obsahuje" +msgid "Delete all %s objects" +msgstr "Smazat všech %s objektů" -#~ msgid "create" -#~ msgstr "vytvořit" -#~ msgid "Create a new entry on" -#~ msgstr "Vytvořit nový objekt v" +msgid "Recursive delete progress" +msgstr "Průběh rekurzivního odstranění" -#~ msgid "Logged in as: " -#~ msgstr "Přihlášen jako: " -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "" -#~ "Okopíruje tento objekt do jiného umístění, nového DN, nebo na jiný server" +msgid "Entry %s and sub-tree deleted successfully." +msgstr "Objekt %s a jeho podstrom byly úspěšně odstraněny." -#~ msgid "View" -#~ msgstr "Zobrazit" -#~ msgid "Click to view the schema defintion for attribute type '%s'" -#~ msgstr "Klepnutím zobrazíte definiční schéma pro atribut typu '%s'" +msgid "Failed to delete entry %s" +msgstr "Nepodařilo se odstranit objekt %s" -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "Alias k %s" -#~ msgid "Entry %s deleted successfully." -#~ msgstr "Objekt '%s' byl úspěšně odstraněn." +msgid "List of entries to be deleted:" +msgstr "Seznam objektů k odstranění:" -#~ msgid "" -#~ "Instructions: In order to add these objectClass(es) to this entry, you must " -#~ "specify" -#~ msgstr "Návod: K přiřazení této objectClass k vybranému objektu musíte zadat" -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "" -#~ "atributy, které jsou touto objectClass vyžadovány. Můžete tak učinit v tomto " -#~ "formuláři." +msgid "Are you sure you want to permanently delete this object?" +msgstr "Jste si skutečně jisti, že chcete odstranit tento objekt?" -#~ msgid "Bad server id" -#~ msgstr "Špatné ID serveru" -#~ msgid "Could not connect to LDAP server." -#~ msgstr "Nelze se připojit k LDAP serveru." +msgid "DN" +msgstr "DN" -#~ msgid "Server: " -#~ msgstr "Server: " - -#~ msgid "Looking in: " -#~ msgstr "Prohlížení: " - -#~ msgid "No DN specified in query string!" -#~ msgstr "V požadavku nebyl uveden žádný DN!" - -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "Poznámka: Pokud nenastavíte na tomto LDAP serveru pravidlo
EQUALITY pro tento atribut, dojde k chybě při výběru objektů." - -#~ msgid "Copy successful! Would you like to " -#~ msgstr "Kopie úspěšně dokončena! Přejete si " - -#~ msgid "view the new entry" -#~ msgstr "zobrazit nový objekt" - -#~ msgid "Choose a template" -#~ msgstr "Vyberte šablonu" - -#~ msgid "Click here to go to the login form" -#~ msgstr "Klepnutím budete přesměrováni na formulář k přihlášení" - -#~ msgid "Entries found: " -#~ msgstr "Nalezené objekty: " - -#~ msgid "Filter performed: " -#~ msgstr "Uplatněný filtr: " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "Vyhledávání dokončeno za" - -#~ msgid "starts with" -#~ msgstr "začíná na" - -#~ msgid "ends with" -#~ msgstr "končí na" - -#~ msgid "sounds like" -#~ msgstr "zní jako" - -#~ msgid "" -#~ "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP " -#~ "or perhaps your LDAP server has access control specified that prevents LDAP " -#~ "clients from accessing the RootDSE." -#~ msgstr "Nelze získat informace ze serveru LDAP" - -#~ msgid "ChangeLog" -#~ msgstr "ChangeLog" - -#~ msgid "Unsafe file name: " -#~ msgstr "Nebezpečný název souboru: " - -#~ msgid "No such file: " -#~ msgstr "Soubor nelze nalézt: " - -#~ msgid "" -#~ "You have enabled auto_uid_numbers for %s in your configuration, " -#~ " but you have not specified the " -#~ "auto_uid_number_mechanism. Please correct " -#~ "this problem." -#~ msgstr "" -#~ "V konfiguraci jste zapnuli podporu auto_uid_numbers pro %s, ale " -#~ "nespecifikovali jste auto_uid_number_mechanism. Napravte prosím nejprve " -#~ "tento problém." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool\" " -#~ " in your configuration for server %s, but you did not " -#~ "specify the audo_uid_number_uid_pool_dn. Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "V konfiguraci serveru %s jste specifikovali " -#~ "auto_uid_number_mechanism jako uidpool, ale neuvedli jste " -#~ "audo_uid_number_uid_pool_dn. Napravte prosím nejprve tento problém." - -#~ msgid "" -#~ "It appears that the uidPool you specified in your configuration (\"%s\") " -#~ " does not exist." -#~ msgstr "Zdá se, že uidPool uvedený v konfiguraci (%s) neexistuje." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"search\" in your " -#~ " configuration for server %s, but you did not " -#~ "specify the \"auto_uid_number_search_base\". " -#~ "Please specify it before proceeding." -#~ msgstr "" -#~ "V konfiguraci serveru %s jste specifikovali " -#~ "auto_uid_number_mechanism jako search, ale neuvedli jste " -#~ "auto_uid_number_search_base. Napravte prosím nejprve tento problém." - -#~ msgid "" -#~ "You specified an invalid value for auto_uid_number_mechanism (\"%s\") " -#~ " in your configration. Only \"uidpool\" and " -#~ "\"search\" are valid. Please correct this " -#~ "problem." -#~ msgstr "" -#~ "V konfiguraci je uvedena neplatná hodnota auto_uid_number_mechanism " -#~ "(%s). Platné hodnoty jsou pouze uidpool a search. " -#~ "Napravte prosím nejprve tento problém." - -#~ msgid "" -#~ "Error: You have an error in your config file. The only three allowed values " -#~ " for auth_type in the $servers section are " -#~ "'session', 'cookie', and 'config'. You entered '%s', " -#~ " which is not allowed. " -#~ msgstr "" -#~ "Chyba: Ve svém konfiguračním souboru jste u položky $servers['auth_type'] " -#~ "uvedli chybnou hodnotu '%s'. Platné hodnoty jsou pouze 'config' a 'form'. " - -#~ msgid "LDAP said: %s" -#~ msgstr "Odpověď LDAP serveru: %s

" - -#~ msgid "Error number: %s (%s)" -#~ msgstr "Číslo chyby: %s (%s)

" - -#~ msgid "Description: %s

" -#~ msgstr "Popis: %s

" - -#~ msgid "Error number: %s

" -#~ msgstr "Číslo chyby: %s

" - -#~ msgid "Description: (no description available)
" -#~ msgstr "Popis: (popis není k dispozici)
" - -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "" -#~ "Pokud je toto chyba v phpLDAPadmin, napište nám o tom." - -#~ msgid "Unrecognized error number: " -#~ msgstr "Neznámé číslo chyby: " - -#~ msgid "" -#~ "

\t\t\t
You found " -#~ "a non-fatal phpLDAPadmin bug!
Error:%s " -#~ "(%s)
File: %s line " -#~ "%s, caller %s
Versions:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "server:%s
Please check and see if this bug has been reported " -#~ "here.
If it hasnt been reported, you may report this bug by clicking " -#~ "here.

" -#~ msgstr "" -#~ "
Narazili " -#~ "jste na nezávažnou, droubnou až zanedbatelnou chybu v " -#~ "phpLDAPadmin!
Chyba:%s " -#~ "(%s)
Soubor: %s řádka " -#~ "%s, voláno z %s
Verze:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "server:%s
Klepnutím prosím ohlášte " -#~ "chybu.

" - -#~ msgid "" -#~ "Congratulations! You found a bug in phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA " -#~ "Version:%s
PHP " -#~ "Version:%s
PHP " -#~ "SAPI:%s
Web " -#~ "server:%s
\t
\t Please " -#~ "report this bug by clicking below!" -#~ msgstr "" -#~ "Blahopřejeme! Nalezli jste chybu v phpLDAPadmin. :-)

\t " -#~ "\t \t " -#~ "\t " -#~ "\t " -#~ "\t \t \t \t \t \t
Chyba:%s
Vážnost:%s
Soubor:%s
Řádka:%s
Voláno " -#~ "z:%s
Verze " -#~ "PLA:%s
Verze " -#~ "PHP:%s
PHP " -#~ "SAPI:%s
Web " -#~ "server:%s
\t
\t " -#~ "Klepnutím dole prosím ohlašte chybu!" - -#~ msgid "Select an LDIF file:" -#~ msgstr "Zvolte soubor LDIF:" - -#~ msgid "Line Number:" -#~ msgstr "Číslo řádku:" - -#~ msgid "Line:" -#~ msgstr "Řádek:" - -#~ msgid "Optional Binary Attributes" -#~ msgstr "Volitelné binární atributy" - -#~ msgid "Maximum file size: %s" -#~ msgstr "Maximální velikost souboru: %s" - -#~ msgid "Back" -#~ msgstr "Zpět" - -#~ msgid "object" -#~ msgstr "objekt" - -#~ msgid "Delete all" -#~ msgstr "Odstranit vše" - -#~ msgid "warning" -#~ msgstr "upozornění" - -#~ msgid "using template" -#~ msgstr "použítím šablony" - -#~ msgid "Redirecting..." -#~ msgstr "Přesměrovávám" - -#~ msgid "here" -#~ msgstr "zde" - -#~ msgid "Step 1 of 2: Name and ObjectClass(es)" -#~ msgstr "Krok 1 ze 2: Jméno a objectClass(y)" - -#~ msgid "Step 2 of 2: Specify attributes and values" -#~ msgstr "Krok 2 ze 2: Atributy a hodnoty" - -#~ msgid "Relative Distinguished Name" -#~ msgstr "Relativní Distinguished Name" - -#~ msgid "RDN" -#~ msgstr "RDN" - -#~ msgid "(example: cn=MyNewPerson)" -#~ msgstr "(příklad: cn=MujNovyUzivatel)" - -#~ msgid "Could not bind to the LDAP server." -#~ msgstr "Nelze se připojit k serveru LDAP." - -#~ msgid "Successfully logged into server %s" -#~ msgstr "Úspěšně jste se přihlásili k serveru %s" - -#~ msgid "%s bytes" -#~ msgstr "%s bajtů" - -#~ msgid "Searching..." -#~ msgstr "Vyhledávám..." - -#~ msgid "Logged out successfully from server %s" -#~ msgstr "Odhlášení od serveru %s proběhlo úspěšně." - -#~ msgid "Authenticate to server %s" -#~ msgstr "Ověření vůči serveru %s" - -#~ msgid "Warning: This web connection is unencrypted." -#~ msgstr "Upozornění: Toto spojení není šifrováné." -#~ msgid "User name" -#~ msgstr "Uživatel" +msgid "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin configuration." +msgstr "Atribut \"%s\" je v konfiguraci phpLDAPadminu označen jako \"jen pro čtení\"." + + +msgid "No attribute name specified." +msgstr "Nebylo zadáno jméno atributu." + + +msgid "No DN specified" +msgstr "Nebylo zadáno DN" + + +msgid "You left the attribute value blank. Please go back and try again." +msgstr "Nevyplnili jste hodnotu atributu. Vraťte se zpět a akci opakujte." + + +msgid "Failed to add the attribute." +msgstr "Přidání atributu selhalo." + + +msgid "The file you chose is either empty or does not exist. Please go back and try again." +msgstr "Soubor, který jste zvolili je buď prázdný nebo neexistuje. Vraťte se prosím zpět a akci opakujte." + + +msgid "Security error: The file being uploaded may be malicious." +msgstr "Bezpečnostní chyba: Soubor, který uploadujete může být závadný." + + +msgid "Your PHP configuration has disabled file uploads. Please check php.ini before proceeding." +msgstr "V konfiguraci PHP jsou zakázány uploady souborů. Pro pokračování upravte prosím php.ini." + + +msgid "The file you uploaded is too large. Please check php.ini, upload_max_size setting" +msgstr "Soubor, který se pokoušeli uložit je příliš veliký. Upravte prosím hodnotu upload_max_size v php.ini." + + +msgid "The file you selected was only partially uploaded, likley due to a network error." +msgstr "Při uploadu souboru došlo zřejmě k selhání sítě, neboť se podařilo získat jen část souboru." + + +msgid "Maximum file size: %s" +msgstr "Maximální velikost souboru: %s" + + +msgid "Modification successful!" +msgstr "Úprava proběhla úspěšně!" + + +msgid "Since you changed your password, you must now login again with your new password." +msgstr "Kvůli změně svého hesla se nyní musíte přihlásit znova - s novým heslem." + + +msgid "New Required Attributes" +msgstr "Nový vyžadovaný atribut" + + +msgid "This action requires you to add" +msgstr "K provedení této akce musíte přidat" + + +msgid "new attributes" +msgstr "nové atributy" + + +msgid "Instructions: In order to add these objectClass(es) to this entry, you must specify" +msgstr "Návod: K přiřazení této objectClass k vybranému objektu musíte zadat" + + +msgid "that this objectClass requires. You can do so in this form." +msgstr "atributy, které jsou touto objectClass vyžadovány. Můžete tak učinit v tomto formuláři." + + +msgid "Add ObjectClass and Attributes" +msgstr "Přidat objectClass a atributy" + + +msgid "ObjectClasses" +msgstr "objectClassy" + + +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "Otevře popup okno, ve kterém zvolíte DN" + + +msgid "You cannot perform updates while server is in read-only mode" +msgstr "Nelze provádět úpravy dokud je server v módu \"pouze pro čtení\"" + + +msgid "Bad server id" +msgstr "Špatné ID serveru" + + +msgid "Not enough information to login to server. Please check your configuration." +msgstr "Nedostatek informací pro přihlášení k serveru. Ověřte prosím nastavení." + + +msgid "Could not connect to LDAP server." +msgstr "Nelze se připojit k LDAP serveru." + + +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "Nelze se připojit k \"%s\" na portu \"%s\"" + + +msgid "Could not perform ldap_mod_add operation." +msgstr "Nelze provést ldap_mod_add operaci." + + +msgid "Success" +msgstr "Hotovo" + + +msgid "Server: " +msgstr "Server: " + + +msgid "Looking in: " +msgstr "Prohlížení: " + + +msgid "No DN specified in query string!" +msgstr "V požadavku nebyl uveden žádný DN!" + + +msgid "Back Up..." +msgstr "O úroveň výš..." + + +msgid "no entries" +msgstr "žádné objekty" + + +msgid "Could not determine base DN" +msgstr "Nelze zjistit výchozí DN" + + +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "Toto se může přihodit z několika příčin. Nejpravděpodobnější jsou:" + + +msgid "Yes" +msgstr "Ano" + + +msgid "No" +msgstr "Ne" + + +msgid "Go" +msgstr "Jdi" + + +msgid "Delete" +msgstr "Odstranit" + + +msgid "Back" +msgstr "Zpět" + + +msgid "object" +msgstr "objekt" + + +msgid "Delete all" +msgstr "Odstranit vše" + + +msgid "hint" +msgstr "rada" + + +msgid "bug" +msgstr "chyba" + + +msgid "warning" +msgstr "upozornění" + + +msgid "light" +msgstr "light" + + +msgid "Proceed >>" +msgstr "Proveď >>" + + +msgid "Add new" +msgstr "Přidat nový" + + +msgid "value to" +msgstr "hodnota pro" + + +msgid "Distinguished Name" +msgstr "Distinguished Name" + + +msgid "Current list of" +msgstr "Současný výpis" + + +msgid "values for attribute" +msgstr "hodnoty pro atribut" + + +msgid "Note: You will get an \"inappropriate matching\" error if you have not setup an EQUALITY rule on your LDAP server for this attribute." +msgstr "Poznámka: Pokud nenastavíte na tomto LDAP serveru pravidlo
EQUALITY pro tento atribut, dojde k chybě při výběru objektů." + + +msgid "Enter the value you would like to add:" +msgstr "Zadejte hodnotu, kterou chcete přidat:" + + +msgid "Note: You may be required to enter new attributes that these objectClass(es) require" +msgstr "Poznámka: Není vyloučené, že budete vyzváni k zadání nových atributů vyžadovaných touto objectClass" + + +msgid "You left the destination DN blank." +msgstr "Ponechali jste kolonku cílové DN prázdnou." + + +msgid "The destination entry (%s) already exists." +msgstr "Objekt (%s) již v cílovém DN existuje." + + +msgid "The destination container (%s) does not exist." +msgstr "Cílová složka (%s) neexistuje." + + +msgid "The source and destination DN are the same." +msgstr "Zdrojové a cílové DN se shodují." + + +msgid "Copying " +msgstr "Kopíruji " + + +msgid "Recursive copy progress" +msgstr "Průběh rekurzivního kopírování" + + +msgid "Building snapshot of tree to copy... " +msgstr "Sestavuji obraz stromu ke kopírování... " + + +msgid "Copy successful! Would you like to " +msgstr "Kopie úspěšně dokončena! Přejete si " + + +msgid "view the new entry" +msgstr "zobrazit nový objekt" + + +msgid "Failed to copy DN: " +msgstr "Nepodařilo se okopírovat DN: " + + +msgid "Template" +msgstr "Šablona" + + +msgid "using template" +msgstr "použítím šablony" + + +msgid "Go to %s" +msgstr "Jdi na %s" + + +msgid "Copy " +msgstr "Kopírovat " + + +msgid "to a new object" +msgstr "jako nový objekt" + + +msgid "Destination DN" +msgstr "Cílové DN" + + +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "Celé DN nového objektu bude vytvořeno kopií zdrojového objektu" + + +msgid "Destination Server" +msgstr "Cílový server" + + +msgid "Hint: Copying between different servers only works if there are no schema violations" +msgstr "Rada: Kopírování mezi servery funguje jedině za předpokladu, že nedojde k neshodě schémat" + + +msgid "Recursively copy all children of this object as well." +msgstr "Při kopírování zahrnout všechny potomky tohoto objektu." + + +msgid "Recursive copy" +msgstr "Rekurzivní kopie" + + +msgid "Filter" +msgstr "Filtr" + + +msgid "When performing a recursive copy, only copy those entries which match this filter" +msgstr "Při rekurzivní kopii pracovat pouze s objekty, které splňují zvolený filtr" + + +msgid "You left the value blank for required attribute (%s)." +msgstr "Nevyplnili jste pole pro vyžadovaný atribut %s." + + +msgid "Redirecting..." +msgstr "Přesměrovávám" + + +msgid "here" +msgstr "zde" + + +msgid "Could not add the object to the LDAP server." +msgstr "Nelze objekt do LDAP serveru přidat." + + +msgid "Create Object" +msgstr "Vytvořit objekt" + + +msgid "Choose a template" +msgstr "Vyberte šablonu" + + +msgid "Select a template for the creation process" +msgstr "Zvolte šablonu pro vytvoření objektu" + + +msgid "You left the RDN field blank." +msgstr "Ponechali jste pole RDN nevyplněné." + + +msgid "The container you specified (%s) does not exist. Please try again." +msgstr "Složka (%s) neexistuje. Opakujte prosím akci." + + +msgid "You did not select any ObjectClasses for this object. Please go back and do so." +msgstr "Nepřiřadili jste žádné objectClass k tomuto objektu. Vraťte se prosím zpět a akci opakujte." + + +msgid "Hint: You must choose exactly one structural objectClass (shown in bold above)" +msgstr "Nápověda: Musíte zvolit alespoň jednu structural objectClass." + + +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "Krok 1 ze 2: Jméno a objectClass(y)" + + +msgid "Step 2 of 2: Specify attributes and values" +msgstr "Krok 2 ze 2: Atributy a hodnoty" + + +msgid "Relative Distinguished Name" +msgstr "Relativní Distinguished Name" + + +msgid "RDN" +msgstr "RDN" + + +msgid "(example: cn=MyNewPerson)" +msgstr "(příklad: cn=MujNovyUzivatel)" + + +msgid "Container" +msgstr "Složka" + + +msgid "You have not logged into the selected server yet, so you cannot perform searches on it." +msgstr "Nelze provádět vyhledávání na serveru bez předchozího přihlášení." + + +msgid "Click here to go to the login form" +msgstr "Klepnutím budete přesměrováni na formulář k přihlášení" + + +msgid "Unrecognized criteria option: " +msgstr "Neznámá vyhledávací kritéria: " + + +msgid "If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting." +msgstr "Pokud si přejete přidat svoje vlastní vyhledávací kritéria, ujistěte se, že jste je přidali do search.php." + + +msgid "Entries found: " +msgstr "Nalezené objekty: " + + +msgid "Filter performed: " +msgstr "Uplatněný filtr: " + + +msgid "Search performed by phpLDAPadmin in" +msgstr "Vyhledávání dokončeno za" + + +msgid "seconds" +msgstr "sekund" + + +msgid "The scope in which to search" +msgstr "Oblast vyhledávání" + + +msgid "Sub (entire subtree)" +msgstr "Celý podstrom" + + +msgid "One (one level beneath base)" +msgstr "O jednu úroveň níž" + + +msgid "Base (base dn only)" +msgstr "Pouze výchozí DN" + + +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "Standardní LDAP vyhledávací filtr. Přiklad: (&(sn=Smith)(givenname=David))" + + +msgid "Search Filter" +msgstr "Vyhledávací filtr" + + +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "Seznam atributů zobrazených ve výsledku hledání (oddělené čárkou)" + + +msgid "equals" +msgstr "je" + + +msgid "starts with" +msgstr "začíná na" + + +msgid "contains" +msgstr "obsahuje" + + +msgid "ends with" +msgstr "končí na" + + +msgid "sounds like" +msgstr "zní jako" + + +msgid "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE." +msgstr "Nelze získat informace ze serveru LDAP" + + +msgid "Server info for: " +msgstr "Server info pro: " + + +msgid "Server reports the following information about itself" +msgstr "Server o sobě poskytuje následující informace" + + +msgid "This server has nothing to report." +msgstr "Server neposkytuje žádné informace." + + +msgid "update_array is malformed. This might be a phpLDAPadmin bug. Please report it." +msgstr "update_array je poškozené. Může se jednat o chybu v phpLDAPadmin. Prosíme Vás, abyste chybu nahlásili." + + +msgid "Could not perform ldap_modify operation." +msgstr "Nelze provést operaci ldap_modify." + + +msgid "Do you want to make these changes?" +msgstr "Přejete si provést tyto změny?" + + +msgid "Attribute" +msgstr "Atribut" + + +msgid "Old Value" +msgstr "Původní hodnota" + + +msgid "New Value" +msgstr "Nová hodnota" + + +msgid "[attribute deleted]" +msgstr "[atribut odstraněn]" + + +msgid "Commit" +msgstr "Odeslat" + + +msgid "Cancel" +msgstr "Storno" + + +msgid "You made no changes" +msgstr "Neprovedli jste žádné změny" + + +msgid "Use the menu to the left to navigate" +msgstr "K navigaci použijte prosím menu v levé části obrazovky" + + +msgid "Credits" +msgstr "Autoři" + + +msgid "ChangeLog" +msgstr "ChangeLog" + + +msgid "Donate" +msgstr "Podpořit projekt" + + +msgid "Unsafe file name: " +msgstr "Nebezpečný název souboru: " + + +msgid "No such file: " +msgstr "Soubor nelze nalézt: " + + +msgid "You have enabled auto_uid_numbers for %s in your configuration," +" but you have not specified the auto_uid_number_mechanism. Please correct" +" this problem." +msgstr "V konfiguraci jste zapnuli podporu auto_uid_numbers pro %s, ale nespecifikovali jste auto_uid_number_mechanism. Napravte prosím nejprve tento problém." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"uidpool\"" +" in your configuration for server %s, but you did not specify the" +" audo_uid_number_uid_pool_dn. Please specify it before proceeding." +msgstr "V konfiguraci serveru %s jste specifikovali auto_uid_number_mechanism jako uidpool, ale neuvedli jste audo_uid_number_uid_pool_dn. Napravte prosím nejprve tento problém." + + +msgid "It appears that the uidPool you specified in your configuration (\"%s\")" +" does not exist." +msgstr "Zdá se, že uidPool uvedený v konfiguraci (%s) neexistuje." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"search\" in your" +" configuration for server %s, but you did not specify the" +" \"auto_uid_number_search_base\". Please specify it before proceeding." +msgstr "V konfiguraci serveru %s jste specifikovali auto_uid_number_mechanism jako search, ale neuvedli jste auto_uid_number_search_base. Napravte prosím nejprve tento problém." + + +msgid "Unable to bind to %s with your with auto_uid credentials. Please check your configuration file." +msgstr "Se zadanými přístupovými oprávněními se nelze připojit k %s a získat auto_uid. Zkontrolujte prosím konfiguraci." + + +msgid "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s" +msgstr "V konfiguraci phpLDAPadminu je uveden neplatný parametr auto_uid_search_base pro server %s" + + +msgid "You specified an invalid value for auto_uid_number_mechanism (\"%s\")" +" in your configration. Only \"uidpool\" and \"search\" are valid." +" Please correct this problem." +msgstr "V konfiguraci je uvedena neplatná hodnota auto_uid_number_mechanism (%s). Platné hodnoty jsou pouze uidpool a search. Napravte prosím nejprve tento problém." + + +msgid "Error: You have an error in your config file. The only three allowed values" +" for auth_type in the $servers section are 'session', 'cookie', and 'config'. You entered '%s'," +" which is not allowed. " +msgstr "Chyba: Ve svém konfiguračním souboru jste u položky $servers['auth_type'] uvedli chybnou hodnotu '%s'. Platné hodnoty jsou pouze 'config' a 'form'." + + +msgid "Your PHP install does not support TLS." +msgstr "Tato instalace PHP neobsahuje podporu pro TLS" + + +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "Nelze inicializovat TLS.
Zkontolujte prosím konfiguraci svého LDAP serveru." + + +msgid "Could not bind anonymously to server." +msgstr "K serveru se nelze připojit anonymně." + + +msgid "Could not bind to the LDAP server." +msgstr "Nelze se připojit k serveru LDAP." + + +msgid "Anonymous Bind" +msgstr "Připojit anonymně" + + +msgid "Bad username or password. Please try again." +msgstr "Nesprávné jméno nebo heslo. Opakujte přihlášení." + + +msgid "Successfully logged into server %s" +msgstr "Úspěšně jste se přihlásili k serveru %s" + + +msgid "Could not set cookie." +msgstr "Cookie nemohla být uložena." + + +msgid "LDAP said: %s" +msgstr "Odpověď LDAP serveru: %s

" + + +msgid "Error" +msgstr "Chyba" + + +msgid "browse" +msgstr "procházet" + + +msgid "Delete Photo" +msgstr "Odstranit fotografii" + + +msgid "Your system crypt library does not support blowfish encryption." +msgstr "Tato instalace PHP neobsahuje podporu pro šifru Blowfish." + + +msgid "Your system crypt library does not support md5crypt encryption." +msgstr "Tato instalace PHP neobsahuje podporu pro šifru md5crypt." + + +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "Tato instalace PHP nepodporuje funkci mhash(). Nelze aplikovat SHA hash." + + +msgid "jpegPhoto contains errors
" +msgstr "jpegPhoto obsahuje chyby
" + + +msgid "Error number: %s (%s)" +msgstr "Číslo chyby: %s (%s)

" + + +msgid "Description: %s

" +msgstr "Popis: %s

" + + +msgid "Error number: %s

" +msgstr "Číslo chyby: %s

" + + +msgid "Description: (no description available)
" +msgstr "Popis: (popis není k dispozici)
" + + +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "Pokud je toto chyba v phpLDAPadmin, napište nám o tom." + + +msgid "Unrecognized error number: " +msgstr "Neznámé číslo chyby: " + + +msgid "
" +" " +" " +" " +"
" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
Please check and see if this bug has been reported here.
If it hasnt been reported, you may report this bug by clicking here.

" +msgstr "
" +"
" +" Narazili jste na nezávažnou, droubnou až zanedbatelnou chybu v phpLDAPadmin!
Chyba:%s (%s)
Soubor:%s řádka %s, voláno z %s
Verze:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
" +" Klepnutím prosím ohlášte chybu.

" + + +msgid "Congratulations! You found a bug in phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Please report this bug by clicking below!" +msgstr "Blahopřejeme! Nalezli jste chybu v phpLDAPadmin. :-)

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Chyba:%s
Vážnost:%s
Soubor:%s
Řádka:%s
Voláno z:%s
Verze PLA:%s
Verze PHP:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Klepnutím dole prosím ohlašte chybu!" + + +msgid "Import LDIF File" +msgstr "Importovat soubor LDIF" + + +msgid "Select an LDIF file:" +msgstr "Zvolte soubor LDIF:" + + +msgid "Don't stop on errors" +msgstr "Ignorovat chyby" + + +msgid "Adding..." +msgstr "Přidávání..." + + +msgid "Deleting..." +msgstr "Odstraňování..." + + +msgid "Renaming..." +msgstr "Přejmenovávání..." + + +msgid "Modifying..." +msgstr "Upravování..." + + +msgid "No version found. Assuming 1." +msgstr "Nebyla nalezena verze. Předpokládám 1." + + +msgid "A valid dn line is required." +msgstr "Je vyžadován platný řádek s DN." + + +msgid "Missing uploaded file." +msgstr "Soubor LDIF nebyl nalezen." + + +msgid "Uploaded LDIF file is empty." +msgstr "Soubor LDIF je prázdný." + + +msgid "empty" +msgstr "prázdný" + + +msgid "File" +msgstr "Soubor" + + +msgid "%s bytes" +msgstr "%s bajtů" + + +msgid "Failed" +msgstr "selhal" + + +msgid "LDIF Parse Error" +msgstr "Chyba v souboru LDIF" + + +msgid "Could not add object:" +msgstr "Nelze přidat objekt:" + + +msgid "Could not rename object:" +msgstr "Nelze přejmenovat objekt:" + + +msgid "Could not delete object:" +msgstr "Nelze odstranit objekt:" + + +msgid "Could not modify object:" +msgstr "Nelze upravit objekt:" + + +msgid "Line Number:" +msgstr "Číslo řádku:" + + +msgid "Line:" +msgstr "Řádek:" + + +msgid "Export format" +msgstr "Formát exportu" + + +msgid "Line ends" +msgstr "Konce řádků" + + +msgid "You must choose an export format." +msgstr "Musíte zvolit exportní formát." + + +msgid "Invalid export format" +msgstr "Neplatný exportní formát" + + +msgid "No available exporter found." +msgstr "Nebyla nalezena žádná aplikace pro export." + + +msgid "Encountered an error while performing search." +msgstr "Během vyhledávání došlo k chybě." + + +msgid "Showing results %s through %s." +msgstr "Výsledky od %s do %s." + + +msgid "Searching..." +msgstr "Vyhledávám..." + + +msgid "Notice, search size limit exceeded." +msgstr "Byl překročen limitní parametr pro vyhledávání." + + +msgid "Entry" +msgstr "Objekt" + + +msgid "LDIF Export for: %s" +msgstr "LDIF Export objektu: %s" + + +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "Generováno phpLDAPadminem dne %s" + + +msgid "Total Entries" +msgstr "Celkem objektů" + + +msgid "DSLM Export for: %s" +msgstr "DSLM Export objektu: %s" + + +msgid "You left the password blank." +msgstr "Nezadali jste uživatelské heslo." + + +msgid "No one is logged in to that server." +msgstr "Nikdo není přihlášen k tomuto serveru." + + +msgid "Could not logout." +msgstr "Nelze se odhlásit." + + +msgid "Unknown auth_type: %s" +msgstr "Neznámý auth_type: %s" + + +msgid "Logged out successfully from server %s" +msgstr "Odhlášení od serveru %s proběhlo úspěšně." + + +msgid "Authenticate to server %s" +msgstr "Ověření vůči serveru %s" + + +msgid "Warning: This web connection is unencrypted." +msgstr "Upozornění: Toto spojení není šifrováné." + + +msgid "You are not using 'https'. Web browser will transmit login information in clear text." +msgstr "Nepřipojujete se pomocí 'https'. Prohlížeč odešle Vaše přihlášení v nešifrované podobě." + + +msgid "Login DN" +msgstr "Přihlašovací DN" + + +msgid "User name" +msgstr "Uživatel" + + +msgid "Password" +msgstr "Heslo" + + +msgid "Authenticate" +msgstr "Přihlásit" + + +msgid "Entry Chooser" +msgstr "Zvolit objekt" + + +msgid "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do so. An example config file is provided in 'config/config.php.example'" +msgstr "Nejprve je třeba phpLDAPadmin nakonfigurovat. Toho docílíte upravou souboru 'config.php'. Ukázková konfigurace je k nalezení v souboru 'config.php.example'" + + +msgid "Deletes not allowed in read only mode." +msgstr "Mazání je v režimu \"jen pro čtení\" zakázáno." + + +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "Chyba při volání mass_delete.php. V POSTu chybí proměnná mass_delete." + + +msgid "mass_delete POST var is not an array." +msgstr "mass_delete v POSTu není pole." + + +msgid "Mass deletion is not enabled. Please enable it in config.php before proceeding." +msgstr "Hromadý výmaz není umožněn. Můžete ho povolit v souboru config.php." + + +msgid "Mass Deleting" +msgstr "Hromadný výmaz" + + +msgid "Deletion progress on server \"%s\"" +msgstr "Průběh odstraňování na serveru \"%s\"" + + +msgid "Malformed mass_delete array." +msgstr "Zdeformované pole mass_delete." + + +msgid "You did not select any entries to delete." +msgstr "Nevybrali jste žádné objekty k odstranění." + + +msgid "Deleting %s" +msgstr "Odstraňuji %s" + + +msgid "%s of %s entries failed to be deleted." +msgstr "%s z %s objektů se nepodařilo odstranit." + + +msgid "All entries deleted successfully." +msgstr "Všechny objekty byly úspěšně odstraněny." + + +msgid "Confirm mass delete of %s entries on server %s" +msgstr "Potvďte hromadný výmaz v počtu %s objektů na serveru %s" + + +msgid "Yes, delete!" +msgstr "Ano, odstranit!" + + +msgid "You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)" +msgstr "Nelze přejmenovat objekt, který má potomky. Toto se například vztahuje na všechny objekty, které nejsou typu \"list\"." + + +msgid "You did not change the RDN" +msgstr "Nezměnili jste RDN" + + +msgid "Invalid RDN value" +msgstr "Neplatná hodnota RDN" + + +msgid "Could not rename the entry" +msgstr "Objekt nelze přejmenovat" -#~ msgid "" -#~ "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do " -#~ "so. An example config file is provided in 'config/config.php.example'" -#~ msgstr "" -#~ "Nejprve je třeba phpLDAPadmin nakonfigurovat. Toho docílíte upravou souboru " -#~ "'config.php'. Ukázková konfigurace je k nalezení v souboru " -#~ "'config.php.example'" -#~ msgid "Deletes not allowed in read only mode." -#~ msgstr "Mazání je v režimu \"jen pro čtení\" zakázáno." diff --git a/locale/de_DE/LC_MESSAGES/messages.mo b/locale/de_DE/LC_MESSAGES/messages.mo index 50151b9c5ae937ce1cdc57c773bb7b9efeb9b77c..7d9b916bc683b021fccd8469d9f2dc178312a1cc 100644 GIT binary patch literal 39181 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 diff --git a/locale/de_DE/LC_MESSAGES/messages.po b/locale/de_DE/LC_MESSAGES/messages.po index 6fa0278..faa3407 100644 --- a/locale/de_DE/LC_MESSAGES/messages.po +++ b/locale/de_DE/LC_MESSAGES/messages.po @@ -1,2934 +1,1621 @@ # : $ + + msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2004-01-14 17:45+0200\n" -"PO-Revision-Date: 2008-11-25 07:58+0000\n" -"Last-Translator: Stephan Windmüller \n" "Language-Team: phpLDAPadmin \n" +"Last-Translator: Marius Rieder \n" +"POT-Creation-Date: 2005-11-29 17:45+0100\n" +"PO-Revision-Date: 2005-11-29 18:22+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-11-29 23:48+0000\n" -"X-Generator: Launchpad (build Unknown)\n" -#: ../../htdocs/mass_delete.php:86 -#, php-format -msgid "%s of %s entries failed to be deleted." -msgstr "%s von %s Einträgen konnten nicht gelöscht werden." -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "(" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../lib/HTMLTree.php:486 -msgid "(Session timed out. Automatically logged out.)" -msgstr "" -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr ")" - -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" -msgstr ":" - -#: ../../lib/search_form_advanced.php:103 -msgid "A list of attributes to display in the results (comma-separated)" -msgstr "Kommaseparierte Liste der anzuzeigenden Attribute." - -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 -msgid "A random password was generated for you" -msgstr "Es wurde ein Zufallskennwort für Sie erzeugt" - -#: ../../lib/ldif_functions.php:532 -msgid "A valid deleteoldrdn attribute should be specified" -msgstr "" - -#: ../../lib/ldif_functions.php:243 -msgid "A valid dn line is required." -msgstr "Eine gültige DN Zeile wird benötigt." - -#: ../../lib/ldif_functions.php:538 -msgid "A valid newrdn attribute should be specified" -msgstr "" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 -msgid "Add" -msgstr "Hinzufügen" - -#: ../../htdocs/add_value_form.php:182 -msgid "Add New Value" -msgstr "Neuen Wert hinzufügen" - -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 -msgid "Add ObjectClass and Attributes" -msgstr "ObjectClass und Attribute hinzufügen" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "Alle hinzufügen" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 -#, php-format -msgid "Add an additional value to attribute '%s'" -msgstr "Füge dem Attribut '%s' einen weiteren Wert hinzu" - -#: ../../htdocs/add_value_form.php:93 -msgid "Add new" -msgstr "Neu hinzufügen" - -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 -msgid "Add new ObjectClass" -msgstr "Neue ObjectClass hinzufügen" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 -msgid "Add new attribute" -msgstr "Neues Attribut hinzufügen" - -#: ../../htdocs/add_attr_form.php:114 -msgid "Add new binary attribute" -msgstr "Neuen Binärwert hinzufügen" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "füge Ausgewählten hinzu" - -#: ../../htdocs/ldif_import.php:62 -msgid "Adding..." -msgstr "Hinzufügen..." - -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 -msgid "Advanced Search Form" -msgstr "Experten Suche" - -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "" - -#: ../../htdocs/schema.php:110 -msgid "Aliases" -msgstr "Pseudonym(e)" - -#: ../../htdocs/mass_delete.php:88 -msgid "All entries deleted successfully." -msgstr "Alle Einträge wurden erfolgreich gelöscht." - -#: ../../lib/EntryWriter1.php:825 -#, php-format -msgid "An attribute (%s) was modified and is highlighted below." -msgstr "Ein Attribut (%s) wurde verändert und ist hervorgehoben." - -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "" - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "Anonymous" - -#: ../../htdocs/login.php:164 -msgid "Anonymous Bind" -msgstr "Anonymous anmelden" - -#: ../../htdocs/delete_form.php:102 -msgid "Are you sure you want to permanently delete this object?" -msgstr "Sind Sie sicher das Sie dauerhaft den Eintrag löschen wollen?" - -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 -msgid "Attribute" -msgstr "Attribute" - -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "Attribut Typen" - -#: ../../lib/ldif_functions.php:455 -msgid "Attribute is not valid" -msgstr "Attribut ist ungültig" - -#: ../../lib/ldif_functions.php:375 -msgid "Attribute not well formed" -msgstr "Attribut ist nicht wohlgeformt" - -#: ../../htdocs/login_form.php:63 -msgid "Authenticate" -msgstr "Authentifizierung" - -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "" - -#: ../../htdocs/entry_chooser.php:65 -msgid "Back Up..." -msgstr "Eine Ebene höher..." - -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 -msgid "Bad username or password. Please try again." -msgstr "Falscher Benutzername oder Passwort. Bitte erneut versuchen." - -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 -msgid "Base (base dn only)" -msgstr "Base (Nur Suchbasis)" - -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 -msgid "Base DN" -msgstr "Base DN" - -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 -msgid "Binary value" -msgstr "Binärwert" - -#: ../../htdocs/copy.php:61 -msgid "Building snapshot of tree to copy... " -msgstr "Erzeuge Speicherauszug des zu kopierenden Verzeichnisses " - -#: ../../lib/export_functions.php:38 -msgid "CSV (Spreadsheet)" -msgstr "" - -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 -msgid "Cancel" -msgstr "Abbruch" - -#: ../../htdocs/compare.php:343 -msgid "Check password" -msgstr "Prüfe Kennwort" - -#: ../../lib/EntryWriter1.php:2427 -msgid "Check password..." -msgstr "" - -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "" - -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "Kindelemente" - -#: ../../lib/functions.php:3223 -msgid "Click to popup a dialog to select a date graphically" -msgstr "" - -#: ../../lib/functions.php:2239 -msgid "Click to popup a dialog to select an entry (DN) graphically" -msgstr "Klicken um einen Eintrag (DN) grafisch auszuwählen." - -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 -#, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "" - -#: ../../htdocs/schema.php:106 -msgid "Collective" -msgstr "Sammlung" - -#: ../../htdocs/update_confirm.php:303 -msgid "Commit" -msgstr "Anwenden" - -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 -msgid "Compare" -msgstr "Vergleichen" - -#: ../../htdocs/compare_form.php:21 -msgid "Compare another DN with" -msgstr "" - -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 -msgid "Compare this DN with another" -msgstr "" - -#: ../../lib/EntryWriter1.php:776 -msgid "Compare with another entry" -msgstr "" - -#: ../../htdocs/compare.php:42 -msgid "Comparing the following DNs" -msgstr "" - -#: ../../htdocs/export_form.php:84 -msgid "Compress" -msgstr "Komprimieren" - -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "" - -#: ../../htdocs/mass_delete.php:92 -#, php-format -msgid "Confirm mass delete of %s entries on server %s" -msgstr "Bitte das Löschen von %s Einträgen auf dem Server %s bestätigen" - -#: ../../lib/EntryWriter1.php:327 -msgid "Container" -msgstr "Behälter" - -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "" - -#: ../../lib/ldif_functions.php:525 -msgid "Container is null" -msgstr "" - -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 -msgid "Copy" -msgstr "Kopieren" - -#: ../../htdocs/copy_form.php:96 -msgid "Copy " -msgstr "Kopiere " - -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:741 -msgid "Copy or move this entry" -msgstr "Diesen Eintrag kopieren" - -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "" - -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "" - -#: ../../htdocs/copy.php:57 -msgid "Copying " -msgstr "Kopieren " - -#: ../../htdocs/ldif_import.php:70 -msgid "Could not add object:" -msgstr "Konnte das Objekt nicht hinzufügen:" - -#: ../../htdocs/create.php:133 -msgid "Could not add the object to the LDAP server." -msgstr "Konnte das Objekt dem LDAP-Server nicht hinzufügen." - -#: ../../htdocs/login.php:137 -msgid "Could not bind anonymously to server." -msgstr "Konnte keine Anonymous Anmeldung zum Server herstellen." - -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "" - -#: ../../lib/server_functions.php:347 -#, php-format -msgid "Could not connect to \"%s\" on port \"%s\"" -msgstr "Konnte keine Verbindung zum Server \"%s\" am Port \"%s\" erstellen." - -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "" - -#: ../../htdocs/ldif_import.php:71 -msgid "Could not delete object:" -msgstr "Konnte das Objekt nicht entfernen:" - -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 -#, php-format -msgid "Could not delete the entry: %s" -msgstr "Konnte den Eintrag nicht löschen: %s" - -#: ../../htdocs/entry_chooser.php:101 -msgid "Could not determine base DN" -msgstr "Konnten Basis-DN nicht ermitteln." - -#: ../../lib/HTMLTree.php:82 -msgid "Could not determine the root of your LDAP tree." -msgstr "Konnte die Basis ihres LDAP Verzeichnises nicht ermitteln" - -#: ../../lib/functions.php:1849 -#, php-format -msgid "Could not fetch jpeg data from LDAP server for attribute %s." -msgstr "" - -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 -msgid "Could not logout." -msgstr "Konnte nicht abgemeldet werden" - -#: ../../htdocs/ldif_import.php:74 -msgid "Could not modify object:" -msgstr "Konnte das Objekt nicht abändern:" - -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 -msgid "Could not perform ldap_mod_add operation." -msgstr "Kann keine 'ldap_mod_add' Operationen durchführen." - -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 -msgid "Could not perform ldap_modify operation." -msgstr "Konnte die 'ldap_modify' Operation nicht ausführen." - -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 -msgid "Could not rename object:" -msgstr "Konnte das Objekt nicht umbenennen:" - -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 -msgid "Could not rename the entry" -msgstr "Der Eintrag konnte nicht umbenannt werden" - -#: ../../htdocs/schema.php:31 -msgid "Could not retrieve schema from" -msgstr "" -"Das Schema konnte nicht abgefragt werden. Betrifft die Einstellung des " -"Servers:" - -#: ../../htdocs/login.php:152 -msgid "Could not set cookie." -msgstr "Konnte kein 'Cookie' setzten." - -#: ../../lib/server_functions.php:265 -msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "" -"TLS konnte nicht gestartet werden. Bitte die LDAP-Server-Konfiguration " -"überprüfen." - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "Erstellen" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "Eintrag erstellen" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "Erzeuge einen neuen Eintag" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "Erzeuge einen Untereintrag" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "Neuen Eintrag erzeugen auf" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "Neuen Eintrag erzeugen" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "Vorspann" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "Aktuelle Liste von" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "Ausschneiden" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "DN" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "Standard" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "Löschen" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "Löschen von %s" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "Lösche Foto" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "Löschen aller \"%s\" Objekte" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "Diesen Eintrag löschen" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "Lösche" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "Lösche \"%s\"" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "Entfernen..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "Löschprozess auf Server \"%s\"" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "Beschreibung" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "Ziel DN" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "Zielserver" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "" - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "Distinguished Name (eindeutiger Name)" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "Wollen sie diese Änderungen übernehmen?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "Dokumentation" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "Bei einem Fehler nicht unterbrechen sondern weitermachen." - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "Spende" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "Ein Fehler trat während des Suchvorgangs auf" - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "Geben sie den Wert ein den sie hinzufügen möchten:" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "Eintrag" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "Erfolgreiches Löschen des Eintrages \"%s\" und dessen Unterbaums." - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "Einträge auswählen" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "Gleichheit" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "Fehler" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "" -"Fehler im Aufruf von \"mass_delete.php\". \"mass_delete\" ist in den POST-" -"Variablen nicht vorhanden." - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "Fehler-Code" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "Fehlernummer" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "Exportieren" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "Export Format" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "Export Unterbaum nach LDIF" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "fehlgeschlagen" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "Fehler beim Hinzufügen des Attributes" - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "Kopieren des DN fehlgeschlagen: " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "Fehler beim Löschen des Eintrages %s." - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "Datei" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "Filter" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "Format" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "Funktion" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "" -"Erstellt von phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) am %s" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "Allgemeiner Fehler" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "Weiter" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "Zurück" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "Gehe zu" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "Gehe zu %s" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "Hilfe" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "Verstecken" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "Verdecke interne Attribute" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "Hinweis" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "" -"Info: Kopieren zwischen unterschiedlichen Servern funktioniert nur wenn " -"keine Unvereinbarkeiten im Schema auftreten" - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "" -"Hinweis: Um ein Attribut zu löschen, leeren Sie den Inhalt des Wertes." - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "" -"Tipp: Um das Schema für ein Attribut anzusehen, genügt ein klick auf den " -"Attributnamen." - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "" -"Hinweis: Es muss mindestens ein Strukturelle ObjectClass ausgewählt sein." - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "Home" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please report it." -msgstr "" - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "" -"Falls eigene Auswahlkriterien hinzugefügt werden sollen, muss 'search.php' " -"editiert werden" - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "Importiere LDIF Datei" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "Importiere Einträge von einer LDIF-Datei" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "Einbinden von System-Attributen" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "abgeleitet von" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "Abgeleitet von" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "Anweisungen" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "" - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "Ungültiger RDN Wert" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "Unglültiges Export-Format" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "" -"Es scheint das ihr LDAP Server nicht dazu konfiguriert wurde seine Basis " -"bekanntzugeben" - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "Gehe zur Treffer Regel" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "Gehe zum Attribut" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "Gehe zur objectClass" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "Gehe zur objectClass Definition" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "LDIF Export von: %s" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "LDIF Pars Fehler" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "Zeile" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "Zeilennummer" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "Zeilenende" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "List der Einträge die gelöscht werden:" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "Angemeldet als" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "Anmeldung" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "Anmelde DN" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "Anmelden..." - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "Abmelden" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "Von diesem Server abmelden" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "E-Mail" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "" - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "Das Array \"mass_delete\" ist falsch dargestellt." - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "Viel-Löschen" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "" -"\"Viel-Löschen\" ist nicht aktiviert. Bitte in der der \"config.php\" " -"aktivieren vor dem Weitermachen." - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "Treffer-Regel OID" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "Treffer Regeln" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "Maximale Größe" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "" - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "" - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "" - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "Hochgeladene Datei fehlt." - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "Änderung war erfolgreich!" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "Abändern..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "Name" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "Neue benötigte Attribute" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "Neuer Wert" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "Nein" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "Kein DN angegeben." - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "" - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "Keine Vorlage" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "Kein Wert" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "Kein Attributname angegeben." - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "Keinen gültigen Exporter gefunden." - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "Kein Cache zu bereinigen" - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "Keine internen Attribute." - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "Niemand ist an diesem Server angemeldet" - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "Keine Abfragen sind in der config.php definiert" - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "Keinen solchen Eintrag: %s" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "Kein Schema Eintrag für Element: %s" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "Keine Version gefunden. Gehe von der Version 1 aus." - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "" -"Nicht genügend Angaben zur Anmeldung am Server. Bitte überprüfen sie ihre " -"Konfiguration" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "Notiz" - -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "" -"Info: Sie werden gegebenenfalles gezwungen sein neue Attribute hinzuzufügen." - -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" -"Hinweis: Dies ist sehr gefährlich und erfolgt auf eines Risiko. Die " -"Ausführung kann nicht rückgängig gemacht werden. Dies betrifft ebenso " -"Aliase, Referenzen und andere Dinge die zu Problemen führen können." - -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "Hinweis, das Limit der Suchtreffer wurde überschritten." - -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" - -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 -msgid "ObjectClasses" -msgstr "Objekt Klassen" - -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" - -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "" - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "Veraltet" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "Alter Wert" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "One (Suchbasis und eine Unterverzeichnisebene)" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "Optionale Attribute" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "Sortieren nach" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "Ordnung" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "Seite %d" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "Knoten von" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "Passwort" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "Die Passwörter stimmen nicht überein!" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "Lösche alles und auch die Untereinträge?" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "Bitte in config.php angeben" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "Vordefinierte Suche" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 -msgid "Proceed >>" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "" - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "Cache bereinigen" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "Es wurden %s Bytes aus dem Cache bereinigt." - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "Lösche das Attribut wirklich" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "Rekursives kopieren" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "Rekursives Kopieren im Gange" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "Rekursives Löschen in Arbeit" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "Rekursiv kopiert auch alle Unterobjekte" - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "Auffrischen" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "Aktualisiere alle geöffneten Container von" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "Aktualisiere den Entrag" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "Ausgewählte entfernen" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "Umbenennen" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "Eintrag umbenennen" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "Umbenennen..." - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "Einen Fehler berichten" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "Anfragen von neuen Möglichkeiten" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "Notwendige Attribute" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "Notwendige Attribute für die Objektklasse(n) %s" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "Speichern" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "Änderungen speichern" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "Speichere einen Abzug diese Objektes" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "Speicher eine Abzug ab diesem Objekt und alle seine Untereinträge" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "Änderungen speichern" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "Schema für Server" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "Suchen" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "Suchfilter" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "Suchbereich" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "Suche nach Einträgen die" - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "Sicherheitsfehler: Die hochgeladene Datei kann bösartig sein." - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "oder ein von dieser Liste auswählen" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "Wählen sie eine Vorlage für das Objekt" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "Server" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "Serverinformationen für: " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "Der Server meldete die folgenden Informationen über sich" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "Anzeigen" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "Zeige Attribute" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "Zeige interne Attribute" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "Zeige die Ergebnisse von %s bis %s." - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 msgid "Simple Search Form" msgstr "Einfache Suche" -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "Da das Passwort geändert wurde müssen Sie sich erneut einloggen." -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "Einzelner Wert" +msgid "Advanced Search Form" +msgstr "Experten Suche" -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "Überspringen" -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "Einige Attribute (%s) wurden verändert und sind hervorgehoben." +msgid "Server" +msgstr "Server" -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "" -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "" +msgid "Search for entries whose" +msgstr "Suche nach Einträgen die" -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "" -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "Standard LDAP Suchfilter. Bsp.: (&(sn=Smith)(givenname=David))" +msgid "Base DN" +msgstr "Base DN" -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "Sub (Suchbasis und alle Unterverzeichnisebenen)" +msgid "Search Scope" +msgstr "Suchbereich" -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "Teilstring Regel" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "Erfolgreich" +msgid "Show Attributtes" +msgstr "Zeige Attribute" -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "" -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "" +msgid "Search" +msgstr "Suchen" -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "Syntax" +msgid "equals" +msgstr "gleich" -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "Syntax OID" -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "Syntaxe" +msgid "contains" +msgstr "enthält" -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "Vorlage" -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" +msgid "Select a predefined search" +msgstr "oder ein von dieser Liste auswählen" -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "Vorlagen" -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "" +msgid "Predefined Searches" +msgstr "Vordefinierte Suche" -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "" -"Das Attribut \"%s\" ist in der phpLDAPadmin Konfiguration als nur lesend " -"deklariert." -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "" +msgid "No queries have been defined in config.php." +msgstr "Keine Abfragen sind in der config.php definiert" -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "" -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "" - -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "" - -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "" - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "" - -#: ../../htdocs/create.php:39 -#, php-format -msgid "The container you specified (%s) does not exist. Please try again." -msgstr "" -"Der angegenben Eintrag (%s) ist nicht vorhanden. Bitte erneut versuchen." - -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "Der Zielcontainer (%s) existiert nicht." - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "Der Zieleintrag (%s) existiert bereits." - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "" - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "" - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "" - -#: ../../htdocs/add_attr.php:56 -msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "" -"Die ausgewählte Datei ist entweder nicht vorhanden oder leer. Bitte " -"zurückgehen und nochmals versuchen." - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "Die auswählte Datei wurde nur unvollständig hochgeladen." - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "" -"Die hochgeladene Datei ist größer als die maximal erlaubte Datei aus der " -"\"php.ini\". Bitte in der php.ini den Eintrag \"upload_max_size\" überprüfen." - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" -msgstr "Der komplette DN des Eintrages der beim Kopieren erzeugt wird." - -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" -msgstr "Bereich der durchsucht wird." - -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "" - -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "Der Server unterstützt nicht vollständig das LDAP-Protokoll." - -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "Ursprung DN und Ziel DN sind identisch" - -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "" - -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "Es gibt" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "Diese Aktion zwingt sie folgendes hinzuzufügen" - -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "" -"Diese Attribut wurde vom phpLDAPadmin-Adminstrator als nur lesend markiert." - -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "" - -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "" - -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "Dies kann mehrere Gründe haben. Die häufigsten sind:" - -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "" - -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "Dieser Eintrag hat keine Attribute." - -#: ../../htdocs/delete_form.php:46 -#, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "" -"Dies ist ein Root-Eintrag und beinhaltet einen Unterbaum mit %s Einträgen." - -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "" -"Dies ist eine strukturelle Objektklasse und kann nicht entfernt werden." - -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "" - -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "Diese objectClass ist veraltet" - -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "" - -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "Der Server hat keine Informationen gemeldet" - -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "" - -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "" - -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "An" - -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "" - -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "Anzahl der Eintraege" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "Papierkorb" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "Typ" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "Adresse (URL)" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 -#, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "Konnte nicht mit \"%s\" verbinden" - -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "" -"Es konnten nicht an \"%s\" mit dem Berechtigungsnachweis von " -"\"unique_attrs\" verbunden werden. Bitte die Konfigurationdatei (config.php) " -"überprüfen." - -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "" - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "Kann Datei nicht öffnen" - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "Datei kann nicht gelesen werden" - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "Unbekannter Authentifizierungsart: %s" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "" - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "Unbekannte Option " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "Das Suchergebnisformat ist nicht erkennbar: %s" - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "Die hochgeladene LDIF-Datei ist leer." - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "Verwendung" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "Benutzen sie das Menu auf der linken Seite zur Navigation." - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "Verwendet in den Attributen" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "Verwendet von den Objektklassen" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "Benutzer Änderung" - -#: ../../lib/EntryWriter1.php:797 -#, php-format -msgid "View %s children" -msgstr "Zeige %s Untereinträge" - -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "Zeige einen Untereintrag" - -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "Zeige Schema für" - -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "Zeige Server Informationen" - -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "Zeige die Schemabeschreibung für diese Objektklasse" - -#: ../../lib/EntryWriter1.php:819 -msgid "Viewing entry in read-only mode." -msgstr "Zeige Eintrag im Nurlesemodus" - -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" - -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "Warnung" - -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "" -"Bei der Ausfürung des rekursiven Kopierens werden nur die Einträge " -"verwendet, die mit dem Filter übereinstimmen" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "Ja" - -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "Ja, Löschen!" - -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "" -"Es wird keine verschlüsselte Verbindung ('https') verwendet. Der Webbrowser " -"übermittelt die Anmeldeinformationen im Klartext." - -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 -msgid "You cannot perform updates while server is in read-only mode" -msgstr "" -"Sie können keine Aktualisierungen durchführen während der Server sich im " -"'nur lese'-modus befindet" - -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "" -"Das Umbenennen von einem Eintrag mit Untereinträgen ist nicht Möglich. Es " -"ist nur auf den Untersten Einträgen gestattet." - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "Der RDN wurde nicht verändert" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "" -"Es wurde kein ObjectClasses für diesen Eintrag ausgewählt. Bitte zurückgehen " -"und korrigieren" - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "Es wurde kein zu löschender Eintrag ausgewählt." - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "" - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "" -"Sie haben sich am ausgewählten Server nicht angemeldet. Sie können keine " -"Suche durchführen." - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "" - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "Das RDN Feld wurde leer gelassen." - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 -msgid "You left the attribute value blank. Please go back and try again." -msgstr "" -"Der Wert des Attributes wurde leergelassen. Bitte zurück gehen und erneut " -"versuchen." - -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "Sie haben kein Ziel DN angegeben" - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "Das Passwort wurde leer gelassen" - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "" - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "Sie haben keine Änderungen vorgenommen." - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "Bitte ein Exportformat auswählen" - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "" - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "Ein DN muss angegeben werden." - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "" - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "Für diese Entscheidung wird nochmals nachgefragt." - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "" -"Die PHP-Konfiguration (php.ini) gestattet es nicht Dateien hochzuladen. " -"Bitte die php.ini hierzu überprüfen." - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" -"Die verwendete PHP-Version unterstützt nicht die Funktion mhash(), daher " -"kann kein SHA Hash verwendet werden." - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "" -"Die verwendete PHP-Version unterstützt kein TLS (verschlüsselte Verbindung)." - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "" - -#: ../../lib/functions.php:1172 -#, php-format -msgid "" -"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " -"for server %s" -msgstr "" -"Die phpLDAPadmin Konfiguration für den Server \"%s\" gibt eine ungültige " -"Suchbasis für \"auto_uid_search_base\" an." - -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "" -"Die verwendete PHP-Version unterstützt keine Blowfish Verschlüsselung." - -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 -msgid "Your system crypt library does not support extended DES encryption." -msgstr "" - -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 -msgid "Your system crypt library does not support md5crypt encryption." -msgstr "Die eingesetzte PHP-Version unterstützt keine MD5-Verschlüsselung." - -#: ../../lib/template_functions.php:984 -#, php-format -msgid "" -"Your template calls php.Function for a default value, however (%s) is NOT " -"available in the POST FORM variables. The following variables are available " -"[%s]." -msgstr "" - -#: ../../lib/EntryReader.php:262 -#, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "" - -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "" - -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "Die verwendete PHP-Version setzte keine korrekte LDAP-Abfrage ab." - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[Wert gelöscht]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "Wert hinzufügen" - -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "" - -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "Überfliegen" - -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "Programmfehler" - -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "Bytes" - -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "" - -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "Zeichen" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "Zeichen" - -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "bestätigen" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "Lösche Attribut" - -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "Wert herunterladen" - -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "leer" - -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "Einträge" - -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "Eintrag" - -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "exportieren" - -#: ../../htdocs/search.php:273 msgid "export results" msgstr "Ergebnisse exportieren" -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "Falsch" -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "" +msgid "Unrecognized search result format: %s" +msgstr "Das Suchergebnisformat ist nicht erkennbar: %s" -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "Hinweis" -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "Import" +msgid "Format" +msgstr "Format" -#: ../../lib/HTMLTree.php:248 -msgid "info" -msgstr "Info" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "" +msgid "list" +msgstr "Liste" -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "Die Bilddatei enthält Fehler" -#: ../../lib/functions.php:351 -msgid "light" -msgstr "light" +msgid "table" +msgstr "Tabelle" -#: ../../lib/functions.php:132 -msgid "line" -msgstr "Zeile" -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "Anmelden" +msgid "Your config.php specifies an invalid value for $default_search_display: %s. Please fix it" +msgstr "Die config.php gibt einen falsche Wert für $default_search_display: %s vor. Bitte in der Konfiguration korrigieren." -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "abmelden" -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "Die POST-Variable \"mass_delete\" ist kein Array." +msgid "Request feature" +msgstr "Anfragen von neuen Möglichkeiten" -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "" -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "" +msgid "Report a bug" +msgstr "Einen Fehler berichten" -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "" -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "" - -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "Neu" - -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "neue Attribute" - -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "Keine Beschreibung" - -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "keine Beschreibung verfügbar" - -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "Keine Einträge" - -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "Keine weiteren Attribute verfügbar für diesen Eintrag" - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "Keine weiteren Binären Attribute verfügbar für diesen Eintrag." - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "Keine" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "nichts, entferne den Wert" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "nicht anwendbar" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "nicht spezifiziert" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" -"phpLDAPadmin kann diesen Eintrag und die %s Untereinträge rekursiv löschen. " -"Unten ist eine Liste der Einträge angegeben die von diesem Löschen betroffen " -"wären. Sollen alle Einträge gelöscht werden?" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "Oder phpLDAPadmin konnte nicht das Schema für den Server abfragen." - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "säubern" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "nur lesen" - -#: ../../lib/HTMLTree.php:240 -msgid "refresh" -msgstr "aktualisieren" - -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "" - -#: ../../lib/EntryWriter1.php:1829 -msgid "rename" -msgstr "umbenennen" - -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "notwendig" - -#: ../../lib/HTMLTree.php:224 msgid "schema" msgstr "Schema" -#: ../../lib/HTMLTree.php:232 + msgid "search" msgstr "suche" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "Sekunden" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "" +msgid "refresh" +msgstr "aktualisieren" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "" +msgid "create" +msgstr "Erstellen" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "Strukturell" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "" +msgid "info" +msgstr "Info" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "" +msgid "import" +msgstr "Import" + + +msgid "logout" +msgstr "abmelden" + + +msgid "Create new entry here" +msgstr "Neuen Eintrag erzeugen" + + +msgid "new" +msgstr "Neu" + + +msgid "View schema for" +msgstr "Zeige Schema für" + + +msgid "Refresh all expanded containers for" +msgstr "Aktualisiere alle geöffneten Container von" + + +msgid "Create a new entry on" +msgstr "Erzeuge einen neuen Eintrag auf" + + +msgid "View server-supplied information" +msgstr "Zeige Server Informationen" + + +msgid "Import entries from an LDIF file" +msgstr "Importiere Einträge von einer LDIF-Datei" + + +msgid "Logout of this server" +msgstr "Von diesem Server abmelden" + + +msgid "Logged in as: " +msgstr "Angemeldet als: " + + +msgid "read only" +msgstr "nur lesen" + + +msgid "This attribute has been flagged as read only by the phpLDAPadmin administrator" +msgstr "Diese Attribut wurde vom phpLDAPadmin-Adminstrator als nur lesend markiert." + + +msgid "Could not determine the root of your LDAP tree." +msgstr "Konnte die Basis ihres LDAP Verzeichnises nicht ermitteln" + + +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Es scheint das ihr LDAP Server nicht dazu konfiguriert wurde seine Basis bekanntzugeben" + + +msgid "Please specify it in config.php" +msgstr "Bitte in config.php angeben" + + +msgid "Create a new entry in" +msgstr "Neuen Eintrag erzeugen auf" + + +msgid "Login..." +msgstr "Anmelden..." + + +msgid "login" +msgstr "Anmelden" + + +msgid "Delete this entry" +msgstr "Diesen Eintrag löschen" + + +msgid "You will be prompted to confirm this decision" +msgstr "Für diese Entscheidung wird nochmals nachgefragt." + + +msgid "Copy or move this entry" +msgstr "Diesen Eintrag kopieren" + + +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Kopiere diese Object an eine anderen Ort: ein neuer DN oder einen anderen Server." + + +msgid "Export" +msgstr "Exportieren" + + +msgid "export" +msgstr "exportieren" + + +msgid "Save a dump of this object" +msgstr "Speichere einen Abzug diese Objektes" + + +msgid "Save a dump of this object and all of its children" +msgstr "Speicher eine Abzug ab diesem Objekt und alle seine Untereinträge" + + +msgid "Export subtree" +msgstr "Export Unterbaum nach LDIF" + + +msgid "Create a child entry" +msgstr "Erzeuge einen Untereintrag" + + +msgid "Rename Entry" +msgstr "Eintrag umbenennen" + + +msgid "Rename" +msgstr "Umbenennen" + + +msgid "rename" +msgstr "umbenennen" + + +msgid "Add" +msgstr "Hinzufügen" + + +msgid "View" +msgstr "Ansehen" + + +msgid "View 1 child" +msgstr "Zeige einen Untereintrag" + + +msgid "View %s children" +msgstr "Zeige %s Untereinträge" + + +msgid "Add new attribute" +msgstr "Neues Attribut hinzufügen" + + +msgid "Add new ObjectClass" +msgstr "Neue ObjectClass hinzufügen" + + +msgid "Hide internal attributes" +msgstr "Verdecke interne Attribute" + + +msgid "Show internal attributes" +msgstr "Zeige interne Attribute" + + +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "Klicken sie um die Schemadefinition für den Attributtyp \"%s\" anzuzeigen." + + +msgid "none" +msgstr "Keine" + + +msgid "No internal attributes" +msgstr "Keine internen Attribute." + + +msgid "This entry has no attributes" +msgstr "Dieser Eintrag hat keine Attribute." + + +msgid "Save Changes" +msgstr "Änderungen speichern" + + +msgid "add value" +msgstr "Wert hinzufügen" + + +msgid "Add an additional value to attribute '%s'" +msgstr "Füge einen weiteren Wert dem Attribut hinzu" + + +msgid "Refresh" +msgstr "Auffrischen" + + +msgid "Refresh this entry" +msgstr "Aktualisiere den Entrag" + + +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "Hinweis: Um ein Attribut zu löschen, leeren Sie den Inhalt des Wertes." + + +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "Tipp:Um das Schema für ein Attribut anzusehen, genügt ein klick auf den Attributnamen" + + +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "Einige Attribute (%s) wurden verändert und sind hervorgehoben." + + +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "Ein Attribut (%s) wurde verändert und ist hervorgehoben." + + +msgid "Viewing entry in read-only mode." +msgstr "Zeige Eintrag im Nurlesemodus" + + +msgid "no new attributes available for this entry" +msgstr "Keine weiteren Attribute verfügbar für diesen Eintrag" + + +msgid "no new binary attributes available for this entry" +msgstr "Keine weiteren Binären Attribute verfügbar für diesen Eintrag." + + +msgid "Binary value" +msgstr "Binärwert" + + +msgid "Add new binary attribute" +msgstr "Neuen Binärwert hinzufügen" + + +msgid "Note: '%s' is an alias for '%s'" +msgstr "Alias für" + + +msgid "Required attribute for objectClass(es) %s" +msgstr "Notwendige Attribute für die Objektklasse(n) %s" + + +msgid "download value" +msgstr "Wert herunterladen" + + +msgid "delete attribute" +msgstr "Lösche Attribut" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "in ein neues Objekt" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 msgid "true" msgstr "Wahr" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "" -"Das \"update_array\" wird falsch dargestellt. Dies könnte ein phpLDAPadmin " -"Fehler sein. Bitte Berichten sie uns davon." +msgid "false" +msgstr "Falsch" -#: ../../htdocs/add_value_form.php:93 -msgid "value to" -msgstr "Wert auf" -#: ../../htdocs/add_value_form.php:112 -msgid "values for attribute" -msgstr "Werte des Attributes" +msgid "none, remove value" +msgstr "nichts, entferne den Wert" + + +msgid "Really delete attribute" +msgstr "Lösche das Attribut wirklich" + + +msgid "Add New Value" +msgstr "Neuen Wert hinzufügen" + + +msgid "The server does not fully support the LDAP protocol." +msgstr "Der Server unterstützt nicht vollständig das LDAP-Protokoll." + + +msgid "Your version of PHP does not correctly perform the query." +msgstr "Die verwendete PHP-Version setzte keine korrekte LDAP-Abfrage ab." + + +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "Oder phpLDAPadmin konnte nicht das Schema für den Server abfragen." + + +msgid "Jump to an objectClass" +msgstr "Gehe zur objectClass" + + +msgid "View the schema description for this objectClass" +msgstr "Zeige die Schemabeschreibung für diese Objektklasse" + + +msgid "Jump to an attribute type" +msgstr "Gehe zum Attribut" + + +msgid "Jump to a matching rule" +msgstr "Gehe zur Treffer Regel" + + +msgid "Schema for server" +msgstr "Schema für Server" + + +msgid "Required Attributes" +msgstr "Notwendige Attribute" + + +msgid "required" +msgstr "notwendig" + + +msgid "Optional Attributes" +msgstr "Optionale Attribute" + + +msgid "Optional Binary Attributes" +msgstr "Optinales Binärattribut" + + +msgid "OID" +msgstr "OID" + + +msgid "Aliases" +msgstr "Pseudonym(e)" + + +msgid "Description" +msgstr "Beschreibung" + + +msgid "no description" +msgstr "Keine Beschreibung" + + +msgid "Name" +msgstr "Name" + + +msgid "Equality" +msgstr "Gleichheit" + + +msgid "This objectClass is obsolete." +msgstr "Diese objectClass ist veraltet" + + +msgid "Inherits from" +msgstr "Abgeleitet von" + + +msgid "Inherited from" +msgstr "abgeleitet von" + + +msgid "Parent to" +msgstr "Knoten von" + + +msgid "Jump to this objectClass definition" +msgstr "Gehe zur objectClass Definition" + + +msgid "Matching Rule OID" +msgstr "Treffer-Regel OID" + + +msgid "Syntax OID" +msgstr "Syntax OID" + + +msgid "not applicable" +msgstr "nicht anwendbar" + + +msgid "not specified" +msgstr "nicht spezifiziert" + + +msgid "character" +msgstr "Zeichen" + + +msgid "Used by objectClasses" +msgstr "Verwendet von den Objektklassen" + + +msgid "Used by Attributes" +msgstr "Verwendet in den Attributen" + + +msgid "Obsolete" +msgstr "Veraltet" + + +msgid "Ordering" +msgstr "Ordnung" + + +msgid "Substring Rule" +msgstr "Teilstring Regel" + + +msgid "Single Valued" +msgstr "Einzelner Wert" + + +msgid "Collective" +msgstr "Sammlung" + + +msgid "User Modification" +msgstr "Benutzer Änderung" + + +msgid "Usage" +msgstr "Verwendung" + + +msgid "Maximum Length" +msgstr "Maximale Grösse" + + +msgid "Attribute Types" +msgstr "Attribut Typen" + + +msgid "Syntaxes" +msgstr "Syntaxe" + + +msgid "ObjectClasses" +msgstr "Objekt Klassen" + + +msgid "Matching Rules" +msgstr "Treffer Regeln" + + +msgid "Could not retrieve schema from" +msgstr "Das Schema konnte nicht abgefragt werden. Betrifft die Einstellung des Servers:" + + +msgid "Type" +msgstr "Typ" + + +msgid "No such schema item: \"%s\"" +msgstr "Kein Schema Eintrag für Element: %s" + + +msgid "Entry %s deleted successfully." +msgstr "Der Eintrag '%s' wurde erfolgreich gelöscht." + + +msgid "You must specify a DN" +msgstr "Ein DN muss angegeben werden." + + +msgid "Could not delete the entry: %s" +msgstr "Konnte den Eintrag nicht löschen: %s" + + +msgid "No such entry: %s" +msgstr "Keinen solchen Eintrag: %s" + + +msgid "Delete %s" +msgstr "Löschen von %s" + + +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "Dies ist ein Root-Eintrag und beinhaltet einen Unterbaum mit %s Einträgen." + -#: ../../htdocs/delete_form.php:48 msgid "view entries" msgstr "Zeige Einträge" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "" +msgid "phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?" +msgstr "phpLDAPadmin kann diesen Eintrag und die %s Untereinträge rekursiv löschen. Unten ist eine Liste der Einträge angegeben die von diesem Löschen betroffen wären. Sollen alle Einträge gelöscht werden?" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "" -#: ../../htdocs/compare_form.php:29 -msgid "with " -msgstr "" +msgid "Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems." +msgstr "Hinweis: Dies ist sehr gefährlich und erfolgt auf eines Risiko. Die Ausführung kann nicht rückgängig gemacht werden. Dies betrifft ebenso Aliase, Referenzen und andere Dinge die zu Problemen führen können." -#~ msgid "equals" -#~ msgstr "gleich" -#~ msgid "contains" -#~ msgstr "enthält" +msgid "Delete all %s objects" +msgstr "Löschen aller \"%s\" Objekte" -#~ msgid "create" -#~ msgstr "Erstellen" -#~ msgid "Create a new entry on" -#~ msgstr "Erzeuge einen neuen Eintrag auf" +msgid "Recursive delete progress" +msgstr "Rekursives Löschen in Arbeit" -#~ msgid "Logged in as: " -#~ msgstr "Angemeldet als: " -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "" -#~ "Kopiere diese Object an eine anderen Ort: ein neuer DN oder einen anderen " -#~ "Server." +msgid "Entry %s and sub-tree deleted successfully." +msgstr "Erfolgreiches Löschen des Eintrages \"%s\" und dessen Unterbaums." -#~ msgid "View" -#~ msgstr "Ansehen" -#~ msgid "Click to view the schema defintion for attribute type '%s'" -#~ msgstr "" -#~ "Klicken sie um die Schemadefinition für den Attributtyp \"%s\" anzuzeigen." +msgid "Failed to delete entry %s" +msgstr "Fehler beim Löschen des Eintrages %s." -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "Alias für" -#~ msgid "Entry %s deleted successfully." -#~ msgstr "Der Eintrag '%s' wurde erfolgreich gelöscht." +msgid "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin configuration." +msgstr "Das Attribut \"%s\" ist in der phpLDAPadmin Konfiguration als nur lesend deklariert." -#~ msgid "" -#~ "Instructions: In order to add these objectClass(es) to this entry, you must " -#~ "specify" -#~ msgstr "Anleitung: Um diese objectClass hinzuzufügen müssen sie" -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "" -#~ "die von dieser objectClass benötigt werden. Sie können dies in diesem " -#~ "Formular machen." - -#~ msgid "Bad server id" -#~ msgstr "Ungültige Server ID" - -#~ msgid "Could not connect to LDAP server." -#~ msgstr "Konnte keine Verbindung zum LDAP Server herstellen." - -#~ msgid "Looking in: " -#~ msgstr "Sehe nach in: " - -#~ msgid "No DN specified in query string!" -#~ msgstr "Kein DN in der Anfrage angegeben" - -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "Info: Sie werden einen \"inappropriate matching\" Fehler erhalten, falls sie " -#~ "nicht" - -#~ msgid "Copy successful! Would you like to " -#~ msgstr "Kopieren erfolgreich! Wollen sie den " - -#~ msgid "view the new entry" -#~ msgstr "neuen Eintrag ansehen" - -#~ msgid "Choose a template" -#~ msgstr "Vorlage wählen" - -#~ msgid "Click here to go to the login form" -#~ msgstr "Klicken sie hier um zur Anmeldeseite zu gelangen" - -#~ msgid "Entries found: " -#~ msgstr "Gefundene Einträge: " - -#~ msgid "Filter performed: " -#~ msgstr "Angewanter Filter: " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "Suche durch phpLDAPadmin ausgeführt in" - -#~ msgid "starts with" -#~ msgstr "beginnt mit" - -#~ msgid "ends with" -#~ msgstr "endet auf" - -#~ msgid "sounds like" -#~ msgstr "klingt wie" - -#~ msgid "" -#~ "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP " -#~ "or perhaps your LDAP server has access control specified that prevents LDAP " -#~ "clients from accessing the RootDSE." -#~ msgstr "Konnte keine LDAP Informationen vom Server empfangen" - -#~ msgid "ChangeLog" -#~ msgstr "Änderungsdatei" - -#~ msgid "Unsafe file name: " -#~ msgstr "Unsicherer Dateiname: " - -#~ msgid "No such file: " -#~ msgstr "Keine Datei unter diesem Namen " - -#~ msgid "" -#~ "You have enabled auto_uid_numbers for %s in your configuration, " -#~ " but you have not specified the " -#~ "auto_uid_number_mechanism. Please correct " -#~ "this problem." -#~ msgstr "" -#~ "\"auto_uid_numbers\" wurde in der Konfiguration (%s) aktiviert, aber der " -#~ "Mechanismus (auto_uid_number_mechanism) nicht. Bitte diese Problem " -#~ "korrigieren." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool\" " -#~ " in your configuration for server %s, but you did not " -#~ "specify the audo_uid_number_uid_pool_dn. Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "Der Mechanismus \"auto_uid_number_mechanism\" ist als \"uidpool\" für den " -#~ "Server (%s) festgelegt, jedoch wurde nicht der " -#~ "\"auto_uid_number_uid_pool_dn\" festgelegt. Bitte korrigieren und dann " -#~ "weiter verfahren." - -#~ msgid "" -#~ "It appears that the uidPool you specified in your configuration (\"%s\") " -#~ " does not exist." -#~ msgstr "" -#~ "Es scheint so, dass der \"uidPool\" - der in der Konfiguration festgelegt " -#~ "ist - nicht vorhanden ist." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"search\" in your " -#~ " configuration for server %s, but you did not " -#~ "specify the \"auto_uid_number_search_base\". " -#~ "Please specify it before proceeding." -#~ msgstr "" -#~ "Der \"auto_uid_number_mechanism\" wurde auf \"search\" in der Konfiguration " -#~ "des Servers (%s) festgelegt, aber es wurde der Wert fü " -#~ "\"auto_uid_number_search_base\" nicht gesetzt. Bitte korrigieren und dann " -#~ "weiter verfahren." - -#~ msgid "" -#~ "You specified an invalid value for auto_uid_number_mechanism (\"%s\") " -#~ " in your configration. Only \"uidpool\" and " -#~ "\"search\" are valid. Please correct this " -#~ "problem." -#~ msgstr "" -#~ "Es wurde ein ungültiger Wert für \"auto_uid_number_mechanism\" (%s) " -#~ "festgelegt. Gültig sind nur die Werte \"uidpool\" und \"search\". Bitte den " -#~ "Fehler korrigieren." - -#~ msgid "" -#~ "Error: You have an error in your config file. The only three allowed values " -#~ " for auth_type in the $servers section are " -#~ "'session', 'cookie', and 'config'. You entered '%s', " -#~ " which is not allowed. " -#~ msgstr "" -#~ "Fehler: Ein Fehler ist in der Konfiguration (config.php) aufgetreten. Die " -#~ "einzigen beiden erlaubten Werte im Konfigurationsteil \"auth_type\" zu einem " -#~ "LDAP-Server ist \"config\" oder \"form\". Eingetragen ist aber \"%s\", was " -#~ "nicht erlaubt ist. " - -#~ msgid "LDAP said: %s" -#~ msgstr "LDAP meldet: %s" - -#~ msgid "Error number: %s (%s)" -#~ msgstr "Fehlernummer: %s (%s)" - -#~ msgid "Description: %s

" -#~ msgstr "Beschreibung: %s" - -#~ msgid "Error number: %s

" -#~ msgstr "Fehlernummer: %s" - -#~ msgid "Description: (no description available)
" -#~ msgstr "Beschreibung: (keine Beschreibung verfügbar)" - -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "" -#~ "Ist das ein phpLDAPadmin Fehler? Wenn dies so ist, dann bitte darüber berichten" - -#~ msgid "Unrecognized error number: " -#~ msgstr "Unbekannte Fehlernummer: " - -#~ msgid "" -#~ "

\t\t\t
You found " -#~ "a non-fatal phpLDAPadmin bug!
Error:%s " -#~ "(%s)
File: %s line " -#~ "%s, caller %s
Versions:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "server:%s
Please check and see if this bug has been reported " -#~ "here.
If it hasnt been reported, you may report this bug by clicking " -#~ "here.

" -#~ msgstr "" -#~ "
Ein nicht fataler " -#~ "Fehler in phpLDAPadmin " -#~ "gefunden!
Fehler:%s " -#~ "(%s)
Datei:%sZeile:%s, " -#~ "aufgerufen von %s
Version:PLA: %s, " -#~ "PHP: %s, SAPI: %s
Web " -#~ "server:%s
Bitte diesen Fehler melden (durch " -#~ "anklicken)..

" - -#~ msgid "" -#~ "Congratulations! You found a bug in phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA " -#~ "Version:%s
PHP " -#~ "Version:%s
PHP " -#~ "SAPI:%s
Web " -#~ "server:%s
\t
\t Please " -#~ "report this bug by clicking below!" -#~ msgstr "" -#~ "
Gratulation, einen " -#~ "Fehler in phpLDAPadmin " -#~ "gefunden!
Fehler:%s " -#~ "(%s)
Datei:%sZeile:%s, " -#~ "aufgerufen von %s
Version:PLA: %s, " -#~ "PHP: %s, SAPI: %s
Web " -#~ "server:%s
Bitte diesen Fehler melden (durch " -#~ "anklicken)..

" - -#~ msgid "Select an LDIF file:" -#~ msgstr "LDIF Datei auswählen" - -#~ msgid "Line Number:" -#~ msgstr "Anzahl Zeilen:" - -#~ msgid "Line:" -#~ msgstr "Zeile:" - -#~ msgid "Optional Binary Attributes" -#~ msgstr "Optinales Binärattribut" - -#~ msgid "Maximum file size: %s" -#~ msgstr "Maximal Dateigröße ist: %s" - -#~ msgid "Back" -#~ msgstr "Zurück" - -#~ msgid "object" -#~ msgstr "Objekt" - -#~ msgid "Delete all" -#~ msgstr "Lösche alle" - -#~ msgid "warning" -#~ msgstr "Warnung" - -#~ msgid "using template" -#~ msgstr "Verwende Vorlage" - -#~ msgid "Redirecting..." -#~ msgstr "Weiterleitung" - -#~ msgid "here" -#~ msgstr "hier" - -#~ msgid "Step 1 of 2: Name and ObjectClass(es)" -#~ msgstr "Schritt 1 von 2: Name und Objektklasse(n)" - -#~ msgid "Step 2 of 2: Specify attributes and values" -#~ msgstr "Schritt 2 von 2: Bestimmen der Attribute und Werte" - -#~ msgid "Relative Distinguished Name" -#~ msgstr "Relativer Distingushed Name" - -#~ msgid "RDN" -#~ msgstr "RDN" - -#~ msgid "(example: cn=MyNewPerson)" -#~ msgstr "(Beispiel: cn=MeineNeuePerson)" - -#~ msgid "Could not bind to the LDAP server." -#~ msgstr "Konnte keine Verbindung zum LDAP-Server herstellen" - -#~ msgid "Successfully logged into server %s" -#~ msgstr "Erfolgreich am Server %s angemeldet" - -#~ msgid "%s bytes" -#~ msgstr "%s Bytes" - -#~ msgid "Searching..." -#~ msgstr "Suche..." - -#~ msgid "Logged out successfully from server %s" -#~ msgstr "Erfolgreich vom Server %s abgemeldet." - -#~ msgid "Authenticate to server %s" -#~ msgstr "Authentifizierung mit Server %s" - -#~ msgid "Warning: This web connection is unencrypted." -#~ msgstr "Achtung: Diese Webverbindung ist unverschlüsselt." +msgid "No attribute name specified." +msgstr "Kein Attributname angegeben." -#~ msgid "User name" -#~ msgstr "Benutzername" -#~ msgid "" -#~ "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do " -#~ "so. An example config file is provided in 'config/config.php.example'" -#~ msgstr "" -#~ "phpLDAPadmin muss konfiguriert werden. Bitte die Datei \"config.php\" " -#~ "erstellen. Ein Beispiel einer \"config.php\" liegt als Datei " -#~ "\"config.php.example\" bei." +msgid "No DN specified" +msgstr "Kein DN angegeben." -#~ msgid "Deletes not allowed in read only mode." -#~ msgstr "Löschen ist im Nur-Lese-Modus nicht erlaubt." -#~ msgid "list" -#~ msgstr "Liste" +msgid "You left the attribute value blank. Please go back and try again." +msgstr "Der Wert des Attributes wurde leergelassen. Bitte zurück gehen und erneut versuchen." + + +msgid "Failed to add the attribute." +msgstr "Fehler beim Hinzufügen des Attributes" + + +msgid "The file you chose is either empty or does not exist. Please go back and try again." +msgstr "Die ausgewählte Datei ist entweder nicht vorhanden oder leer. Bitte zurückgehen und nochmals versuchen." + + +msgid "Security error: The file being uploaded may be malicious." +msgstr "Sicherheitsfehler: Die hochgeladene Datei kann bösartig sein." + + +msgid "Your PHP configuration has disabled file uploads. Please check php.ini before proceeding." +msgstr "Die PHP-Konfiguration (php.ini) gestattet es nicht Dateien hochzuladen. Bitte die php.ini hierzu überprüfen." + + +msgid "The file you uploaded is too large. Please check php.ini, upload_max_size setting" +msgstr "Die hochgeladene Datei ist größer als die maximal erlaubte Datei aus der \"php.ini\". Bitte in der php.ini den Eintrag \"upload_max_size\" überprüfen." + + +msgid "The file you selected was only partially uploaded, likley due to a network error." +msgstr "Die auswählte Datei wurde nur unvollständig hochgeladen." + + +msgid "Maximum file size: %s" +msgstr "Maximal Dateigröße ist: %s" + + +msgid "Modification successful!" +msgstr "Änderung war erfolgreich!" + + +msgid "Since you changed your password, you must now login again with your new password." +msgstr "Da das Passwort geändert wurde müssen Sie sich erneut einloggen." + + +msgid "New Required Attributes" +msgstr "Neue benötigte Attribute" + + +msgid "This action requires you to add" +msgstr "Diese Aktion zwingt sie folgendes hinzuzufügen" + + +msgid "new attributes" +msgstr "neue Attribute" + + +msgid "Instructions: In order to add these objectClass(es) to this entry, you must specify" +msgstr "Anleitung: Um diese objectClass hinzuzufügen müssen sie " + + +msgid "that this objectClass requires. You can do so in this form." +msgstr "die von dieser objectClass benötigt werden. Sie können dies in diesem Formular machen." + + +msgid "Add ObjectClass and Attributes" +msgstr "ObjectClass und Attribute hinzufügen" + + +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "Klicken um einen Eintrag (DN) grafisch auszuwählen." + + +msgid "You cannot perform updates while server is in read-only mode" +msgstr "Sie können keine Aktualisierungen durchführen während der Server sich im 'nur lese'-modus befindet" + + +msgid "Bad server id" +msgstr "Ungültige Server ID" + + +msgid "Not enough information to login to server. Please check your configuration." +msgstr "Nicht genügend Angaben zur Anmeldung am Server. Bitte überprüfen sie ihre Konfiguration" + + +msgid "Could not connect to LDAP server." +msgstr "Konnte keine Verbindung zum LDAP Server herstellen." + + +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "Konnte keine Verbindung zum Server \"%s\" am Port \"%s\" erstellen." + + +msgid "Could not perform ldap_mod_add operation." +msgstr "Kann keine 'ldap_mod_add' Operationen durchführen." + + +msgid "Success" +msgstr "Erfolgreich" + + +msgid "Looking in: " +msgstr "Sehe nach in:" + + +msgid "No DN specified in query string!" +msgstr "Kein DN in der Anfrage angegeben" + + +msgid "Back Up..." +msgstr "Eine Ebene höher..." + + +msgid "no entries" +msgstr "Keine Einträge" + + +msgid "Could not determine base DN" +msgstr "Konnten Basis-DN nicht ermitteln." + + +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "Dies kann mehrere Gründe haben. Die häufigsten sind:" + + +msgid "Yes" +msgstr "Ja" + + +msgid "No" +msgstr "Nein" + + +msgid "Go" +msgstr "Weiter" + + +msgid "Delete" +msgstr "Löschen" + + +msgid "Back" +msgstr "Zurück" + + +msgid "object" +msgstr "Objekt" + + +msgid "Delete all" +msgstr "Lösche alle" + + +msgid "hint" +msgstr "Hinweis" + + +msgid "bug" +msgstr "Programmfehler" + + +msgid "warning" +msgstr "Warnung" + + +msgid "light" +msgstr "light" + + +msgid "Add new" +msgstr "Neu hinzufügen" + + +msgid "value to" +msgstr "Wert auf" + + +msgid "Distinguished Name" +msgstr "Distinguished Name (eindeutiger Name)" + + +msgid "Current list of" +msgstr "Aktuelle Liste von" + + +msgid "values for attribute" +msgstr "Werte des Attributes" + + +msgid "Note: You will get an \"inappropriate matching\" error if you have not setup an EQUALITY rule on your LDAP server for this attribute." +msgstr "Info: Sie werden einen \"inappropriate matching\" Fehler erhalten, falls sie nicht" + + +msgid "Enter the value you would like to add:" +msgstr "Geben sie den Wert ein den sie hinzufügen möchten:" + + +msgid "Note: You may be required to enter new attributes that these objectClass(es) require" +msgstr "Info: Sie werden gegebenenfalles gezwungen sein neue Attribute hinzuzufügen." + + +msgid "Syntax" +msgstr "Syntax" + + +msgid "You left the destination DN blank." +msgstr "Sie haben kein Ziel DN angegeben" + + +msgid "The destination entry (%s) already exists." +msgstr "Der Zieleintrag (%s) existiert bereits." + + +msgid "The destination container (%s) does not exist." +msgstr "Der Zielcontainer (%s) existiert nicht." + + +msgid "The source and destination DN are the same." +msgstr "Ursprung DN und Ziel DN sind identisch" + + +msgid "Copying " +msgstr "Kopieren" + + +msgid "Recursive copy progress" +msgstr "Rekursives Kopieren im Gange" + + +msgid "Building snapshot of tree to copy... " +msgstr "Erzeuge Speicherauszug des zu kopierenden Verzeichnisses" + + +msgid "Copy successful! Would you like to " +msgstr "Kopieren erfolgreich! Wollen sie den" + + +msgid "view the new entry" +msgstr "neuen Eintrag ansehen" + + +msgid "Failed to copy DN: " +msgstr "Kopieren des DN fehlgeschlagen: " + + +msgid "Template" +msgstr "Vorlage" + + +msgid "using template" +msgstr "Verwende Vorlage" + + +msgid "Go to %s" +msgstr "Gehe zu %s" + + +msgid "This is a structural ObjectClass and cannot be removed." +msgstr "Dies ist eine strukturelle Objektklasse und kann nicht entfernt werden." + + +msgid "structural" +msgstr "Strukturell" + + +msgid "Copy " +msgstr "Kopiere" + + +msgid "to a new object" +msgstr "in ein neues Objekt" + + +msgid "Destination DN" +msgstr "Ziel DN" + + +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "Der komplette DN des Eintrages der beim Kopieren erzeugt wird." + + +msgid "Destination Server" +msgstr "Zielserver" + + +msgid "Hint: Copying between different servers only works if there are no schema violations" +msgstr "Info: Kopieren zwischen unterschiedlichen Servern funktioniert nur wenn keine Unvereinbarkeiten im Schema auftreten" + + +msgid "Recursively copy all children of this object as well." +msgstr "Rekursiv kopiert auch alle Unterobjekte" + + +msgid "Recursive copy" +msgstr "Rekursives kopieren" + + +msgid "Filter" +msgstr "Filter" + + +msgid "When performing a recursive copy, only copy those entries which match this filter" +msgstr "Bei der Ausfürung des rekursiven Kopierens werden nur die Einträge verwendet, die mit dem Filter übereinstimmen" + + +msgid "You left the value blank for required attribute (%s)." +msgstr "Fehler, sie haben einen Wert für ein benötigtes Attribut frei gelassen." + + +msgid "Redirecting..." +msgstr "Weiterleitung" + + +msgid "here" +msgstr "hier" + + +msgid "Could not add the object to the LDAP server." +msgstr "Konnte das Objekt dem LDAP-Server nicht hinzufügen." + + +msgid "Create Object" +msgstr "Erzeuge einen neuen Eintag" + + +msgid "Choose a template" +msgstr "Vorlage wählen" + + +msgid "Select a template for the creation process" +msgstr "Wählen sie eine Vorlage für das Objekt" + + +msgid "You left the RDN field blank." +msgstr "Das RDN Feld wurde leer gelassen." + + +msgid "The container you specified (%s) does not exist. Please try again." +msgstr "Der angegenben Eintrag (%s) ist nicht vorhanden. Bitte erneut versuchen." + + +msgid "You did not select any ObjectClasses for this object. Please go back and do so." +msgstr "Es wurde kein ObjectClasses für diesen Eintrag ausgewählt. Bitte zurückgehen und korrigieren" + + +msgid "Hint: You must choose exactly one structural objectClass (shown in bold above)" +msgstr "Hinweis: Es muss mindestens ein Strukturelle ObjectClass ausgewählt sein." + + +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "Schritt 1 von 2: Name und Objektklasse(n)" + + +msgid "Step 2 of 2: Specify attributes and values" +msgstr "Schritt 2 von 2: Bestimmen der Attribute und Werte" + + +msgid "Relative Distinguished Name" +msgstr "Relativer Distingushed Name" + + +msgid "RDN" +msgstr "RDN" + + +msgid "(example: cn=MyNewPerson)" +msgstr "(Beispiel: cn=MeineNeuePerson)" + + +msgid "Container" +msgstr "Behälter" + + +msgid "You have not logged into the selected server yet, so you cannot perform searches on it." +msgstr "Sie haben sich am ausgewählten Server nicht angemeldet. Sie können keine Suche durchführen." + + +msgid "Click here to go to the login form" +msgstr "Klicken sie hier um zur Anmeldeseite zu gelangen" + + +msgid "Unrecognized criteria option: " +msgstr "Unbekannte Option" + + +msgid "If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting." +msgstr "Falls eigene Auswahlkriterien hinzugefügt werden sollen, muss 'search.php' editiert werden" + + +msgid "Entries found: " +msgstr "Gefundene Einträge: " + + +msgid "Filter performed: " +msgstr "Angewanter Filter: " + + +msgid "Search performed by phpLDAPadmin in" +msgstr "Suche durch phpLDAPadmin ausgeführt in" + + +msgid "seconds" +msgstr "Sekunden" + + +msgid "The scope in which to search" +msgstr "Bereich der durchsucht wird." + + +msgid "Sub (entire subtree)" +msgstr "Sub (Suchbasis und alle Unterverzeichnisebenen)" + + +msgid "One (one level beneath base)" +msgstr "One (Suchbasis und eine Unterverzeichnisebene)" + + +msgid "Base (base dn only)" +msgstr "Base (Nur Suchbasis)" + + +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "Standard LDAP Suchfilter. Bsp.: (&(sn=Smith)(givenname=David))" + + +msgid "Search Filter" +msgstr "Suchfilter" + + +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "Kommaseparierte Liste der anzuzeigenden Attribute." + + +msgid "starts with" +msgstr "beginnt mit" + + +msgid "ends with" +msgstr "endet auf" + + +msgid "sounds like" +msgstr "klingt wie" + + +msgid "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE." +msgstr "Konnte keine LDAP Informationen vom Server empfangen" + + +msgid "Server info for: " +msgstr "Serverinformationen für: " + + +msgid "Server reports the following information about itself" +msgstr "Der Server meldete die folgenden Informationen über sich" + + +msgid "This server has nothing to report." +msgstr "Der Server hat keine Informationen gemeldet" + + +msgid "update_array is malformed. This might be a phpLDAPadmin bug. Please report it." +msgstr "Das \"update_array\" wird falsch dargestellt. Dies könnte ein phpLDAPadmin Fehler sein. Bitte Berichten sie uns davon." + + +msgid "Could not perform ldap_modify operation." +msgstr "Konnte die 'ldap_modify' Operation nicht ausführen." + + +msgid "Do you want to make these changes?" +msgstr "Wollen sie diese Änderungen übernehmen?" + + +msgid "Attribute" +msgstr "Attribute" + + +msgid "Old Value" +msgstr "Alter Wert" + + +msgid "New Value" +msgstr "Neuer Wert" + + +msgid "[attribute deleted]" +msgstr "[Wert gelöscht]" + + +msgid "Commit" +msgstr "Anwenden" + + +msgid "Cancel" +msgstr "Abbruch" + + +msgid "You made no changes" +msgstr "Sie haben keine Änderungen vorgenommen." + + +msgid "Use the menu to the left to navigate" +msgstr "Benutzen sie das Menu auf der linken Seite zur Navigation." + + +msgid "Credits" +msgstr "Vorspann" + + +msgid "ChangeLog" +msgstr "Änderungsdatei" + + +msgid "Donate" +msgstr "Spende" + + +msgid "Purge caches" +msgstr "Cache bereinigen" + + +msgid "No cache to purge." +msgstr "Kein Cache zu bereinigen" + + +msgid "Purged %s bytes of cache." +msgstr "Es wurden %s Bytes aus dem Cache bereinigt." + + +msgid "Unsafe file name: " +msgstr "Unsicherer Dateiname:" + + +msgid "No such file: " +msgstr "Keine Datei unter diesem Namen" + + +msgid "You have enabled auto_uid_numbers for %s in your configuration," +" but you have not specified the auto_uid_number_mechanism. Please correct" +" this problem." +msgstr "\"auto_uid_numbers\" wurde in der Konfiguration (%s) aktiviert, aber der Mechanismus (auto_uid_number_mechanism) nicht. Bitte diese Problem korrigieren." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"uidpool\"" +" in your configuration for server %s, but you did not specify the" +" audo_uid_number_uid_pool_dn. Please specify it before proceeding." +msgstr "Der Mechanismus \"auto_uid_number_mechanism\" ist als \"uidpool\" für den Server (%s) festgelegt, jedoch wurde nicht der \"auto_uid_number_uid_pool_dn\" festgelegt. Bitte korrigieren und dann weiter verfahren." + + +msgid "It appears that the uidPool you specified in your configuration (\"%s\")" +" does not exist." +msgstr "Es scheint so, dass der \"uidPool\" - der in der Konfiguration festgelegt ist - nicht vorhanden ist." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"search\" in your" +" configuration for server %s, but you did not specify the" +" \"auto_uid_number_search_base\". Please specify it before proceeding." +msgstr "Der \"auto_uid_number_mechanism\" wurde auf \"search\" in der Konfiguration des Servers (%s) festgelegt, aber es wurde der Wert fü \"auto_uid_number_search_base\" nicht gesetzt. Bitte korrigieren und dann weiter verfahren." + + +msgid "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s" +msgstr "Die phpLDAPadmin Konfiguration für den Server \"%s\" gibt eine ungültige Suchbasis für \"auto_uid_search_base\" an." + + +msgid "Unable to bind to %s with your with auto_uid credentials. Please check your configuration file." +msgstr "Konnte nicht mit \"%s\" verbinden" + + +msgid "You specified an invalid value for auto_uid_number_mechanism (\"%s\")" +" in your configration. Only \"uidpool\" and \"search\" are valid." +" Please correct this problem." +msgstr "Es wurde ein ungültiger Wert für \"auto_uid_number_mechanism\" (%s) festgelegt. Gültig sind nur die Werte \"uidpool\" und \"search\". Bitte den Fehler korrigieren. " + + +msgid "Error: You have an error in your config file. The only three allowed values" +" for auth_type in the $servers section are 'session', 'cookie', and 'config'. You entered '%s'," +" which is not allowed. " +msgstr "Fehler: Ein Fehler ist in der Konfiguration (config.php) aufgetreten. Die einzigen beiden erlaubten Werte im Konfigurationsteil \"auth_type\" zu einem LDAP-Server ist \"config\" oder \"form\". Eingetragen ist aber \"%s\", was nicht erlaubt ist." + + +msgid "Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file." +msgstr "Es konnten nicht an \"%s\" mit dem Berechtigungsnachweis von \"unique_attrs\" verbunden werden. Bitte die Konfigurationdatei (config.php) überprüfen." + + +msgid "Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry." +msgstr "Der Versuch von \"%s\" (%s) an \"%s%\" ist nicht erlaubt. Das Attibut/Wert gehört zu einem anderen Eintrag. Vielleicht möchten Sie nach dem Wert suchen?" + + +msgid "Your PHP install does not support TLS." +msgstr "Die verwendete PHP-Version unterstützt kein TLS (verschlüsselte Verbindung)." + + +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "TLS konnte nicht gestartet werden. Bitte die LDAP-Server-Konfiguration überprüfen." + + +msgid "Could not bind anonymously to server." +msgstr "Konnte keine Anonymous Anmeldung zum Server herstellen." + + +msgid "Could not bind to the LDAP server." +msgstr "Konnte keine Verbindung zum LDAP-Server herstellen" + + +msgid "Anonymous Bind" +msgstr "Anonymous anmelden" + + +msgid "Bad username or password. Please try again." +msgstr "Falscher Benutzername oder Passwort. Bitte erneut versuchen." + + +msgid "Successfully logged into server %s" +msgstr "Erfolgreich am Server %s angemeldet" + + +msgid "Could not set cookie." +msgstr "Konnte kein 'Cookie' setzten." + + +msgid "LDAP said: %s" +msgstr "LDAP meldet: %s" + + +msgid "Error" +msgstr "Fehler" + + +msgid "browse" +msgstr "Überfliegen" + + +msgid "Delete Photo" +msgstr "Lösche Foto" + + +msgid "Your system crypt library does not support blowfish encryption." +msgstr "Die verwendete PHP-Version unterstützt keine Blowfish Verschlüsselung." + + +msgid "Your system crypt library does not support md5crypt encryption." +msgstr "Die eingesetzte PHP-Version unterstützt keine MD5-Verschlüsselung." + + +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "Die verwendete PHP-Version unterstützt nicht die Funktion mhash(), daher kann kein SHA Hash verwendet werden." + + +msgid "jpegPhoto contains errors
" +msgstr "Die Bilddatei enthält Fehler" + + +msgid "Error number: %s (%s)" +msgstr "Fehlernummer: %s (%s)" + + +msgid "Description: %s

" +msgstr "Beschreibung: %s" + + +msgid "Error number: %s

" +msgstr "Fehlernummer: %s" + + +msgid "Description: (no description available)
" +msgstr "Beschreibung: (keine Beschreibung verfügbar)" + + +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "Ist das ein phpLDAPadmin Fehler? Wenn dies so ist, dann bitte darüber berichten" + + +msgid "Unrecognized error number: " +msgstr "Unbekannte Fehlernummer:" + + +msgid "

" +" " +" " +" " +"
" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
Please check and see if this bug has been reported here.
If it hasnt been reported, you may report this bug by clicking here.

" +msgstr "
Ein nicht fataler Fehler in phpLDAPadmin gefunden!
Fehler:%s (%s)
Datei:%sZeile:%s, aufgerufen von %s
Version:PLA: %s, PHP: %s, SAPI: %s
Web server:%s
Bitte diesen Fehler melden (durch anklicken)..

" + + +msgid "Congratulations! You found a bug in phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Please report this bug by clicking below!" +msgstr "
Gratulation, einen Fehler in phpLDAPadmin gefunden!
Fehler:%s (%s)
Datei:%sZeile:%s, aufgerufen von %s
Version:PLA: %s, PHP: %s, SAPI: %s
Web server:%s
Bitte diesen Fehler melden (durch anklicken)..

" + + +msgid "Import LDIF File" +msgstr "Importiere LDIF Datei" + + +msgid "Select an LDIF file:" +msgstr "LDIF Datei auswählen" + + +msgid "Don't stop on errors" +msgstr "Bei einem Fehler nicht unterbrechen sondern weitermachen." + + +msgid "Adding..." +msgstr "Hinzufügen..." + + +msgid "Deleting..." +msgstr "Entfernen..." + + +msgid "Renaming..." +msgstr "Umbenennen..." + + +msgid "Modifying..." +msgstr "Abändern..." + + +msgid "No version found. Assuming 1." +msgstr "Keine Version gefunden. Gehe von der Version 1 aus." + + +msgid "A valid dn line is required." +msgstr "Eine gültige DN Zeile wird benötigt." + + +msgid "Missing uploaded file." +msgstr "Hochgeladene Datei fehlt." + + +msgid "Uploaded LDIF file is empty." +msgstr "Die hochgeladene LDIF-Datei ist leer." + + +msgid "empty" +msgstr "leer" + + +msgid "File" +msgstr "Datei" + + +msgid "%s bytes" +msgstr "%s Bytes" + + +msgid "Failed" +msgstr "fehlgeschlagen" + + +msgid "LDIF Parse Error" +msgstr "LDIF Pars Fehler" + + +msgid "Could not add object:" +msgstr "Konnte das Objekt nicht hinzufügen:" + + +msgid "Could not rename object:" +msgstr "Konnte das Objekt nicht umbenennen:" + + +msgid "Could not delete object:" +msgstr "Konnte das Objekt nicht entfernen:" + + +msgid "Could not modify object:" +msgstr "Konnte das Objekt nicht abändern:" + + +msgid "Line Number:" +msgstr "Anzahl Zeilen:" + + +msgid "Line:" +msgstr "Zeile:" + + +msgid "Are you sure you want to permanently delete this object?" +msgstr "Sind Sie sicher das Sie dauerhaft den Eintrag löschen wollen?" + + +msgid "Permanently delete all children also?" +msgstr "Lösche alles und auch die Untereinträge?" + + +msgid "List of entries to be deleted:" +msgstr "List der Einträge die gelöscht werden:" + + +msgid "DN" +msgstr "DN" + + +msgid "Export format" +msgstr "Export Format" + + +msgid "Line ends" +msgstr "Zeilenende" + + +msgid "You must choose an export format." +msgstr "Bitte ein Exportformat auswählen" + + +msgid "Invalid export format" +msgstr "Unglültiges Export-Format" + + +msgid "No available exporter found." +msgstr "Keinen gültigen Exporter gefunden." + + +msgid "Encountered an error while performing search." +msgstr "Ein Fehler trat während des Suchvorgangs auf" + + +msgid "Showing results %s through %s." +msgstr "Zeige die Ergebnisse von %s bis %s." + + +msgid "Searching..." +msgstr "Suche..." + + +msgid "Notice, search size limit exceeded." +msgstr "Hinweis, das Limit der Suchtreffer wurde überschritten." + + +msgid "Entry" +msgstr "Eintrag" + + +msgid "LDIF Export for: %s" +msgstr "LDIF Export von: %s" + + +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "Erstellt von phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) am %s" + + +msgid "Total Entries" +msgstr "Anzahl der Eintraege" + + +msgid "DSLM Export for: %s" +msgstr "DSLM Export von:" + + +msgid "Include system attributes" +msgstr "Einbinden von System-Attributen" + + +msgid "You left the password blank." +msgstr "Das Passwort wurde leer gelassen" + + +msgid "No one is logged in to that server." +msgstr "Niemand ist an diesem Server angemeldet" + + +msgid "Could not logout." +msgstr "Konnte nicht abgemeldet werden" + + +msgid "Unknown auth_type: %s" +msgstr "Unbekannter Authentifizierungsart: %s" + + +msgid "Logged out successfully from server %s" +msgstr "Erfolgreich vom Server %s abgemeldet." + + +msgid "Authenticate to server %s" +msgstr "Authentifizierung mit Server %s" + + +msgid "Warning: This web connection is unencrypted." +msgstr "Achtung: Diese Webverbindung ist unverschlüsselt." + + +msgid "You are not using 'https'. Web browser will transmit login information in clear text." +msgstr "Es wird keine verschlüsselte Verbindung ('https') verwendet. Der Webbrowser übermittelt die Anmeldeinformationen im Klartext." + + +msgid "Login DN" +msgstr "Anmelde DN" + + +msgid "User name" +msgstr "Benutzername" + + +msgid "Password" +msgstr "Passwort" + + +msgid "Authenticate" +msgstr "Authentifizierung" + + +msgid "Entry Chooser" +msgstr "Einträge auswählen" + + +msgid "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do so. An example config file is provided in 'config/config.php.example'" +msgstr "phpLDAPadmin muss konfiguriert werden. Bitte die Datei \"config.php\" erstellen. Ein Beispiel einer \"config.php\" liegt als Datei \"config.php.example\" bei." + + +msgid "Deletes not allowed in read only mode." +msgstr "Löschen ist im Nur-Lese-Modus nicht erlaubt." + + +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "Fehler im Aufruf von \"mass_delete.php\". \"mass_delete\" ist in den POST-Variablen nicht vorhanden." + + +msgid "mass_delete POST var is not an array." +msgstr "Die POST-Variable \"mass_delete\" ist kein Array." + + +msgid "Mass deletion is not enabled. Please enable it in config.php before proceeding." +msgstr "\"Viel-Löschen\" ist nicht aktiviert. Bitte in der der \"config.php\" aktivieren vor dem Weitermachen." + + +msgid "Mass Deleting" +msgstr "Viel-Löschen" + + +msgid "Deletion progress on server \"%s\"" +msgstr "Löschprozess auf Server \"%s\"" + + +msgid "Malformed mass_delete array." +msgstr "Das Array \"mass_delete\" ist falsch dargestellt." + + +msgid "You did not select any entries to delete." +msgstr "Es wurde kein zu löschender Eintrag ausgewählt." + + +msgid "Deleting %s" +msgstr "Lösche \"%s\"" + + +msgid "%s of %s entries failed to be deleted." +msgstr "%s von %s Einträgen konnten nicht gelöscht werden." + + +msgid "All entries deleted successfully." +msgstr "Alle Einträge wurden erfolgreich gelöscht." + + +msgid "Confirm mass delete of %s entries on server %s" +msgstr "Bitte das Löschen von %s Einträgen auf dem Server %s bestätigen" + + +msgid "Yes, delete!" +msgstr "Ja, Löschen!" + + +msgid "You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)" +msgstr "Das Umbenennen von einem Eintrag mit Untereinträgen ist nicht Möglich. Es ist nur auf den Untersten Einträgen gestattet." + + +msgid "You did not change the RDN" +msgstr "Der RDN wurde nicht verändert" + + +msgid "Invalid RDN value" +msgstr "Ungültiger RDN Wert" + + +msgid "Could not rename the entry" +msgstr "Der Eintrag konnte nicht umbenannt werden" -#~ msgid "table" -#~ msgstr "Tabelle" -#~ msgid "" -#~ "Your config.php specifies an invalid value for $default_search_display: %s. " -#~ "Please fix it" -#~ msgstr "" -#~ "Die config.php gibt einen falsche Wert für $default_search_display: %s vor. " -#~ "Bitte in der Konfiguration korrigieren." diff --git a/locale/es_ES/LC_MESSAGES/messages.mo b/locale/es_ES/LC_MESSAGES/messages.mo index e8205d630151e34ccc317f47d27bf7801d60a50b..c93aa9991478fb59cc4ce882e1775937922a6281 100644 GIT binary patch literal 46157 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

?Q@c*2uUbzh9Y*lL`(B5;qZZw3It7eyxB%^>Ut* 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 literal 48515 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 diff --git a/locale/es_ES/LC_MESSAGES/messages.po b/locale/es_ES/LC_MESSAGES/messages.po index 0dfa32c..864b57b 100644 --- a/locale/es_ES/LC_MESSAGES/messages.po +++ b/locale/es_ES/LC_MESSAGES/messages.po @@ -1,3252 +1,2035 @@ # : $ + + msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2004-01-14 17:45+0200\n" -"PO-Revision-Date: 2009-02-05 23:25+0000\n" -"Last-Translator: DiegoJ \n" "Language-Team: phpLDAPadmin \n" +"Last-Translator: Miguelanxo Otero Salgueiro \n" +"POT-Creation-Date: 2005-11-29 17:45+0100\n" +"PO-Revision-Date: 2005-11-29 18:22+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-03-20 08:04+0000\n" -"X-Generator: Launchpad (build Unknown)\n" -#: ../../htdocs/mass_delete.php:86 -#, php-format -msgid "%s of %s entries failed to be deleted." -msgstr "No han podido borrarse %s de %s objetos." -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "(" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../lib/HTMLTree.php:486 -msgid "(Session timed out. Automatically logged out.)" -msgstr "(Tiempo de sesión se agotó.Automaticamente se cierra sesión.)" -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr ")" - -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" -msgstr ":" - -#: ../../lib/search_form_advanced.php:103 -msgid "A list of attributes to display in the results (comma-separated)" -msgstr "" -"Lista de atributos para mostrar en los resultados (separados por comas)" - -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "Una consulta en el uidpool_dn devolvió un uidNumber válido." - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 -msgid "A random password was generated for you" -msgstr "Una clave aleatoria fue generado para ud." - -#: ../../lib/ldif_functions.php:532 -msgid "A valid deleteoldrdn attribute should be specified" -msgstr "Debe ser especificado un valor válido para deleteoldrdn" - -#: ../../lib/ldif_functions.php:243 -msgid "A valid dn line is required." -msgstr "Se requiere un dn válido." - -#: ../../lib/ldif_functions.php:538 -msgid "A valid newrdn attribute should be specified" -msgstr "Debe especificarse un atributo newrdn válido" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 -msgid "Add" -msgstr "Agregar" - -#: ../../htdocs/add_value_form.php:182 -msgid "Add New Value" -msgstr "Agregar nuevo valor" - -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 -msgid "Add ObjectClass and Attributes" -msgstr "Agregar ObjectClass y Atributos" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "Agregar todos" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 -#, php-format -msgid "Add an additional value to attribute '%s'" -msgstr "Agregue un valor adicional al atributo '%s'" - -#: ../../htdocs/add_value_form.php:93 -msgid "Add new" -msgstr "Añadir nuevo" - -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 -msgid "Add new ObjectClass" -msgstr "Añadir ObjectClass" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 -msgid "Add new attribute" -msgstr "Agregar nuevo atributo" - -#: ../../htdocs/add_attr_form.php:114 -msgid "Add new binary attribute" -msgstr "Agregar nuevo atributo binario" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "Agregar seleccionado" - -#: ../../htdocs/ldif_import.php:62 -msgid "Adding..." -msgstr "Añadiendo..." - -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 -msgid "Advanced Search Form" -msgstr "Formulario de búsqueda avanzada" - -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "Alias para" - -#: ../../htdocs/schema.php:110 -msgid "Aliases" -msgstr "Alias" - -#: ../../htdocs/mass_delete.php:88 -msgid "All entries deleted successfully." -msgstr "Todos los objetos han sido borrados existosamente." - -#: ../../lib/EntryWriter1.php:825 -#, php-format -msgid "An attribute (%s) was modified and is highlighted below." -msgstr "" -"Se ha modificado algún atributo (%s) que se encuentra destacado más abajo." - -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "Una entrada debería tener un objetoClass estructural" - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "Anónimo" - -#: ../../htdocs/login.php:164 -msgid "Anonymous Bind" -msgstr "Conexión anónima" - -#: ../../htdocs/delete_form.php:102 -msgid "Are you sure you want to permanently delete this object?" -msgstr "¿Está seguro de querer borrar este objeto definitivamente?" - -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 -msgid "Attribute" -msgstr "Atributo" - -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "Tipos de atributo" - -#: ../../lib/ldif_functions.php:455 -msgid "Attribute is not valid" -msgstr "El Atributo no es válido" - -#: ../../lib/ldif_functions.php:375 -msgid "Attribute not well formed" -msgstr "El atributo no está bien construido" - -#: ../../htdocs/login_form.php:63 -msgid "Authenticate" -msgstr "Entrar" - -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "Autentificar al servidor" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "Miembros Disponibles" - -#: ../../htdocs/entry_chooser.php:65 -msgid "Back Up..." -msgstr "Volver" - -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 -msgid "Bad username or password. Please try again." -msgstr "" -"Nombre de usuario o contraseña incorrectos. Por favor, inténtelo de nuevo." - -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 -msgid "Base (base dn only)" -msgstr "Base (sólo la base)" - -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 -msgid "Base DN" -msgstr "DN base" - -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 -msgid "Binary value" -msgstr "Valor binario" - -#: ../../htdocs/copy.php:61 -msgid "Building snapshot of tree to copy... " -msgstr "Creando imagen del árbol a copiar... " - -#: ../../lib/export_functions.php:38 -msgid "CSV (Spreadsheet)" -msgstr "CSV (Hoja de cálculo)" - -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "Llamado a una clase que no puede ser encontrada" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 -msgid "Cancel" -msgstr "Cancelar" - -#: ../../htdocs/compare.php:343 -msgid "Check password" -msgstr "Revisar clave" - -#: ../../lib/EntryWriter1.php:2427 -msgid "Check password..." -msgstr "Compruebe la contraseña..." - -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "Revisando Claves" - -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "Hijos" - -#: ../../lib/functions.php:3223 -msgid "Click to popup a dialog to select a date graphically" -msgstr "" -"Clickee para que aparezca un diálogo para seleccionar una fecha gráficamente" - -#: ../../lib/functions.php:2239 -msgid "Click to popup a dialog to select an entry (DN) graphically" -msgstr "" -"Haga click en el diálogo emergente para seleccionar un DN de forma gráfica" - -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 -#, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "Haga click para ver el esquema del atributo de tipo '%s'" - -#: ../../htdocs/schema.php:106 -msgid "Collective" -msgstr "Colectivo" - -#: ../../htdocs/update_confirm.php:303 -msgid "Commit" -msgstr "Cometer" - -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 -msgid "Compare" -msgstr "Comparar" - -#: ../../htdocs/compare_form.php:21 -msgid "Compare another DN with" -msgstr "Comparar otro DN con" - -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 -msgid "Compare this DN with another" -msgstr "Comparar este DN con otro" - -#: ../../lib/EntryWriter1.php:776 -msgid "Compare with another entry" -msgstr "Comparar con otra entrada" - -#: ../../htdocs/compare.php:42 -msgid "Comparing the following DNs" -msgstr "Comparando los siguientes DNs" - -#: ../../htdocs/export_form.php:84 -msgid "Compress" -msgstr "Comprimir" - -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "La configuración del cache está rancia o añeja" - -#: ../../htdocs/mass_delete.php:92 -#, php-format -msgid "Confirm mass delete of %s entries on server %s" -msgstr "Confirmar borrado masivo de %s objetos en el servidor %s" - -#: ../../lib/EntryWriter1.php:327 -msgid "Container" -msgstr "Contenedor" - -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "Contenedor y ObjectClass(es)" - -#: ../../lib/ldif_functions.php:525 -msgid "Container is null" -msgstr "Contenedor es nulo" - -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 -msgid "Copy" -msgstr "Copiar" - -#: ../../htdocs/copy_form.php:96 -msgid "Copy " -msgstr "Copiar " - -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "Copiar Entrada" - -#: ../../lib/EntryWriter1.php:741 -msgid "Copy or move this entry" -msgstr "Copiar este objeto" - -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "Copiado logrado" - -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "" -"Copiar este objeto en otra localización, en un nuevo DN, o en otro servidor" - -#: ../../htdocs/copy.php:57 -msgid "Copying " -msgstr "Copiando " - -#: ../../htdocs/ldif_import.php:70 -msgid "Could not add object:" -msgstr "No se ha podido añadir objeto:" - -#: ../../htdocs/create.php:133 -msgid "Could not add the object to the LDAP server." -msgstr "No se ha podido añadir el objeto al servidor LDAP." - -#: ../../htdocs/login.php:137 -msgid "Could not bind anonymously to server." -msgstr "No se ha podido conectar con el servidor de forma anónima." - -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "No se puede conectar al servidor LDAP (%s)" - -#: ../../lib/server_functions.php:347 -#, php-format -msgid "Could not connect to \"%s\" on port \"%s\"" -msgstr "No se ha podido conectar con \"%s\" en el puerto \"%s\"" - -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "No se puede conectar al servidor LDAP" - -#: ../../htdocs/ldif_import.php:71 -msgid "Could not delete object:" -msgstr "No se ha podido borrar el objeto:" - -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 -#, php-format -msgid "Could not delete the entry: %s" -msgstr "No se ha podido borrar el objeto %s" - -#: ../../htdocs/entry_chooser.php:101 -msgid "Could not determine base DN" -msgstr "No se puede determinar el DN base" - -#: ../../lib/HTMLTree.php:82 -msgid "Could not determine the root of your LDAP tree." -msgstr "No se ha podido determinar la raíz de su árbol LDAP." - -#: ../../lib/functions.php:1849 -#, php-format -msgid "Could not fetch jpeg data from LDAP server for attribute %s." -msgstr "" -"No puede rescatarse la data jpeg del servidor LDAP para el atributo %s" - -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 -msgid "Could not logout." -msgstr "No se ha podido desconectar." - -#: ../../htdocs/ldif_import.php:74 -msgid "Could not modify object:" -msgstr "No se ha podido modificar el objeto:" - -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 -msgid "Could not perform ldap_mod_add operation." -msgstr "No se ha podido realizar la operación \"ldap_mod_add\"." - -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 -msgid "Could not perform ldap_modify operation." -msgstr "No se ha podido realizar la operación \"ldap_modify\"." - -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 -msgid "Could not rename object:" -msgstr "No se ha podido renombrar el objeto:" - -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 -msgid "Could not rename the entry" -msgstr "No se ha podido renombrar el objeto" - -#: ../../htdocs/schema.php:31 -msgid "Could not retrieve schema from" -msgstr "No se ha podido obtener el esquema de" - -#: ../../htdocs/login.php:152 -msgid "Could not set cookie." -msgstr "No se ha podido guardar la cookie." - -#: ../../lib/server_functions.php:265 -msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "" -"No se ha podido iniciar TLS. Por favor, revise su configuración LDAP." - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "" -"No se puede escribir en the $jpeg_temp_dir directorio %s. Por favor " -"verifique que su servidor web pueda escribir los archivos ahí." - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "Crear" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "Crear entrada" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "Crear objeto" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "Crear un objeto hijo" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "Crear nuevo objeto en" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "Crear otra entrada" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "¿Crearlo?" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "Crear nuevo objeto" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "Creación exitosa" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "Creditos" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "Lista actual de" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "Cortar" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "DN" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "DN no disponible" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "Exportación DSLM de: %s" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "Predeterminado" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "Borrar" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "Borrar %s" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "Borrar entradas seleccionadas" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "Borrar DN" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "Borrar foto" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "Borrar después de copiar (mover)" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "Borrar los %s objetos" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "Borrar foto" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "Borrar este objeto" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "Borrando" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "Borrando %s" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "Borrando..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "Borrado en progreso en el servidor \"%s\"" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "Descripción" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "DN destino" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "Servidor destino" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "Servidor destino es READ-ONLY" - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "Mostrar la entrada recientemente creada" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "Nombre distinguido" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "Desea realmente borrar %s %s %s" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "¿Quiere realizar estos cambios?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "Documentación" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "Ignorar errores" - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "Donar" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "Se ha encontrado un error al realizar la búsqueda." - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "Introduzca el valor a añadir:" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "Entradas encontradas" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "Objeto" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "Objeto %s y su subárbol borrado correctamente." - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "Selector de objetos" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "Entrada creada" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "Igualdad" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "Error" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "" -"Error al llamar a \"mass_delete.php\". Falta la variable POST " -"\"mass_delete\"." - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "Código de error" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "Número de error" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" -"Error: Ud. posee un error en su archivo de configuración. Los únicos tres " -"valores permitidos para auth_type en la sección $servers son 'session', " -"'cookie' y 'config'. Ud. ingresó '%s', que no está permitido." - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "Exportar" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "Exportar entradas" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "Formato de exportación" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "Exportar subárbol" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "Falló" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "Error al añadir atributo." - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "Error al copiar el DN: " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "Error al borrar el objeto %s" - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "Fichero" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "Filtro" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "Filtro aplicado" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "Forzar a MAY por configuración" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "Formato" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "Función" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "Generado por phpLDAPadmin el %s" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "Error genérico" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "Ir" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "Volver atrás" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "Ir a" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "Ir a %s" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "Miembros de Grupo" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "Ayuda" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "Ocultar" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "Ocultar atributos internos" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "Sugerencia" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "" -"Nota: Sólo se puede copiar entre servidores diferentes cuando no hay " -"violaciones de esquema" - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "" -"Nota: para borrar un atributo, borre su atributo y haga click en guardar." - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "Nota: Para ver el esquema de un atributo, haga click en su nombre." - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "Nota: Debe escoger al menos una clase de objeto estructural" - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "Inicio" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please report it." -msgstr "Si es así, por favor reportelo." - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "" -"Si quiere puede añadir su propios criterios a la lista. Asegúrese de editar " -"search.php para manejarlos. Saliendo..." - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "Importar fichero LDIF" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "Importar desde un fichero LDIF" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" -"Para agregar este(os) objectClass a esta entrada, ud. debe especificar" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "Por inactividad se le desconectará en %s" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "Incluir atributos de sistema" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "Versión incorrecta de PHP" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "Heredado de" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "Hereda de" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "Instrucciones" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "Permisos de acceso insuficientes" - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "Valor RDN no válido" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "Formato de exportación no válido" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "Es esto un bug de phpLDAPadmin ?" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "" -"Parece que el servidor LDAP ha sido configurado para no revelar su raíz." - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" -"Parece que sasl_authz_id_regex \"%s\".\" contiene una expresión regular PCRE " -"inválida." - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "Ir a la regla de coincidencia" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "Ir al tipo de atributo" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "Ir a la clase de objeto" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "Ir a la definición de esta clase de objeto" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "LDAP dijo" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "Exportación LDIF de: %s" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "Error al parsear LDIF" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "Importar texto LDIF" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "Línea" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "Número de línea" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "Fin de línea" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "Lista de objetos a borrar:" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "Logeado como" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "Iniciar sesión" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "Login" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "Autentificación" - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "Finalizar sesión" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "Desconectar del servidor" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "Mirando en" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "Correo" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "" -"Asegúrese que su filtro (arriba) seleccionará todos los registros hijos." - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "Array de borrado masivo mal formado." - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "Efectuando borrado masivo" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "" -"No está activado el borrado masivo. Por favor, actívelo en config.php antes " -"de continuar." - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "OID de la regla de coincidencia" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "Reglas de coincidencia" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "Longitud máxima" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "Tamaño máximo de archivo" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "Límite de memoria baja" - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "Falta %s en el archivo XML" - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "Faltan atributos o atributo changetype en la entrada" - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "Faltan atributos en la entrada" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "Falta configuración requerida" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "Falta extensión requerida" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "Falta el fichero enviado." - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "¡Modificación realizada correctamente!" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "Modificar grupo" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "Modificar miembros de '%s'" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "Modificando..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "Nombre" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "Nuevos atributos requeridos" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "Nuevo valor" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "No" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "No se ha especificado ningún DN" - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "No se especificó archivo LDIF. Por favor intente nuevamente." - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "No hay plantilla" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "Sin valor" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "No se ha especificado ningún nombre de atributo." - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "No se ha encontrado ningún exportador válido." - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "No hay que borrar ningún caché." - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "No hay valor para el atributo" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "No hay atributos internos" - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "No hay nadie conectado con el servidor." - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "No hay ninguna búsqueda predefinida en config.php." - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "No hay tal objeto %s" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "No existe el archivo" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "No hay tal ítem en el esquema: \"%s\"" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "No se ha encontrado versión. Asumiendo 1." - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "" -"No hay información suficiente para conectar con el servidor. Por favor, " -"revise su configuración." - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "Nota" - -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "" -"Nota: puede que tenga que introducir nuevos atributos que esta clase de " -"objeto requiera" - -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" -"Nota: es potencialmente peligroso y debe hacerlo a su cuenta y riesgo. Esta " -"operación NO puede deshacerse. Tome en consideración alias, referencias y " -"otras cosas que puedan causar problemas." - -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "Nota: se ha excedido el tiempo de búsqueda." - -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" - -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 -msgid "ObjectClasses" -msgstr "Clases de objeto" - -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" -"Los ObjectClass están en modo read-only en la configuración phpLDAPadmin." - -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "Los ObjectClass en XML no existen en el servidor LDAP." - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "Obsoleto" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "Valor anterior" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "One (un nivel bajo la base)" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "Atributos opcionales" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "O por último, su servidor LDAP no provee dicha información." - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "O pegue su LDIF aquí" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "Ordenar por" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "Ordenación" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "PHP Safe Mode" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "Página %d" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "Padre de" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "Contraseña" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "Herramienta de comprobación de contraseñas" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "¡Las contraseñas no coinciden!" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "¡Las contraseñas coinciden!" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "¿Borrar también todos los hijos?" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "Por favor compruebe y revise si un bug ha sido reportado" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" -"Por favor fije $jpeg_temp_dir a un directorio con permisos de escritura en " -"el config.php de phpLDAPadmin" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "Por favór, especifíquela en config.php" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "Búsquedas predefinidas" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 -msgid "Proceed >>" -msgstr "Proceder >>" - -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "Proceder >>" - -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "" -"Se han borrado todos los datos en el caché de phpLDAPadmin, incluyendo los " -"esquemas del servidor." - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "Borrar cache" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "Borrar cachés" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "Se han borrado %s bytes de caché." - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "¿Borrar realmente el atributo" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "Copia recursiva" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "Progreso de la copia recursiva" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "Progreso de la borración recursiva" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "También copiar recursivamente todos los hijos de este objeto." - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "Refrescar" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "Refrescar todos los contenedores extendidos del" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "Refrescar este objeto" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "Eliminar selección" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "Renombrar" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "Renombrar objeto" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "Renombramiento exitoso!" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "Renombrando..." - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "Informar de un error" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "Solicitar una nueva funcionalidad" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "Atributos requeridos" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "Atributo requerido para la(s) clase(s) de objeto %s" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "Rescatando DN" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "Guardar" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "Guardar cambios" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "Exportar este objeto" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "Exportar este objeto y todos sus hijos" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "Guardar como fichero" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "Guardar cambios" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "Esquema del servidor" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "Buscar" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "Filtro de búsqueda" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "Ámbito de búsqueda" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "Buscar entradas en las que" - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "Buscar no está permitido" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "" -"Error de seguridad: El fichero que está enviando puede ser malicioso." - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "Seleccionar una búsqueda predefinida" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "Seleccione una plantilla para el proceso de creación" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "Seleccione una plantilla para editar esta entrada" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "Seleccione un archivo LDIF" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "Servidor" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "Selección de servidor" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "Información sobre el servidor: " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "El servidor LDAP envía la siguiente información:" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "Ver" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "Mostrar atributos" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "Ver cache" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "Mostrar atributos internos" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "Mostrando los resultados de %s a %s." - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 msgid "Simple Search Form" msgstr "Formulario de búsqueda sencilla" -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "" -"Como ha cambiado su contraseña, debe conectarse de nuevo empleando la nueva." -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "Univaludado" +msgid "Advanced Search Form" +msgstr "Formulario de búsqueda avanzada" -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "Omitir" -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "" -"Se han modificado algunos atributos (%s) que se encuentran destacados mas " -"abajo." +msgid "Server" +msgstr "Servidor" -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "" -"Lo sentimos, ud. no está autorizado a usar phpLDAPadmin con este servidor " -"LDAP." -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "DN fuente" +msgid "Search for entries whose" +msgstr "Buscar entradas en las que" -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "Especifíque atributos y valores" -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "" -"Filtro de búsqueda LDAP estándar. Ejemplo: " -"(&(sn=Picapiedra)(givenname=Pedro))" +msgid "Base DN" +msgstr "DN base" -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "Paso %s de %s" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "Sub (subárbol completo)" +msgid "Search Scope" +msgstr "Ámbito de búsqueda" -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "Regla de subcadena" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "Éxito" +msgid "Show Attributtes" +msgstr "Mostrar atributos" -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "Exitósamente borrado el DN " -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "Exitósamente conectado al servidor." +msgid "Search" +msgstr "Buscar" -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "Cambiar entrada" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "Sintáxis" +msgid "Select a predefined search" +msgstr "Seleccionar una búsqueda predefinida" -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "OID de sintaxis" -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "Sintaxis" +msgid "Predefined Searches" +msgstr "Búsquedas predefinidas" -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "plantilla" -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "Error de valor de plantilla" +msgid "No queries have been defined in config.php." +msgstr "No hay ninguna búsqueda predefinida en config.php." -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "Plantillas" -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "El atributo Rdn (%s) no existe." - -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "" -"El atributo \"%s\" está marcado como de sólo lectura en la configuración de " -"phpLDAPadmin." - -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "El atributo (%s) está en modo sólo lectura." - -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "El nombre del atributo debe ser agregar, borrar o reemplazar" - -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "El nombre del atributo debe ser newsuperior" - -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "" -"El atributo a modificar no concuerda con el especificado por el atributo %s." - -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "El contenedor (%s) es una hoja." - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "El contenedor que ud. especificó (%s) no existe." - -#: ../../htdocs/create.php:39 -#, php-format -msgid "The container you specified (%s) does not exist. Please try again." -msgstr "" -"El contenedor que ha especificado (%s) no existe. Por favor inténtelo de " -"nuevo." - -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "El borrado de los objectClass" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "El contenedor destino (%s) no existe." - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "El objeto destino (%s) ya existe." - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "La entrada (%s) no existe." - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "La entrada (%s) está en modo sólo lectura." - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "La entrada no es válida" - -#: ../../htdocs/add_attr.php:56 -msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "" -"El fichero que ha escogido no existe o está vacío. Por favor vuelva atrás e " -"inténtelo de nuevo." - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "" -"El fichero que ha seleccionado sólo se ha recibido parcialmente debido a un " -"error de red." - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "" -"El fichero que está enviando es demasiado grande. Por favor revise el ajuste " -"\"upload_max_size\" en php.ini." - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" -msgstr "El DN completo del objeto a crear" - -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" -msgstr "El ámbito en el cual se busca" - -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "La búsqueda no ha encontrado resultados." - -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "El servidor LDAP no soporta el protocolo LDAP en su totalidad." - -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "El DN origen y destino son iguales." - -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "La URL del atributo debe comenzar con file:///" - -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "Hay" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "Existe más de un dn para uidpool, por favor cambie el filtro" - -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "Esta acción requiere que añada" - -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "" -"Este atributo ha sido marcado como de sólo lectura por el administrador de " -"phpLDAPadmin" - -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "El atributo ha sido forzado a MAY por la configuración." - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "Este atributo es requerido" - -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "Este atributo es requerido para el RDN." - -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "Este objeto base no existe." - -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "Esto puede suceder por varias razones, las más probables son:" - -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "Este objeto no existe." - -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "Este objeto no tiene atributos" - -#: ../../htdocs/delete_form.php:46 -#, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "Este objeto es la raíz de un subárbol que contiene %s objetos." - -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "Esta es una clase de objeto estructural y no se puede eliminar." - -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "Esta DN base no es válida." - -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "Esta clase de objeto es obsoleta." - -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "Esta operación no está permitida por configuración" - -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "Este servidor no tiene nada sobre lo que informar." - -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "Esta plantilla no está permitida en este contenedor." - -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "Esta conexión web no está encriptada" - -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "con" - -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "Para reingresar por favor pinche en el siguiente link:" - -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "Entradas totales" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "Papelera" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "Tipo" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "URL" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "El dn de uidpool no se encontró, por favor cambie el filtro" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 -#, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "" -"Imposible conectar con %s con sus credenciales \"auto_uid\". Por " -"favor, verifique su fichero de configuración." - -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "" -"Imposible conectarse a %s con sus credenciales unique_attr. Por " -"favor, revise su fichero de configuración." - -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "No se pudo borrar, el servidor está en modo sólo lectura." - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "No se puede abrir el archivo" - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "No se ha podido leer el archivo" - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "Tipo de autentificación \"auth_type\" desconocido: %s" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "Tipo desconocido de uidpool." - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "Criterio no reconocido: " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "Número de error no reconocido" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "Formato de resultado de búsqueda no reconocido: %s" - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "Nombre de archivo inseguro" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "El fichero LDIF enviado está vacío." - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "Uso" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "Use el menú de la izquierda para navegar" - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "Usado por los atributos" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "Usado por la clase de objeto" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "Modificado por el usuario" - -#: ../../lib/EntryWriter1.php:797 -#, php-format -msgid "View %s children" -msgstr "Ver %s hijos" - -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "Ver 1 hijo" - -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "Ver el esquema del" - -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "Ver la información enviada por el servidor" - -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "Ver la descripción del esquema para esta clase de objeto." - -#: ../../lib/EntryWriter1.php:819 -msgid "Viewing entry in read-only mode." -msgstr "Nota: Modo de sólo lectura." - -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" -"ADVERTENCIA: Ud. no puede habilitar compresión PHP y compresión phpLDAPadmin " -"al mismo tiempo. Por favor no setee zlib.output_compression o setee $config-" -">custom->appearance['compress']=false" - -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "Advertencia" - -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "" -"Cuando se realice una copia recursiva, copiar sólo los objetos que superen " -"el filtrado" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "Sí" - -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "¡Sí, borrar!" - -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "" -"No está usando 'https'. El navegador web enviará su información sin " -"encriptar." - -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 -msgid "You cannot perform updates while server is in read-only mode" -msgstr "" -"No puede realizar cambios cuando el servidor está funcionando en modo de " -"sólo lectura" - -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "No puede renombrar un objeto que tenga hijos" - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "No ha cambiado el RDN" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "" -"No ha seleccionado ninguna clase para este objeto. Por favor, vuelva atrás y " -"hágalo ahora." - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "No ha seleccionado objetos para borrar." - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "Ud. no ha seleccionada ningún objectClass para este objeto." - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "Ud. ha encontrado un bug phpLDAPadmin no fatal!" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" -"Ud. tiene PHP Safe Mode habilitado. PLA podría operar erráticamente en Safe " -"Mode." - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "" -"Todavía no ha conectado con el servidor, así que no puede realizar búsquedas." - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "Ud. ha especificado 2 claves diferentes." - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "Ha dejado el campo RDN en blanco." - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 -msgid "You left the attribute value blank. Please go back and try again." -msgstr "" -"Ha dejado en blanco el valor del atributo. Por favor, vuelva atrás e " -"inténtelo de nuevo." - -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "Ha dejado el campo DN en blanco." - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "Ha dejado la contraseña en blanco." - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "Ha dejado el valor del atributo requerido (%s) en blanco." - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "No ha realizado cambios" - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "Debe escoger un formato de exportación." - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "Ud. debe subir un archivo o proveer un LDIF en el recuadro de texto." - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "Debe especificar un DN" - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "" -"Ud. necesita uno de los siguientes objectclass para agregar este atributo %s." - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" -"Ud. necesita configurar %s. Edite el archivo \"%s\" para hacerlo. Un ejemplo " -"de archivo de configuración es provisto en \"%s.example\"." - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" -"Ud. especificó un valor inválido para auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\ten su configuración. Sólo \"uidpool\" y \"search\" son válidos.\n" -"\t\t\t\tPor favor corrija este problema." - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" -"Ud. especificó el \"auto_uid_number_mechanism\" como \"search\" en su\n" -"\t\t\t\t\t\tconfiguración como servidor %s, pero ud. no especificó " -"el\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Por favor especifíquelo antes " -"de proceder." - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "Se le pedirá confirmación" - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "" -"Su configuración del PHP ha desactivado la recepción de ficheros. Por favor " -"revise php.ini antes de continuar." - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" -"Su instalación de PHP no posee la función mhash(). No se pueden realizar " -"hashes SHA." - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "Su instalación de PHP no soporta TLS." - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" -"Su instalación de PHP no soporta la función ldap_sasl_bind(). Esta función " -"está presente en PHP 5.x cuando es compilada con --with-ldap-sasl." - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "" -"Su PHP.INI no tiene file_uploads = ON. Por favor habilíte subir archivos en " -"PHP." - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "Su sessión ha expirado después" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" -"Su intento de agregar %s (%s) a
%s
NO está " -"permitida. Ese atributo/valor pertenece a otra entrada.

Ud. podría buscar esa entrada." - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" -"Su intento de añadir %s (%s) a
%s
NO se ha " -"permitido. Tal atributo/valor pertenece a otro objeto.

Probablemente desee " -"buscar tal objeto." - -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "Su configuración fue automáticamente refrescada." - -#: ../../lib/functions.php:1172 -#, php-format -msgid "" -"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " -"for server %s" -msgstr "" -"Su configuración de phpLDAPadmin especifica \"auto_uid_search_base\" como no " -"válida para el servidor %s" - -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "Su instalación de PHP no soporta encriptación blowfish." - -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 -msgid "Your system crypt library does not support extended DES encryption." -msgstr "" -"Su librería crypt del sistema no soporta la versión extendida de " -"encriptación DES." - -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 -msgid "Your system crypt library does not support md5crypt encryption." -msgstr "Su instalación de PHP no soporta encriptación md5crypt." - -#: ../../lib/template_functions.php:984 -#, php-format -msgid "" -"Your template calls php.Function for a default value, however (%s) is NOT " -"available in the POST FORM variables. The following variables are available " -"[%s]." -msgstr "" -"Su plantilla solicita a php.funtion un valor por omisión, sin embargo (%s) " -"NO está disponible en las variables POST del FORM. Las siguientes variables " -"están disponibles [%s]." - -#: ../../lib/EntryReader.php:262 -#, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "Su plantilla tiene una función post desconocida (%s)." - -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "Su plantilla posee una variable perdida (%s)" - -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "Su versión de PHP no realiza la petición correctamente." - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[atributo borrado]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "[sin valor]" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "agregar atributo" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "agregar valor al atributo" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "añadir valor" - -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "búsqueda avanzada" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "alias" - -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "seleccionar" - -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "error" - -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "bytes" - -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "Emisor de llamada" - -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "carácter" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "caracteres" - -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "confirmar" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "copiar entrada" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "crear entrada" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "borrar atributo" - -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "borrar entrada" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "borrar entradas masivas" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "descargar valor" - -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "vacío" - -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "entradas" - -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "entrada" - -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "exportar" - -#: ../../htdocs/search.php:273 msgid "export results" msgstr "exportar resultados" -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "falso" -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "ha sido creada." +msgid "Unrecognized search result format: %s" +msgstr "Formato de resultado de búsqueda no reconocido: %s" -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "nota" -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "importar" +msgid "Format" +msgstr "Formato" -#: ../../lib/HTMLTree.php:248 -msgid "info" -msgstr "info" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "es un apodo para" +msgid "list" +msgstr "lista" -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "La foto jpegPhoto contiene errores
" -#: ../../lib/functions.php:351 -msgid "light" -msgstr "bombilla" +msgid "table" +msgstr "tabla" -#: ../../lib/functions.php:132 -msgid "line" -msgstr "línea" -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "conectar" +msgid "Your config.php specifies an invalid value for $default_search_display: %s. Please fix it" +msgstr "Su config.php especifica un valor no válido para $default_search_display: %s. Por favor, arréglelo" -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "salir" -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "La variable POST \"mass_delete\" no es un array." +msgid "Page %d" +msgstr "Página %d" -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "miembros en el grupo" -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "min. de inactividad. Ud. ha sido automáticamente desconectado." +msgid "The search found no results." +msgstr "La búsqueda no ha encontrado resultados." -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "modificar valores de atributo" -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "modificar miembros de grupo" +msgid "Request feature" +msgstr "Solicitar una nueva funcionalidad" -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "nuevo" -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "nuevos atributos" +msgid "Report a bug" +msgstr "Informar de un error" -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "sin descripción" -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "no hay descripción disponible" - -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "no hay objetos" - -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "no hay nuevos atributos en este objeto" - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "no hay nuevos atributos binarios en este objeto" - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "ninguno" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "ninguno, borrar valor" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "no aplicable" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "no especificado" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" -"phpLDAPadmin puede borrar recursivamente este objeto y sus %s hijos. Vea más " -"abajo la lista de objetos que se borrarán ahora. ¿Todavía quiere hacerlo?" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "O el phpLDAPadmin no sabe como obtener el esquema del servidor." - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "logotipo de phpLDAPadmin" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "búsqueda predeterminada" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "purgar" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "sólo lectura" - -#: ../../lib/HTMLTree.php:240 -msgid "refresh" -msgstr "refrescar" - -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "refrescar servidor" - -#: ../../lib/EntryWriter1.php:1829 -msgid "rename" -msgstr "renombrar" - -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "renombrar entrada" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "requerido" - -#: ../../lib/HTMLTree.php:224 msgid "schema" msgstr "esquema" -#: ../../lib/HTMLTree.php:232 + msgid "search" msgstr "buscar" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "segundos" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "seleccionar un atributo rdn" +msgid "create" +msgstr "crear" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "búsqueda simple" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "paso %s de %s" +msgid "info" +msgstr "info" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "estructural" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "que este objectClass requiere." +msgid "import" +msgstr "importar" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "este" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "este" +msgid "refresh" +msgstr "refrescar" + + +msgid "logout" +msgstr "salir" + + +msgid "Create new entry here" +msgstr "Crear nuevo objeto" + + +msgid "View schema for" +msgstr "Ver el esquema del" + + +msgid "Refresh all expanded containers for" +msgstr "Refrescar todos los contenedores extendidos del" + + +msgid "Create a new entry on" +msgstr "Crear un nuevo objeto en el" + + +msgid "new" +msgstr "nuevo" + + +msgid "View server-supplied information" +msgstr "Ver la información enviada por el servidor" + + +msgid "Import entries from an LDIF file" +msgstr "Importar desde un fichero LDIF" + + +msgid "Logout of this server" +msgstr "Desconectar del servidor" + + +msgid "Logged in as: " +msgstr "Conectado como: " + + +msgid "This is not a valid DN." +msgstr "Esta DN base no es válida." + + +msgid "This entry does not exist." +msgstr "Este objeto no existe." + + +msgid "read only" +msgstr "sólo lectura" + + +msgid "This attribute has been flagged as read only by the phpLDAPadmin administrator" +msgstr "Este atributo ha sido marcado como de sólo lectura por el administrador de phpLDAPadmin" + + +msgid "Could not determine the root of your LDAP tree." +msgstr "No se ha podido determinar la raíz de su árbol LDAP." + + +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Parece que el servidor LDAP ha sido configurado para no revelar su raíz." + + +msgid "Please specify it in config.php" +msgstr "Por favór, especifíquela en config.php" + + +msgid "Create a new entry in" +msgstr "Crear nuevo objeto en" + + +msgid "Login..." +msgstr "Autentificación" + + +msgid "login" +msgstr "conectar" + + +msgid "This base entry does not exist." +msgstr "Este objeto base no existe." + + +msgid "Create it?" +msgstr "¿Crearlo?" + + +msgid "Delete this entry" +msgstr "Borrar este objeto" + + +msgid "You will be prompted to confirm this decision" +msgstr "Se le pedirá confirmación" + + +msgid "Copy or move this entry" +msgstr "Copiar este objeto" + + +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Copiar este objeto en otro sitio: un nuevo DN u otro servidor" + + +msgid "Export" +msgstr "Exportar" + + +msgid "export" +msgstr "exportar" + + +msgid "Save a dump of this object" +msgstr "Exportar este objeto" + + +msgid "Save a dump of this object and all of its children" +msgstr "Exportar este objeto y todos sus hijos" + + +msgid "Export subtree" +msgstr "Exportar subárbol" + + +msgid "Create a child entry" +msgstr "Crear un objeto hijo" + + +msgid "Rename Entry" +msgstr "Renombrar objeto" + + +msgid "Rename" +msgstr "Renombrar" + + +msgid "rename" +msgstr "renombrar" + + +msgid "Add" +msgstr "Añadir" + + +msgid "View" +msgstr "Ver" + + +msgid "View 1 child" +msgstr "Ver 1 hijo" + + +msgid "View %s children" +msgstr "Ver %s hijos" + + +msgid "Add new attribute" +msgstr "Añadir atributo" + + +msgid "Add new ObjectClass" +msgstr "Añadir ObjectClass" + + +msgid "Hide internal attributes" +msgstr "Ocultar atributos internos" + + +msgid "Show internal attributes" +msgstr "Mostrar atributos internos" + + +msgid "Click to view the schema definition for attribute type '%s'" +msgstr "Haga click para ver el esquema del atributo de tipo '%s'" + + +msgid "none" +msgstr "ninguno" + + +msgid "No internal attributes" +msgstr "No hay atributos internos" + + +msgid "This entry has no attributes" +msgstr "Este objeto no tiene atributos" + + +msgid "Save Changes" +msgstr "Guardar cambios" + + +msgid "add value" +msgstr "añadir valor" + + +msgid "Add an additional value to attribute '%s'" +msgstr "Añadir un valor al atributo '%s'" + + +msgid "Refresh" +msgstr "Refrescar" + + +msgid "Refresh this entry" +msgstr "Refrescar este objeto" + + +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "Nota: para borrar un atributo, borre su atributo y haga click en guardar." + + +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "Nota: Para ver el esquema de un atributo, haga click en su nombre." + + +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "Se han modificado algunos atributos (%s) que se encuentran destacados mas abajo." + + +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "Se ha modificado algún atributo (%s) que se encuentra destacado más abajo." + + +msgid "Viewing entry in read-only mode." +msgstr "Nota: Modo de sólo lectura." + + +msgid "no new attributes available for this entry" +msgstr "no hay nuevos atributos en este objeto" + + +msgid "no new binary attributes available for this entry" +msgstr "no hay nuevos atributos binarios en este objeto" + + +msgid "Binary value" +msgstr "Valor binario" + + +msgid "Add new binary attribute" +msgstr "Añadir atributo binario" + + +msgid "Note: '%s' is an alias for '%s'" +msgstr "Nota: '%s' es un alias de '%s'" + + +msgid "Required attribute for objectClass(es) %s" +msgstr "Atributo requerido para la(s) clase(s) de objeto %s" + + +msgid "download value" +msgstr "descargar valor" + + +msgid "delete attribute" +msgstr "borrar atributo" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "a un objeto nuevo" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 msgid "true" msgstr "verdadero" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" -"uidpool_dn no encontrado. Por favor revise el filtro (arg 3) o configura " -"uidpool_dn en el archivo de configuración" -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "" -"El array update_array no está bien formado. Esto puede indicar un error de " -"phpLDAPadmin. Por favor, informe de ello." +msgid "false" +msgstr "falso" -#: ../../htdocs/add_value_form.php:93 -msgid "value to" -msgstr "valor de" -#: ../../htdocs/add_value_form.php:112 -msgid "values for attribute" -msgstr "valores del atributo" +msgid "none, remove value" +msgstr "ninguno, borrar valor" + + +msgid "Really delete attribute" +msgstr "¿Borrar realmente el atributo" + + +msgid "Add New Value" +msgstr "Añadir valor" + + +msgid "The server does not fully support the LDAP protocol." +msgstr "El servidor LDAP no soporta el protocolo LDAP en su totalidad." + + +msgid "Your version of PHP does not correctly perform the query." +msgstr "Su versión de PHP no realiza la petición correctamente." + + +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "O el phpLDAPadmin no sabe como obtener el esquema del servidor." + + +msgid "Jump to an objectClass" +msgstr "Ir a la clase de objeto" + + +msgid "View the schema description for this objectClass" +msgstr "Ver la descripción del esquema para esta clase de objeto." + + +msgid "Jump to an attribute type" +msgstr "Ir al tipo de atributo" + + +msgid "Jump to a matching rule" +msgstr "Ir a la regla de coincidencia" + + +msgid "Schema for server" +msgstr "Esquema del servidor" + + +msgid "Required Attributes" +msgstr "Atributos requeridos" + + +msgid "required" +msgstr "requerido" + + +msgid "Optional Attributes" +msgstr "Atributos opcionales" + + +msgid "Optional Binary Attributes" +msgstr "Atributos binarios opcionales" + + +msgid "OID" +msgstr "OID" + + +msgid "Aliases" +msgstr "Alias" + + +msgid "Description" +msgstr "Descripción" + + +msgid "no description" +msgstr "sin descripción" + + +msgid "Name" +msgstr "Nombre" + + +msgid "Equality" +msgstr "Igualdad" + + +msgid "This objectClass is obsolete." +msgstr "Esta clase de objeto es obsoleta." + + +msgid "Inherits from" +msgstr "Hereda de" + + +msgid "Inherited from" +msgstr "Heredado de" + + +msgid "Parent to" +msgstr "Padre de" + + +msgid "Jump to this objectClass definition" +msgstr "Ir a la definición de esta clase de objeto" + + +msgid "Matching Rule OID" +msgstr "OID de la regla de coincidencia" + + +msgid "Syntax OID" +msgstr "OID de sintaxis" + + +msgid "not applicable" +msgstr "no aplicable" + + +msgid "not specified" +msgstr "no especificado" + + +msgid "character" +msgstr "carácter" + + +msgid "characters" +msgstr "caracteres" + + +msgid "Used by objectClasses" +msgstr "Usado por la clase de objeto" + + +msgid "Used by Attributes" +msgstr "Usado por los atributos" + + +msgid "Maximum Length" +msgstr "Longitud máxima" + + +msgid "Attribute Types" +msgstr "Tipos de atributo" + + +msgid "Syntaxes" +msgstr "Sintaxis" + + +msgid "Matching Rules" +msgstr "Reglas de coincidencia" + + +msgid "Obsolete" +msgstr "Obsoleto" + + +msgid "Ordering" +msgstr "Ordenación" + + +msgid "Substring Rule" +msgstr "Regla de subcadena" + + +msgid "Single Valued" +msgstr "Univaludado" + + +msgid "Collective" +msgstr "Colectivo" + + +msgid "User Modification" +msgstr "Modificado por el usuario" + + +msgid "Usage" +msgstr "Uso" + + +msgid "Could not retrieve schema from" +msgstr "No se ha podido obtener el esquema de" + + +msgid "Type" +msgstr "Tipo" + + +msgid "No such schema item: \"%s\"" +msgstr "No hay tal ítem en el esquema: \"%s\"" + + +msgid "Entry %s deleted successfully." +msgstr "Objeto %s borrado correctamente." + + +msgid "You must specify a DN" +msgstr "Debe especificar un DN" + + +msgid "Could not delete the entry: %s" +msgstr "No se ha podido borrar el objeto %s" + + +msgid "No such entry: %s" +msgstr "No hay tal objeto %s" + + +msgid "Delete %s" +msgstr "Borrar %s" + + +msgid "Permanently delete all children also?" +msgstr "¿Borrar también todos los hijos?" + + +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "Este objeto es la raíz de un subárbol que contiene %s objetos." + -#: ../../htdocs/delete_form.php:48 msgid "view entries" msgstr "ver objetos" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "ver esquema" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "ver información del servidor" +msgid "phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?" +msgstr "phpLDAPadmin puede borrar recursivamente este objeto y sus %s hijos. Vea más abajo la lista de objetos que se borrarán ahora. ¿Todavía quiere hacerlo?" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "borrará este(os) atributo(s)" -#: ../../htdocs/compare_form.php:29 -msgid "with " -msgstr "con " +msgid "Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems." +msgstr "Nota: es potencialmente peligroso y debe hacerlo a su cuenta y riesgo. Esta operación NO puede deshacerse. Tome en consideración alias, referencias y otras cosas que puedan causar problemas." -#~ msgid "equals" -#~ msgstr "sea igual a" -#~ msgid "contains" -#~ msgstr "contenga" +msgid "Delete all %s objects" +msgstr "Borrar los %s objetos" -#~ msgid "create" -#~ msgstr "crear" -#~ msgid "Create a new entry on" -#~ msgstr "Crear un nuevo objeto en el" +msgid "Recursive delete progress" +msgstr "Progreso de la borración recursiva" -#~ msgid "Logged in as: " -#~ msgstr "Conectado como: " -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "Copiar este objeto en otro sitio: un nuevo DN u otro servidor" +msgid "Entry %s and sub-tree deleted successfully." +msgstr "Objeto %s y su subárbol borrado correctamente." -#~ msgid "View" -#~ msgstr "Ver" -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "Nota: '%s' es un alias de '%s'" +msgid "Failed to delete entry %s" +msgstr "Error al borrar el objeto %s" -#~ msgid "Entry %s deleted successfully." -#~ msgstr "Objeto %s borrado correctamente." -#~ msgid "" -#~ "Instructions: In order to add these objectClass(es) to this entry, you must " -#~ "specify" -#~ msgstr "" -#~ "Instrucciones: Para poder añadir esta clase a este objeto, debe especificar" +msgid "List of entries to be deleted:" +msgstr "Lista de objetos a borrar:" -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "que esta clase requiere. Puede hacerlo en este formulario." - -#~ msgid "Bad server id" -#~ msgstr "Identificador de servidor no válido" -#~ msgid "Could not connect to LDAP server." -#~ msgstr "No se ha podido conectar con el servidor LDAP." - -#~ msgid "Server: " -#~ msgstr "Servidor: " - -#~ msgid "Looking in: " -#~ msgstr "Buscando en: " - -#~ msgid "No DN specified in query string!" -#~ msgstr "¡No se ha especificado ningún DN en la petición!" - -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "Nota: Si no ha creado una regla de igualdad en el servidor LDAP para este " -#~ "atributo, obtendrá un error de coincidencia inapropiada (\"inappropriate " -#~ "matching\")." - -#~ msgid "Copy successful! Would you like to " -#~ msgstr "¡Copia correcta! ¿Le gustaría " - -#~ msgid "view the new entry" -#~ msgstr "ver el nuevo objeto" - -#~ msgid "Choose a template" -#~ msgstr "Escoja una plantilla" - -#~ msgid "Click here to go to the login form" -#~ msgstr "Pulse aquí para ir al formulario de conexión" - -#~ msgid "Entries found: " -#~ msgstr "Objetos encontrados: " - -#~ msgid "Filter performed: " -#~ msgstr "Filtrado realizado: " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "Búsqueda realizada por phpLDAPadmin en" - -#~ msgid "starts with" -#~ msgstr "comience por" - -#~ msgid "ends with" -#~ msgstr "acabe en" - -#~ msgid "sounds like" -#~ msgstr "suene como" - -#~ msgid "" -#~ "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP " -#~ "or perhaps your LDAP server has access control specified that prevents LDAP " -#~ "clients from accessing the RootDSE." -#~ msgstr "" -#~ "No se ha podido obtener ninguna información del servidor LDAP. Esto puede " -#~ "deberse a este error es " -#~ "su versión de PHP o quizás su servidor LDAP posee controles de acceso que " -#~ "privan a los clientes de acceso al RootDSE." - -#~ msgid "ChangeLog" -#~ msgstr "Lista de cambios" - -#~ msgid "Unsafe file name: " -#~ msgstr "Nombre de fichero no seguro: " - -#~ msgid "No such file: " -#~ msgstr "No hay tal fichero: " - -#~ msgid "" -#~ "You have enabled auto_uid_numbers for %s in your configuration, " -#~ " but you have not specified the " -#~ "auto_uid_number_mechanism. Please correct " -#~ "this problem." -#~ msgstr "" -#~ "Ha activado \"auto_uid_numbers\" para %s en su configuración, " -#~ " pero no ha especificado el mecanismo " -#~ "\"auto_uid_number_mechanism\". Por favor, corrija este problema" - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool\" " -#~ " in your configuration for server %s, but you did not " -#~ "specify the audo_uid_number_uid_pool_dn. Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "Ha especificado el mecanismo \"auto_uid_number_mechanism\" como \"uidpool\" " -#~ " en su configuración para el servidor %s, " -#~ "pero no ha especificado " -#~ "\"audo_uid_number_uid_pool_dn\". Por favor, verifiquelo antes de continuar." - -#~ msgid "" -#~ "It appears that the uidPool you specified in your configuration (\"%s\") " -#~ " does not exist." -#~ msgstr "" -#~ "Parece ser que el \"uidPool\" que ha especificado en su configuración " -#~ "(\"%s\") no existe." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"search\" in your " -#~ " configuration for server %s, but you did not " -#~ "specify the \"auto_uid_number_search_base\". " -#~ "Please specify it before proceeding." -#~ msgstr "" -#~ "Ha especificado \"auto_uid_number_mechanism\" como \"search\" en la " -#~ " configuración del servidor %s, pero no ha " -#~ "especificado \"auto_uid_number_search_base\". " -#~ "Por favor, especifíquelo antes de continuar." - -#~ msgid "" -#~ "You specified an invalid value for auto_uid_number_mechanism (\"%s\") " -#~ " in your configration. Only \"uidpool\" and " -#~ "\"search\" are valid. Please correct this " -#~ "problem." -#~ msgstr "" -#~ "Ha especificado un valor no válido para el mecanismo " -#~ "\"auto_uid_number_mechanism\" (\"%s\") en " -#~ "su configuración. Sólo son válidos \"uidpool\" y \"search\". Por favor, " -#~ "corrija este problema." - -#~ msgid "" -#~ "Error: You have an error in your config file. The only three allowed values " -#~ " for auth_type in the $servers section are " -#~ "'session', 'cookie', and 'config'. You entered '%s', " -#~ " which is not allowed. " -#~ msgstr "" -#~ "Error: Tiene un error en su fichero de configurción. Los tres únicos valores " -#~ "para \"auth_type\" en la sección $servers " -#~ "son 'session', 'cookie', y 'config'. Usted ha introducido '%s', " -#~ " que no está permitido. " - -#~ msgid "LDAP said: %s" -#~ msgstr "LDAP ha dicho: %s" - -#~ msgid "Error number: %s (%s)" -#~ msgstr "Error número: %s (%s)" - -#~ msgid "Description: %s

" -#~ msgstr "Descripción: %s

" - -#~ msgid "Error number: %s

" -#~ msgstr "Error número: %s

" - -#~ msgid "Description: (no description available)
" -#~ msgstr "Descripción: (no existe descripción disponible)
" - -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "" -#~ "¿Es éste un error de phpLDAPadmin? Si es así, por favor informe " -#~ "sobre ello." - -#~ msgid "Unrecognized error number: " -#~ msgstr "Número de error no reconocido: " - -#~ msgid "" -#~ "

\t\t\t
You found " -#~ "a non-fatal phpLDAPadmin bug!
Error:%s " -#~ "(%s)
File: %s line " -#~ "%s, caller %s
Versions:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "server:%s
Please check and see if this bug has been reported " -#~ "here.
If it hasnt been reported, you may report this bug by clicking " -#~ "here.

" -#~ msgstr "" -#~ "
¡Ha " -#~ "encontrado un error no fatal en " -#~ "phpLDAPadmin!
Error:%s " -#~ "(%s)
Fichero: %s línea " -#~ "%s, caller %s
Versiones:PLA: " -#~ "%s, PHP: %s, SAPI: %s " -#~ "
Servidor web:%s
Por favor, " -#~ "informe de este error pulsando " -#~ "aquí.

" - -#~ msgid "" -#~ "Congratulations! You found a bug in phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA " -#~ "Version:%s
PHP " -#~ "Version:%s
PHP " -#~ "SAPI:%s
Web " -#~ "server:%s
\t
\t Please " -#~ "report this bug by clicking below!" -#~ msgstr "" -#~ "¡Felicidades! Ha encontrado un error en phpLDAPadmin.

\t " -#~ "\t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Error:%s
Nivel:%s
Fichero:%s
Línea:%s
Caller:%s
Verisón " -#~ "PLA:%s
Versión " -#~ "PHP:%s
PHP " -#~ "SAPI:%s
Servidor " -#~ "web:%s
\t
\t Por " -#~ "favor, informe sobre este error haciendo click más abajo!" - -#~ msgid "Select an LDIF file:" -#~ msgstr "Seleccione un fichero LDIF:" - -#~ msgid "Line Number:" -#~ msgstr "Número de línea:" - -#~ msgid "Line:" -#~ msgstr "Línea:" - -#~ msgid "Optional Binary Attributes" -#~ msgstr "Atributos binarios opcionales" - -#~ msgid "Maximum file size: %s" -#~ msgstr "Tamaño máximo de fichero: %s" - -#~ msgid "Back" -#~ msgstr "Atrás" - -#~ msgid "object" -#~ msgstr "objeto" - -#~ msgid "Delete all" -#~ msgstr "Borrar todo" - -#~ msgid "warning" -#~ msgstr "aviso" - -#~ msgid "using template" -#~ msgstr "usando plantilla" - -#~ msgid "Redirecting..." -#~ msgstr "Redirigiendo..." - -#~ msgid "here" -#~ msgstr "aquí" - -#~ msgid "Step 1 of 2: Name and ObjectClass(es)" -#~ msgstr "Paso 1 de 2: Nombre y clase(s) de objeto" - -#~ msgid "Step 2 of 2: Specify attributes and values" -#~ msgstr "Paso 2 de 2: Especifique attributos y valores" - -#~ msgid "Relative Distinguished Name" -#~ msgstr "Nombre Distinguido Relativo (RDN)" - -#~ msgid "RDN" -#~ msgstr "RDN" - -#~ msgid "(example: cn=MyNewPerson)" -#~ msgstr "(ejemplo: cn=nuevaPersona)" - -#~ msgid "Successfully logged into server %s" -#~ msgstr "Ha conectado con el servidor %s." - -#~ msgid "%s bytes" -#~ msgstr "%s bytes" +msgid "Are you sure you want to permanently delete this object?" +msgstr "¿Está seguro de querer borrar este objeto?" -#~ msgid "Searching..." -#~ msgstr "Buscando..." -#~ msgid "Logged out successfully from server %s" -#~ msgstr "Se ha desconectado del servidor %s" +msgid "DN" +msgstr "DN" -#~ msgid "Authenticate to server %s" -#~ msgstr "Autentificación del servidor %s" -#~ msgid "Warning: This web connection is unencrypted." -#~ msgstr "Aviso: Esta conexión no está encriptada." +msgid "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin configuration." +msgstr "El atributo \"%s\" está marcado como de sólo lectura en la configuración de phpLDAPadmin." -#~ msgid "User name" -#~ msgstr "Nombre de usuario" -#~ msgid "" -#~ "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do " -#~ "so. An example config file is provided in 'config/config.php.example'" -#~ msgstr "" -#~ "Debe configurar phpLDAPadmin, editando el fichero 'config.php'. Se " -#~ "proporciona un fichero de configuración de ejemplo en 'config.php.example'" +msgid "No attribute name specified." +msgstr "No se ha especificado ningún nombre de atributo." -#~ msgid "Deletes not allowed in read only mode." -#~ msgstr "No se permiten borrados en modo de sólo lectura." -#~ msgid "list" -#~ msgstr "lista" +msgid "No DN specified" +msgstr "No se ha especificado ningún DN" -#~ msgid "table" -#~ msgstr "tabla" -#~ msgid "" -#~ "Your config.php specifies an invalid value for $default_search_display: %s. " -#~ "Please fix it" -#~ msgstr "" -#~ "Su config.php especifica un valor no válido para $default_search_display: " -#~ "%s. Por favor, arréglelo" +msgid "You left the attribute value blank. Please go back and try again." +msgstr "Ha dejado en blanco el valor del atributo. Por favor, vuelva atrás e inténtelo de nuevo." -#~ msgid "" -#~ "Your config specifies a handler of \"%s\" for this template but this file is " -#~ "not readable because the permissions are too strict." -#~ msgstr "" -#~ "Su configuración especifica un fichero \"%s\" para esta plantilla pero dicho " -#~ "fichero no se puede leer debido a que sus permisos son demasiado " -#~ "restrictivos." -#~ msgid "Using the" -#~ msgstr "Usando la" +msgid "Failed to add the attribute." +msgstr "Error al añadir atributo." -#~ msgid "You may switch to the " -#~ msgstr "Puede cambair a la " -#~ msgid "default template" -#~ msgstr "plantilla por defecto" +msgid "The file you chose is either empty or does not exist. Please go back and try again." +msgstr "El fichero que ha escogido no existe o está vacío. Por favor vuelva atrás e inténtelo de nuevo." -#~ msgid "User Account (posixAccount)" -#~ msgstr "Cuenta de Usuario (posixAccount)" -#~ msgid "Address Book Entry (inetOrgPerson)" -#~ msgstr "Entrada del libro de direcciones (inetOrgPerson)" +msgid "Security error: The file being uploaded may be malicious." +msgstr "Error de seguridad: El fichero que está enviando puede ser malicioso." -#~ msgid "Address Book Entry (mozillaOrgPerson)" -#~ msgstr "Entrada del libro de direcciones (mozillaOrgPerson)" -#~ msgid "Kolab User Entry" -#~ msgstr "Entrada de Usuario Kolab" +msgid "Your PHP configuration has disabled file uploads. Please check php.ini before proceeding." +msgstr "Su configuración del PHP ha desactivado la recepción de ficheros. Por favor revise php.ini antes de continuar." -#~ msgid "Organisational Unit" -#~ msgstr "Unidad Organizativa" -#~ msgid "Organisational Role" -#~ msgstr "Rol Organizativo" +msgid "The file you uploaded is too large. Please check php.ini, upload_max_size setting" +msgstr "El fichero que está enviando es demasiado grande. Por favor revise el ajuste \"upload_max_size\" en php.ini." -#~ msgid "Posix Group" -#~ msgstr "Grupo Posix" -#~ msgid "Samba NT Machine" -#~ msgstr "Ordenador con Samba NT" +msgid "The file you selected was only partially uploaded, likley due to a network error." +msgstr "El fichero que ha seleccionado sólo se ha recibido parcialmente debido a un error de red." -#~ msgid "Samba 3 NT Machine" -#~ msgstr "Ordenador con Samba 3 NT" -#~ msgid "Samba User" -#~ msgstr "Usuario de Samba" +msgid "Maximum file size: %s" +msgstr "Tamaño máximo de fichero: %s" -#~ msgid "Samba 3 User" -#~ msgstr "Usuario de Samba 3" -#~ msgid "Samba 3 Group Mapping" -#~ msgstr "Mapeo de Grupo de Samba 3" +msgid "Modification successful!" +msgstr "¡Modificación realizada correctamente!" -#~ msgid "DNS Entry" -#~ msgstr "Entrada DNS" -#~ msgid "Simple Security Object" -#~ msgstr "Objeto de Seguridad Simple" +msgid "Since you changed your password, you must now login again with your new password." +msgstr "Como ha cambiado su contraseña, debe conectarse de nuevo empleando la nueva." -#~ msgid "Courier Mail Account" -#~ msgstr "Cuenta de Correo Courier" -#~ msgid "Courier Mail Alias" -#~ msgstr "Alias de Correo Courier" +msgid "New Required Attributes" +msgstr "Nuevos atributos requeridos" -#~ msgid "LDAP Alias" -#~ msgstr "Alias de LDAP" -#~ msgid "Sendmail Cluster" -#~ msgstr "Cluster de Sendmail" +msgid "This action requires you to add" +msgstr "Esta acción requiere que añada" -#~ msgid "Sendmail Domain" -#~ msgstr "Dominio de Sendmail" -#~ msgid "Sendmail Alias" -#~ msgstr "Alias de Sendmail" +msgid "new attributes" +msgstr "nuevos atributos" -#~ msgid "Sendmail Virtual Domain" -#~ msgstr "Dominio Virtual de Sendmail" -#~ msgid "Sendmail Virtual Users" -#~ msgstr "Usuarios Virtuales de Sendmail" +msgid "Instructions: In order to add these objectClass(es) to this entry, you must specify" +msgstr "Instrucciones: Para poder añadir esta clase a este objeto, debe especificar" -#~ msgid "Sendmail Relays" -#~ msgstr "Relés de Sendmail" -#~ msgid "Custom" -#~ msgstr "A medida" +msgid "that this objectClass requires. You can do so in this form." +msgstr "que esta clase requiere. Puede hacerlo en este formulario." -#~ msgid "My Samba domain Name" -#~ msgstr "Mi Nombre de Dominio de Samba" -#~ msgid "Administrators" -#~ msgstr "Administradores" +msgid "Add ObjectClass and Attributes" +msgstr "Añadir clase de objeto y atributos" -#~ msgid "Users" -#~ msgstr "Usuarios" -#~ msgid "Guests" -#~ msgstr "Invitados" +msgid "ObjectClasses" +msgstr "Clases de objeto" -#~ msgid "Power Users" -#~ msgstr "Usuarios Privilegiados" -#~ msgid "Account Operators" -#~ msgstr "Administradores de Cuentas" +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "Haga click en el diálogo emergente para seleccionar un DN de forma gráfica" -#~ msgid "Server Operators" -#~ msgstr "Administradores de Servidor" -#~ msgid "Print Operators" -#~ msgstr "Administradores de Impresión" +msgid "You cannot perform updates while server is in read-only mode" +msgstr "No puede realizar cambios cuando el servidor está funcionando en modo de sólo lectura" -#~ msgid "Backup Operators" -#~ msgstr "Administradores de Copias de Seguridad" -#~ msgid "Replicator" -#~ msgstr "Replicador" +msgid "Bad server id" +msgstr "Identificador de servidor no válido" -#~ msgid "" -#~ " Unable to create the Samba passwords. Please, check the configuration in " -#~ "template_config.php" -#~ msgstr "" -#~ " Imposible crear las contraseñas de Samba. Por favor, revise la " -#~ "configuración en template_config.php" -#~ msgid "Error: You have an error in your samba confguration." -#~ msgstr "Error: Tiene un error en su configuración de Samba." +msgid "Not enough information to login to server. Please check your configuration." +msgstr "No hay información suficiente para conectar con el servidor. Por favor, revise su configuración." -#~ msgid "Error: A name and a sid for your samba domain need to be provided." -#~ msgstr "Error: Necesita indicar el nombre y el sid de su dominio Samba." -#~ msgid "Error: No name provided for samba domain." -#~ msgstr "Error: No se ha indicado el nombre del dominio Samba." +msgid "Could not connect to LDAP server." +msgstr "No se ha podido conectar con el servidor LDAP." -#~ msgid "Error: No sid provided for samba domain." -#~ msgstr "Error: No se ha indicado el sid del dominio Samba." -#~ msgid "Samba Account" -#~ msgstr "Cuenta Samba" +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "No se ha podido conectar con \"%s\" en el puerto \"%s\"" -#~ msgid "samba account" -#~ msgstr "cuenta samba" -#~ msgid "New User Account" -#~ msgstr "Nueva cuenta de usuario" +msgid "Could not perform ldap_mod_add operation." +msgstr "No se ha podido realizar la operación \"ldap_mod_add\"." -#~ msgid "" -#~ "Hint: To customize this template, edit the file " -#~ "templates/creation/new_user_template.php" -#~ msgstr "" -#~ "Nota: Para modificar esta plantilla, edite el fichero " -#~ "templates/creation/new_user_template.php" -#~ msgid "First name" -#~ msgstr "Nombre propio" +msgid "Success" +msgstr "Éxito" -#~ msgid "Last name" -#~ msgstr "Apellido" -#~ msgid "first" -#~ msgstr "nombre propio" +msgid "Home" +msgstr "Inicio" -#~ msgid "last" -#~ msgstr "apellido" -#~ msgid "Common name" -#~ msgstr "Nombre común" +msgid "Help" +msgstr "Ayuda" -#~ msgid "User Name" -#~ msgstr "Nombre de Usuario" -#~ msgid "Encryption" -#~ msgstr "Encriptación" +msgid "Server: " +msgstr "Servidor: " -#~ msgid "Login Shell" -#~ msgstr "Shell de entrada" -#~ msgid "Home Directory" -#~ msgstr "Directorio de usuario" +msgid "Looking in: " +msgstr "Buscando en: " -#~ msgid "UID Number" -#~ msgstr "Número UID" -#~ msgid "(automatically determined)" -#~ msgstr "(determinado automáticamente)" +msgid "No DN specified in query string!" +msgstr "¡No se ha especificado ningún DN en la petición!" -#~ msgid "Group" -#~ msgstr "Grupo" -#~ msgid "GID Number" -#~ msgstr "Número GID" +msgid "Back Up..." +msgstr "Volver" -#~ msgid "Your passwords don't match. Please go back and try again." -#~ msgstr "" -#~ "Sus contraseñas no coinciden. Por favor, vuelva atrás e inténtelo de nuevon." -#~ msgid "You cannot leave the %s blank. Please go back and try again." -#~ msgstr "" -#~ "No puede dejar en blanco el %s. Por favor, vuelva atrás e inténtelo de nuevo." +msgid "no entries" +msgstr "no hay objetos" -#~ msgid "" -#~ "You can only enter numeric values for the %s field. Please go back and try " -#~ "again." -#~ msgstr "" -#~ "Sólo puede introducir valores numéricos en el campo %s. Por favor, vuelva " -#~ "atrás e inténtelo de nuevo." -#~ msgid "" -#~ "The container you specified (%s) does not exist. Please go back and try " -#~ "again." -#~ msgstr "" -#~ "El contenedor que ha especificado (%s) no existe. Por favor, vuelva atrás e " -#~ "inténtelo de nuevo." +msgid "Could not determine base DN" +msgstr "No se puede determinar el DN base" -#~ msgid "Confirm account creation" -#~ msgstr "Confirmar creación de cuenta" -#~ msgid "[secret]" -#~ msgstr "[secreta]" +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "Esto puede suceder por varias razones, las más probables son:" -#~ msgid "Create Account" -#~ msgstr "Crear cuenta" -#~ msgid "New Address Book Entry" -#~ msgstr "Nueva entrada en el libro de direcciones" +msgid "Yes" +msgstr "Sí" -#~ msgid "Organisation" -#~ msgstr "Organización" -#~ msgid "Address" -#~ msgstr "Dirección" +msgid "No" +msgstr "No" -#~ msgid "City" -#~ msgstr "Ciudad" -#~ msgid "Postal code" -#~ msgstr "Código postal" +msgid "Go" +msgstr "Ir" -#~ msgid "Street" -#~ msgstr "Calle" -#~ msgid "Work phone" -#~ msgstr "Teléfono de trabajo" +msgid "Delete" +msgstr "Borrar" -#~ msgid "Fax" -#~ msgstr "Fax" -#~ msgid "Mobile" -#~ msgstr "Móvil" +msgid "Back" +msgstr "Atrás" -#~ msgid "Email" -#~ msgstr "Email" -#~ msgid "You cannot leave the Common Name blank. Please go back and try again." -#~ msgstr "" -#~ "No puede dejar el campo \"Nombre Común\" en blanco. Por favor, vuelva atrás " -#~ "e inténtelo de nuevo." +msgid "object" +msgstr "objeto" + + +msgid "Delete all" +msgstr "Borrar todo" + + +msgid "hint" +msgstr "nota" + + +msgid "bug" +msgstr "error" + + +msgid "warning" +msgstr "aviso" + + +msgid "light" +msgstr "bombilla" + + +msgid "Proceed >>" +msgstr "Proceder >>" + + +msgid "value to" +msgstr "valor de" + + +msgid "Distinguished Name" +msgstr "Nombre distinguido" + + +msgid "Current list of" +msgstr "Lista actual de" + + +msgid "values for attribute" +msgstr "valores del atributo" + + +msgid "Note: You will get an \"inappropriate matching\" error if you have not setup an EQUALITY rule on your LDAP server for this attribute." +msgstr "Nota: Si no ha creado una regla de igualdad en el servidor LDAP para este atributo, obtendrá un error de coincidencia inapropiada (\"inappropriate matching\")." + + +msgid "Enter the value you would like to add:" +msgstr "Introduzca el valor a añadir:" + + +msgid "Note: You may be required to enter new attributes that these objectClass(es) require" +msgstr "Nota: puede que tenga que introducir nuevos atributos que esta clase de objeto requiera" + + +msgid "You left the destination DN blank." +msgstr "Ha dejado el campo DN en blanco." + + +msgid "The destination entry (%s) already exists." +msgstr "El objeto destino (%s) ya existe." + + +msgid "The destination container (%s) does not exist." +msgstr "El contenedor destino (%s) no existe." + + +msgid "The source and destination DN are the same." +msgstr "El DN origen y destino son iguales." + + +msgid "Copying " +msgstr "Copiando " + + +msgid "Recursive copy progress" +msgstr "Progreso de la copia recursiva" + + +msgid "Building snapshot of tree to copy... " +msgstr "Creando imagen del árbol a copiar... " + + +msgid "Copy successful! Would you like to " +msgstr "¡Copia correcta! ¿Le gustaría " + + +msgid "view the new entry" +msgstr "ver el nuevo objeto" + + +msgid "Failed to copy DN: " +msgstr "Error al copiar el DN: " + + +msgid "Template" +msgstr "plantilla" + + +msgid "using template" +msgstr "usando plantilla" + + +msgid "Go to %s" +msgstr "Ir a %s" + + +msgid "This is a structural ObjectClass and cannot be removed." +msgstr "Esta es una clase de objeto estructural y no se puede eliminar." + + +msgid "structural" +msgstr "estructural" + + +msgid "Copy " +msgstr "Copiar " + + +msgid "to a new object" +msgstr "a un objeto nuevo" + + +msgid "Destination DN" +msgstr "DN destino" + + +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "El DN completo del objeto a crear" + + +msgid "Destination Server" +msgstr "Servidor destino" + + +msgid "Hint: Copying between different servers only works if there are no schema violations" +msgstr "Nota: Sólo se puede copiar entre servidores diferentes cuando no hay violaciones de esquema" + + +msgid "Recursively copy all children of this object as well." +msgstr "También copiar recursivamente todos los hijos de este objeto." + + +msgid "Recursive copy" +msgstr "Copia recursiva" + + +msgid "Filter" +msgstr "Filtro" + + +msgid "Search Filter" +msgstr "Filtro de búsqueda" + + +msgid "When performing a recursive copy, only copy those entries which match this filter" +msgstr "Cuando se realice una copia recursiva, copiar sólo los objetos que superen el filtrado" + + +msgid "You left the value blank for required attribute (%s)." +msgstr "Ha dejado el valor del atributo requerido (%s) en blanco." + + +msgid "Redirecting..." +msgstr "Redirigiendo..." + + +msgid "here" +msgstr "aquí" + + +msgid "Could not add the object to the LDAP server." +msgstr "No se ha podido añadir el objeto al servidor LDAP." + + +msgid "Create Object" +msgstr "Crear objeto" + + +msgid "Choose a template" +msgstr "Escoja una plantilla" + + +msgid "Select a template for the creation process" +msgstr "Seleccione una plantilla para el proceso de creación" + + +msgid "Save as file" +msgstr "Guardar como fichero" + + +msgid "You left the RDN field blank." +msgstr "Ha dejado el campo RDN en blanco." + + +msgid "The container you specified (%s) does not exist. Please try again." +msgstr "El contenedor que ha especificado (%s) no existe. Por favor inténtelo de nuevo." + + +msgid "You did not select any ObjectClasses for this object. Please go back and do so." +msgstr "No ha seleccionado ninguna clase para este objeto. Por favor, vuelva atrás y hágalo ahora." + + +msgid "Hint: You must choose exactly one structural objectClass (shown in bold above)" +msgstr "Nota: Debe escoger al menos una clase de objeto estructural" + + +msgid "Your config specifies a handler of \"%s\" for this template but this file is not readable because the permissions are too strict." +msgstr "Su configuración especifica un fichero \"%s\" para esta plantilla pero dicho fichero no se puede leer debido a que sus permisos son demasiado restrictivos." + + +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "Paso 1 de 2: Nombre y clase(s) de objeto" + + +msgid "Step 2 of 2: Specify attributes and values" +msgstr "Paso 2 de 2: Especifique attributos y valores" + + +msgid "Relative Distinguished Name" +msgstr "Nombre Distinguido Relativo (RDN)" + + +msgid "RDN" +msgstr "RDN" + + +msgid "(example: cn=MyNewPerson)" +msgstr "(ejemplo: cn=nuevaPersona)" + + +msgid "Container" +msgstr "Contenedor" + + +msgid "You have not logged into the selected server yet, so you cannot perform searches on it." +msgstr "Todavía no ha conectado con el servidor, así que no puede realizar búsquedas." + + +msgid "Click here to go to the login form" +msgstr "Pulse aquí para ir al formulario de conexión" + + +msgid "Unrecognized criteria option: " +msgstr "Criterio no reconocido: " + + +msgid "If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting." +msgstr "Si quiere puede añadir su propios criterios a la lista. Asegúrese de editar search.php para manejarlos. Saliendo..." + + +msgid "Entries found: " +msgstr "Objetos encontrados: " + + +msgid "Filter performed: " +msgstr "Filtrado realizado: " + + +msgid "Search performed by phpLDAPadmin in" +msgstr "Búsqueda realizada por phpLDAPadmin en" + + +msgid "seconds" +msgstr "segundos" + + +msgid "Sub (entire subtree)" +msgstr "Sub (subárbol completo)" + + +msgid "One (one level beneath base)" +msgstr "One (un nivel bajo la base)" + + +msgid "Base (base dn only)" +msgstr "Base (sólo la base)" + + +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "Filtro de búsqueda LDAP estándar. Ejemplo: (&(sn=Picapiedra)(givenname=Pedro))" + + +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "Lista de atributos para mostrar en los resultados (separados por comas)" + + +msgid "equals" +msgstr "sea igual a" + + +msgid "starts with" +msgstr "comience por" + + +msgid "contains" +msgstr "contenga" + + +msgid "ends with" +msgstr "acabe en" + + +msgid "sounds like" +msgstr "suene como" + + +msgid "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE." +msgstr "No se ha podido obtener ninguna información del servidor LDAP. Esto puede deberse a este error es su versión de PHP o quizás su servidor LDAP posee controles de acceso que privan a los clientes de acceso al RootDSE." + + +msgid "Server info for: " +msgstr "Información sobre el servidor: " + + +msgid "Server reports the following information about itself" +msgstr "El servidor LDAP envía la siguiente información:" + + +msgid "This server has nothing to report." +msgstr "Este servidor no tiene nada sobre lo que informar." + + +msgid "update_array is malformed. This might be a phpLDAPadmin bug. Please report it." +msgstr "El array update_array no está bien formado. Esto puede indicar un error de phpLDAPadmin. Por favor, informe de ello." + + +msgid "Could not perform ldap_modify operation." +msgstr "No se ha podido realizar la operación \"ldap_modify\"." + + +msgid "Do you want to make these changes?" +msgstr "¿Quiere realizar estos cambios?" + + +msgid "Attribute" +msgstr "Atributo" + + +msgid "Old Value" +msgstr "Valor anterior" + + +msgid "New Value" +msgstr "Nuevo valor" + + +msgid "[attribute deleted]" +msgstr "[atributo borrado]" + + +msgid "Commit" +msgstr "Cometer" + + +msgid "Cancel" +msgstr "Cancelar" + + +msgid "You made no changes" +msgstr "No ha realizado cambios" + + +msgid "Go back" +msgstr "Volver atrás" + + +msgid "Use the menu to the left to navigate" +msgstr "Use el menú de la izquierda para navegar" + + +msgid "Credits" +msgstr "Creditos" + + +msgid "ChangeLog" +msgstr "Lista de cambios" + + +msgid "Donate" +msgstr "Donar" + + +msgid "phpLDAPadmin logo" +msgstr "logotipo de phpLDAPadmin" + + +msgid "Purge caches" +msgstr "Borrar cachés" + + +msgid "No cache to purge." +msgstr "No hay que borrar ningún caché." + + +msgid "Purged %s bytes of cache." +msgstr "Se han borrado %s bytes de caché." + + +msgid "Purge all cached data in phpLDAPadmin, including server schemas." +msgstr "Se han borrado todos los datos en el caché de phpLDAPadmin, incluyendo los esquemas del servidor." + + +msgid "Unsafe file name: " +msgstr "Nombre de fichero no seguro: " + + +msgid "No such file: " +msgstr "No hay tal fichero: " + + +msgid "You have enabled auto_uid_numbers for %s in your configuration," +" but you have not specified the auto_uid_number_mechanism. Please correct" +" this problem." +msgstr "Ha activado \"auto_uid_numbers\" para %s en su configuración," +" pero no ha especificado el mecanismo \"auto_uid_number_mechanism\". Por favor, corrija este problema" + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"uidpool\"" +" in your configuration for server %s, but you did not specify the" +" audo_uid_number_uid_pool_dn. Please specify it before proceeding." +msgstr "Ha especificado el mecanismo \"auto_uid_number_mechanism\" como \"uidpool\"" +" en su configuración para el servidor %s, pero no ha especificado" +" \"audo_uid_number_uid_pool_dn\". Por favor, verifiquelo antes de continuar." + + +msgid "It appears that the uidPool you specified in your configuration (\"%s\")" +" does not exist." +msgstr "Parece ser que el \"uidPool\" que ha especificado en su configuración (\"%s\")" +" no existe." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"search\" in your" +" configuration for server %s, but you did not specify the" +" \"auto_uid_number_search_base\". Please specify it before proceeding." +msgstr "Ha especificado \"auto_uid_number_mechanism\" como \"search\" en la" +" configuración del servidor %s, pero no ha especificado" +" \"auto_uid_number_search_base\". Por favor, especifíquelo antes de continuar." + + +msgid "Unable to bind to %s with your with auto_uid credentials. Please check your configuration file." +msgstr "Imposible conectar con %s con sus credenciales \"auto_uid\". Por favor, verifique su fichero de configuración." + + +msgid "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s" +msgstr "Su configuración de phpLDAPadmin especifica \"auto_uid_search_base\" como no válida para el servidor %s" + + +msgid "You specified an invalid value for auto_uid_number_mechanism (\"%s\")" +" in your configration. Only \"uidpool\" and \"search\" are valid." +" Please correct this problem." +msgstr "Ha especificado un valor no válido para el mecanismo \"auto_uid_number_mechanism\" (\"%s\")" +" en su configuración. Sólo son válidos \"uidpool\" y \"search\". Por favor, corrija este problema." + + +msgid "Error: You have an error in your config file. The only three allowed values" +" for auth_type in the $servers section are 'session', 'cookie', and 'config'. You entered '%s'," +" which is not allowed. " +msgstr "Error: Tiene un error en su fichero de configurción. Los tres únicos valores para \"auth_type\"" +" en la sección $servers son 'session', 'cookie', y 'config'. Usted ha introducido '%s'," +" que no está permitido. " + + +msgid "Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file." +msgstr "Imposible conectarse a %s con sus credenciales unique_attr. Por favor, revise su fichero de configuración." + + +msgid "Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry." +msgstr "Su intento de añadir %s (%s) a
%s
NO se ha permitido. Tal atributo/valor pertenece a otro objeto.

Probablemente desee buscar tal objeto." + + +msgid "Your PHP install does not support TLS." +msgstr "Su instalación de PHP no soporta TLS." + + +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "No se ha podido iniciar TLS. Por favor, revise su configuración LDAP." + + +msgid "Could not bind anonymously to server." +msgstr "No se ha podido conectar con el servidor de forma anónima." + + +msgid "Anonymous Bind" +msgstr "Conexión anónima" + + +msgid "Bad username or password. Please try again." +msgstr "Nombre de usuario o contraseña incorrectos. Por favor, inténtelo de nuevo." + + +msgid "Successfully logged into server %s" +msgstr "Ha conectado con el servidor %s." + + +msgid "Could not set cookie." +msgstr "No se ha podido guardar la cookie." + + +msgid "LDAP said: %s" +msgstr "LDAP ha dicho: %s" + + +msgid "Error" +msgstr "Error" + + +msgid "browse" +msgstr "seleccionar" + + +msgid "Delete Photo" +msgstr "Borrar foto" + + +msgid "Your system crypt library does not support blowfish encryption." +msgstr "Su instalación de PHP no soporta encriptación blowfish." + + +msgid "Your system crypt library does not support md5crypt encryption." +msgstr "Su instalación de PHP no soporta encriptación md5crypt." + + +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "Su instalación de PHP no posee la función mhash(). No se pueden realizar hashes SHA." + + +msgid "jpegPhoto contains errors
" +msgstr "La foto jpegPhoto contiene errores
" + + +msgid "Error number: %s (%s)" +msgstr "Error número: %s (%s)" + + +msgid "Description: %s

" +msgstr "Descripción: %s

" + + +msgid "Error number: %s

" +msgstr "Error número: %s

" + + +msgid "Description: (no description available)
" +msgstr "Descripción: (no existe descripción disponible)
" + + +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "¿Es éste un error de phpLDAPadmin? Si es así, por favor informe sobre ello." + + +msgid "Unrecognized error number: " +msgstr "Número de error no reconocido: " + + +msgid "

" +" " +" " +" " +"
" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
Please check and see if this bug has been reported here.
If it hasnt been reported, you may report this bug by clicking here.

" +msgstr "
" +"
" +" ¡Ha encontrado un error no fatal en phpLDAPadmin!
Error:%s (%s)
Fichero:%s línea %s, caller %s
Versiones:PLA: %s, PHP: %s, SAPI: %s" +"
Servidor web:%s
" +" Por favor, informe de este error pulsando aquí.

" + + +msgid "Congratulations! You found a bug in phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Please report this bug by clicking below!" +msgstr "¡Felicidades! Ha encontrado un error en phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Nivel:%s
Fichero:%s
Línea:%s
Caller:%s
Verisón PLA:%s
Versión PHP:%s
PHP SAPI:%s
Servidor web:%s
" +"
" +" Por favor, informe sobre este error haciendo click más abajo!" + + +msgid "Import LDIF File" +msgstr "Importar fichero LDIF" + + +msgid "Select an LDIF file:" +msgstr "Seleccione un fichero LDIF:" + + +msgid "Don't stop on errors" +msgstr "Ignorar errores" + + +msgid "Adding..." +msgstr "Añadiendo..." + + +msgid "Deleting..." +msgstr "Borrando..." + + +msgid "Renaming..." +msgstr "Renombrando..." + + +msgid "Modifying..." +msgstr "Modificando..." + + +msgid "No version found. Assuming 1." +msgstr "No se ha encontrado versión. Asumiendo 1." + + +msgid "A valid dn line is required." +msgstr "Se requiere una línea válida." + + +msgid "Missing uploaded file." +msgstr "Falta el fichero enviado." + + +msgid "Uploaded LDIF file is empty." +msgstr "El fichero LDIF enviado está vacío." + + +msgid "empty" +msgstr "vacío" + + +msgid "File" +msgstr "Fichero" + + +msgid "%s bytes" +msgstr "%s bytes" + + +msgid "LDIF Parse Error" +msgstr "Error al parsear LDIF" + + +msgid "Could not add object:" +msgstr "No se ha podido añadir objeto:" + + +msgid "Could not rename object:" +msgstr "No se ha podido renombrar el objeto:" + + +msgid "Could not delete object:" +msgstr "No se ha podido borrar el objeto:" + + +msgid "Could not modify object:" +msgstr "No se ha podido modificar el objeto:" + + +msgid "Line Number:" +msgstr "Número de línea:" + + +msgid "Line:" +msgstr "Línea:" + + +msgid "Export format" +msgstr "Formato de exportación" + + +msgid "Line ends" +msgstr "Fin de línea" + + +msgid "You must choose an export format." +msgstr "Debe escoger un formato de exportación." + + +msgid "Invalid export format" +msgstr "Formato de exportación no válido" + + +msgid "No available exporter found." +msgstr "No se ha encontrado ningún exportador válido." + + +msgid "Encountered an error while performing search." +msgstr "Se ha encontrado un error al realizar la búsqueda." + + +msgid "Showing results %s through %s." +msgstr "Mostrando los resultados de %s a %s." + + +msgid "Searching..." +msgstr "Buscando..." + + +msgid "Notice, search size limit exceeded." +msgstr "Nota: se ha excedido el tiempo de búsqueda." + + +msgid "Entry" +msgstr "Objeto" + + +msgid "LDIF Export for: %s" +msgstr "Exportación LDIF de: %s" + + +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "Generado por phpLDAPadmin el %s" + + +msgid "Total Entries" +msgstr "Entradas totales" + + +msgid "DSLM Export for: %s" +msgstr "Exportación DSLM de: %s" + + +msgid "Include system attributes" +msgstr "Incluir atributos de sistema" + + +msgid "CSV (Spreadsheet)" +msgstr "CSV (Hoja de cálculo)" + + +msgid "You left the password blank." +msgstr "Ha dejado la contraseña en blanco." + + +msgid "No one is logged in to that server." +msgstr "No hay nadie conectado con el servidor." + + +msgid "Could not logout." +msgstr "No se ha podido desconectar." + + +msgid "Unknown auth_type: %s" +msgstr "Tipo de autentificación \"auth_type\" desconocido: %s" + + +msgid "Logged out successfully from server %s" +msgstr "Se ha desconectado del servidor %s" + + +msgid "Authenticate to server %s" +msgstr "Autentificación del servidor %s" + + +msgid "Warning: This web connection is unencrypted." +msgstr "Aviso: Esta conexión no está encriptada." + + +msgid "You are not using 'https'. Web browser will transmit login information in clear text." +msgstr "No está usando 'https'. El navegador web enviará su información sin encriptar." + + +msgid "Login DN" +msgstr "Login" + + +msgid "User name" +msgstr "Nombre de usuario" + + +msgid "Password" +msgstr "Contraseña" + + +msgid "Authenticate" +msgstr "Entrar" + + +msgid "Entry Chooser" +msgstr "Selector de objetos" + + +msgid "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do so. An example config file is provided in 'config/config.php.example'" +msgstr "Debe configurar phpLDAPadmin, editando el fichero 'config.php'. Se proporciona un fichero de configuración de ejemplo en 'config.php.example'" + + +msgid "Deletes not allowed in read only mode." +msgstr "No se permiten borrados en modo de sólo lectura." + + +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "Error al llamar a \"mass_delete.php\". Falta la variable POST \"mass_delete\"." + + +msgid "mass_delete POST var is not an array." +msgstr "La variable POST \"mass_delete\" no es un array." + + +msgid "Mass deletion is not enabled. Please enable it in config.php before proceeding." +msgstr "No está activado el borrado masivo. Por favor, actívelo en config.php antes de continuar." + + +msgid "Mass Deleting" +msgstr "Efectuando borrado masivo" + + +msgid "Deletion progress on server \"%s\"" +msgstr "Borrado en progreso en el servidor \"%s\"" + + +msgid "Malformed mass_delete array." +msgstr "Array de borrado masivo mal formado." + + +msgid "You did not select any entries to delete." +msgstr "No ha seleccionado objetos para borrar." + + +msgid "Deleting %s" +msgstr "Borrando %s" + + +msgid "%s of %s entries failed to be deleted." +msgstr "No han podido borrarse %s de %s objetos." + + +msgid "All entries deleted successfully." +msgstr "Todos los objetos han sido borrados." + + +msgid "Confirm mass delete of %s entries on server %s" +msgstr "Confirmar borrado masivo de %s objetos en el servidor %s" + + +msgid "Yes, delete!" +msgstr "¡Sí, borrar!" + + +msgid "You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)" +msgstr "No puede renombrar un objeto que tenga hijos" + + +msgid "You did not change the RDN" +msgstr "No ha cambiado el RDN" + + +msgid "Invalid RDN value" +msgstr "Valor RDN no válido" + + +msgid "Could not rename the entry" +msgstr "No se ha podido renombrar el objeto" + + +msgid "Passwords match!" +msgstr "¡Las contraseñas coinciden!" + + +msgid "Passwords do not match!" +msgstr "¡Las contraseñas no coinciden!" + + +msgid "Password Checker Tool" +msgstr "Herramienta de comprobación de contraseñas" + + +msgid "Compare" +msgstr "Comparar" + + +msgid "To" +msgstr "con" + + +msgid "Using the" +msgstr "Usando la" + + +msgid "You may switch to the " +msgstr "Puede cambair a la " + + +msgid "default template" +msgstr "plantilla por defecto" + + +msgid "User Account (posixAccount)" +msgstr "Cuenta de Usuario (posixAccount)" + + +msgid "Address Book Entry (inetOrgPerson)" +msgstr "Entrada del libro de direcciones (inetOrgPerson)" + + +msgid "Address Book Entry (mozillaOrgPerson)" +msgstr "Entrada del libro de direcciones (mozillaOrgPerson)" + + +msgid "Kolab User Entry" +msgstr "Entrada de Usuario Kolab" + + +msgid "Organisational Unit" +msgstr "Unidad Organizativa" + + +msgid "Organisational Role" +msgstr "Rol Organizativo" + + +msgid "Posix Group" +msgstr "Grupo Posix" + + +msgid "Samba NT Machine" +msgstr "Ordenador con Samba NT" + + +msgid "Samba 3 NT Machine" +msgstr "Ordenador con Samba 3 NT" + + +msgid "Samba User" +msgstr "Usuario de Samba" + + +msgid "Samba 3 User" +msgstr "Usuario de Samba 3" + + +msgid "Samba 3 Group Mapping" +msgstr "Mapeo de Grupo de Samba 3" + + +msgid "DNS Entry" +msgstr "Entrada DNS" + + +msgid "Simple Security Object" +msgstr "Objeto de Seguridad Simple" + + +msgid "Courier Mail Account" +msgstr "Cuenta de Correo Courier" + + +msgid "Courier Mail Alias" +msgstr "Alias de Correo Courier" + + +msgid "LDAP Alias" +msgstr "Alias de LDAP" + + +msgid "Sendmail Cluster" +msgstr "Cluster de Sendmail" + + +msgid "Sendmail Domain" +msgstr "Dominio de Sendmail" + + +msgid "Sendmail Alias" +msgstr "Alias de Sendmail" + + +msgid "Sendmail Virtual Domain" +msgstr "Dominio Virtual de Sendmail" + + +msgid "Sendmail Virtual Users" +msgstr "Usuarios Virtuales de Sendmail" + + +msgid "Sendmail Relays" +msgstr "Relés de Sendmail" + + +msgid "Custom" +msgstr "A medida" + + +msgid "My Samba domain Name" +msgstr "Mi Nombre de Dominio de Samba" + + +msgid "Administrators" +msgstr "Administradores" + + +msgid "Users" +msgstr "Usuarios" + + +msgid "Guests" +msgstr "Invitados" + + +msgid "Power Users" +msgstr "Usuarios Privilegiados" + + +msgid "Account Operators" +msgstr "Administradores de Cuentas" + + +msgid "Server Operators" +msgstr "Administradores de Servidor" + + +msgid "Print Operators" +msgstr "Administradores de Impresión" + + +msgid "Backup Operators" +msgstr "Administradores de Copias de Seguridad" + + +msgid "Replicator" +msgstr "Replicador" + + +msgid " Unable to create the Samba passwords. Please, check the configuration in template_config.php" +msgstr " Imposible crear las contraseñas de Samba. Por favor, revise la configuración en template_config.php" + + +msgid "Error: You have an error in your samba confguration." +msgstr "Error: Tiene un error en su configuración de Samba." + + +msgid "Error: A name and a sid for your samba domain need to be provided." +msgstr "Error: Necesita indicar el nombre y el sid de su dominio Samba." + + +msgid "Error: No name provided for samba domain." +msgstr "Error: No se ha indicado el nombre del dominio Samba." + + +msgid "Error: No sid provided for samba domain." +msgstr "Error: No se ha indicado el sid del dominio Samba." + + +msgid "Samba Account" +msgstr "Cuenta Samba" + + +msgid "samba account" +msgstr "cuenta samba" + + +msgid "New User Account" +msgstr "Nueva cuenta de usuario" + + +msgid "Hint: To customize this template, edit the file templates/creation/new_user_template.php" +msgstr "Nota: Para modificar esta plantilla, edite el fichero templates/creation/new_user_template.php" + + +msgid "First name" +msgstr "Nombre propio" + + +msgid "Last name" +msgstr "Apellido" + + +msgid "first" +msgstr "nombre propio" + + +msgid "last" +msgstr "apellido" + + +msgid "Common name" +msgstr "Nombre común" + + +msgid "User Name" +msgstr "Nombre de Usuario" + + +msgid "Encryption" +msgstr "Encriptación" + + +msgid "Login Shell" +msgstr "Shell de entrada" + + +msgid "Home Directory" +msgstr "Directorio de usuario" + + +msgid "UID Number" +msgstr "Número UID" + + +msgid "(automatically determined)" +msgstr "(determinado automáticamente)" + + +msgid "Group" +msgstr "Grupo" + + +msgid "GID Number" +msgstr "Número GID" + + +msgid "Your passwords don't match. Please go back and try again." +msgstr "Sus contraseñas no coinciden. Por favor, vuelva atrás e inténtelo de nuevon." + + +msgid "You cannot leave the %s blank. Please go back and try again." +msgstr "No puede dejar en blanco el %s. Por favor, vuelva atrás e inténtelo de nuevo." + + +msgid "You can only enter numeric values for the %s field. Please go back and try again." +msgstr "Sólo puede introducir valores numéricos en el campo %s. Por favor, vuelva atrás e inténtelo de nuevo." + + +msgid "The container you specified (%s) does not exist. Please go back and try again." +msgstr "El contenedor que ha especificado (%s) no existe. Por favor, vuelva atrás e inténtelo de nuevo." + + +msgid "Confirm account creation" +msgstr "Confirmar creación de cuenta" + + +msgid "[secret]" +msgstr "[secreta]" + + +msgid "Create Account" +msgstr "Crear cuenta" + + +msgid "New Address Book Entry" +msgstr "Nueva entrada en el libro de direcciones" + + +msgid "Organisation" +msgstr "Organización" + + +msgid "Address" +msgstr "Dirección" + + +msgid "City" +msgstr "Ciudad" + + +msgid "Postal code" +msgstr "Código postal" + + +msgid "Street" +msgstr "Calle" + + +msgid "Work phone" +msgstr "Teléfono de trabajo" + + +msgid "Fax" +msgstr "Fax" + + +msgid "Mobile" +msgstr "Móvil" + + +msgid "Email" +msgstr "Email" + + +msgid "You cannot leave the Common Name blank. Please go back and try again." +msgstr "No puede dejar el campo \"Nombre Común\" en blanco. Por favor, vuelva atrás e inténtelo de nuevo." + + +msgid "Confirm entry creation:" +msgstr "Confirmar creación de entrada:" + + +msgid "Create Address" +msgstr "Crear dirección" + + +msgid "Check password..." +msgstr "Compruebe la contraseña..." -#~ msgid "Confirm entry creation:" -#~ msgstr "Confirmar creación de entrada:" -#~ msgid "Create Address" -#~ msgstr "Crear dirección" diff --git a/locale/fi_FI/LC_MESSAGES/messages.mo b/locale/fi_FI/LC_MESSAGES/messages.mo index 42ec4fa64d5e1c3526d33fe2ae8abaff9b8a40f2..6a1d0083a5b35d1d8076c5bda5e901b7b499da06 100644 GIT binary patch delta 19158 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 CV!PA; delta 9609 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 NsfXJ7O-^@P{|Aq3{pJ7w diff --git a/locale/fi_FI/LC_MESSAGES/messages.po b/locale/fi_FI/LC_MESSAGES/messages.po index ac34d2d..a430437 100755 --- a/locale/fi_FI/LC_MESSAGES/messages.po +++ b/locale/fi_FI/LC_MESSAGES/messages.po @@ -8,68 +8,65 @@ msgstr "" "Project-Id-Version: messages_fi\n" "Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sf.net\n" "POT-Creation-Date: 2004-01-14 17:45+0200\n" -"PO-Revision-Date: 2008-03-24 16:27+0000\n" -"Last-Translator: Samuli Seppänen \n" -"Language-Team: \n" +"PO-Revision-Date: 2006-10-13 10:46+0300\n" +"Last-Translator: Samuli Seppänen \n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-11-29 23:48+0000\n" -"X-Generator: Launchpad (build Unknown)\n" +"X-Generator: KBabel 1.11.2\n" -#: ../../htdocs/mass_delete.php:86 +#: ../../htdocs/mass_delete.php:92 #, php-format msgid "%s of %s entries failed to be deleted." msgstr "%s / %s kohdan poisto epäonnistui." -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "" +#: ../../htdocs/template_engine.php:551 +msgid "(Auto evaluated on submission.)" +msgstr "(Tarkistetaan automaattisesti lähetettäessä.)" -#: ../../lib/HTMLTree.php:486 +#: ../../lib/tree_functions.php:287 msgid "(Session timed out. Automatically logged out.)" msgstr "(Istunto aikakatkaistiin)" -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr "" +#: ../../templates/creation/custom.php:26 +msgid "(example: cn=MyNewPerson)" +msgstr "(esimerkki: cn=MattiMalli)" -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" +#: ../../lib/functions.php:1124 +#, php-format +msgid "" +"
\n" +" \n" +"\t\n" +"\t\n" +"\t
\"Warning\"\n" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s\n" +"
Web server:%s
Please check and see " +"if this bug has been reported here.
If it hasnt been " +"reported, you may report this bug by clicking here.

" msgstr "" +"
\n" +" \n" +"\t\n" +"\t\n" +"\t
\"Warning\"\n" +" Löysit bugin phpLDAPadminista!
Virhe:%s (%s)
Tiedosto:%s rivi %s, kutsuja %s
Versiot:PLA: %s, PHP: %s, SAPI: %s\n" +"
Www-palvelin:%s
Tarkistathan ensin tästä napsauttamalla, ettei bugia ole jo raportoitu.
Napsauta tästä Jos bugia ei ole vielä raportoitu. Bugiraportit pitää tehdä englanniksi.

" -#: ../../lib/search_form_advanced.php:103 +#: ../../lib/search_form_advanced.php:81 msgid "A list of attributes to display in the results (comma-separated)" msgstr "Pilkuin eroteltu luettelo attribuuteista, jotka näytetään tuloksissa" -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 +#: ../../lib/template_functions.php:614 msgid "A random password was generated for you" msgstr "Sinulle luotiin satunnainen salasana" @@ -85,99 +82,92 @@ msgstr "Riville dn on annettava validi arvo." msgid "A valid newrdn attribute should be specified" msgstr "attribuutille newrdn on annettava validi arvo" -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 +#: ../../htdocs/add_attr_form.php:107 ../../htdocs/add_attr_form.php:155 msgid "Add" msgstr "Lisää" -#: ../../htdocs/add_value_form.php:182 +#: ../../htdocs/add_value_form.php:183 msgid "Add New Value" msgstr "Lisää uusi arvo" -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 +#: ../../htdocs/add_oclass_form.php:120 ../../htdocs/compare.php:533 msgid "Add ObjectClass and Attributes" msgstr "Lisää objektiluokka ja sen attribuutit" -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 +#: ../../htdocs/compare.php:544 ../../htdocs/template_engine.php:930 +#: ../../htdocs/template_engine.php:1106 #, php-format msgid "Add an additional value to attribute '%s'" msgstr "Lisää attribuutille %s toinen arvo" -#: ../../htdocs/add_value_form.php:93 +#: ../../htdocs/add_value_form.php:59 msgid "Add new" msgstr "Lisää uusi" -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 +#: ../../htdocs/add_value_form.php:149 ../../htdocs/compare.php:535 msgid "Add new ObjectClass" msgstr "Luo objektiluokka" -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 +#: ../../htdocs/add_attr_form.php:34 ../../htdocs/add_attr_form.php:73 +#: ../../templates/template_header.php:72 +#, php-format msgid "Add new attribute" msgstr "Uusi attribuutti" -#: ../../htdocs/add_attr_form.php:114 +#: ../../htdocs/add_attr_form.php:120 msgid "Add new binary attribute" msgstr "Uusi binäärinen attribuutti" -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "" - -#: ../../htdocs/ldif_import.php:62 +#: ../../htdocs/ldif_import.php:55 msgid "Adding..." msgstr "Lisätään..." -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 +#: ../../lib/search_form_advanced.php:29 +#: ../../lib/search_form_predefined.php:23 ../../lib/search_form_simple.php:25 msgid "Advanced Search Form" msgstr "Tarkka haku" -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "" - -#: ../../htdocs/schema.php:110 +#: ../../htdocs/schema.php:254 msgid "Aliases" msgstr "Aliakset" -#: ../../htdocs/mass_delete.php:88 +#: ../../htdocs/mass_delete.php:94 msgid "All entries deleted successfully." msgstr "Merkinnän poistaminen onnistui." -#: ../../lib/EntryWriter1.php:825 +#: ../../templates/template_header.php:107 #, php-format msgid "An attribute (%s) was modified and is highlighted below." msgstr "Muutettu attribuutti %s näkyy alla korostettuna." -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "" - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "" - -#: ../../htdocs/login.php:164 +#: ../../htdocs/login.php:162 ../../htdocs/login_form.php:74 msgid "Anonymous Bind" msgstr "Yhdistä anonyymisti" -#: ../../htdocs/delete_form.php:102 +#: ../../htdocs/delete_form.php:109 msgid "Are you sure you want to permanently delete this object?" msgstr "Haluatko varmasti poistaa tämän objektin?" -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 +#: ../../htdocs/compare.php:59 ../../htdocs/update_confirm.php:131 msgid "Attribute" msgstr "Attribuutti" -#: ../../htdocs/schema.php:42 +#: ../../htdocs/schema.php:55 ../../htdocs/schema.php:57 msgid "Attribute Types" msgstr "Attribuuttityypit" +#: ../../htdocs/template_engine.php:306 +#, php-format +msgid "" +"Attribute [%s] is a HIDDEN attribute, however, it is missing a VALUE in your " +"template." +msgstr "Attribuutti %s on merkitty piilotetuksi (HIDDEN), mutta mallissa siltä puuttuu arvo (VALUE)." + +#: ../../htdocs/template_engine.php:259 +#, php-format +msgid "Attribute [%s] is a MUST attribute, so it cannot be disabled." +msgstr "Attribuutti %s on merkitty pakolliseksi (MUST), joten sitä ei voi poistaa käytöstä." + #: ../../lib/ldif_functions.php:455 msgid "Attribute is not valid" msgstr "Attribuutti ei ole validi" @@ -186,44 +176,45 @@ msgstr "Attribuutti ei ole validi" msgid "Attribute not well formed" msgstr "Attribuutin muoto on virheellinen" -#: ../../htdocs/login_form.php:63 +#: ../../htdocs/login_form.php:97 msgid "Authenticate" msgstr "Tunnistaudu" -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "" +#: ../../htdocs/login_form.php:46 +#, php-format +msgid "Authenticate to server %s" +msgstr "Tunnistaudu palvelimelle %s" #: ../../htdocs/entry_chooser.php:65 msgid "Back Up..." msgstr "Takaisin..." -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 +#: ../../htdocs/login.php:97 ../../htdocs/login.php:133 +#: ../../lib/server_functions.php:347 msgid "Bad username or password. Please try again." msgstr "Virheellinen käyttäjänimi tai salasana. Yritä uudelleen." -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 +#: ../../htdocs/export_form.php:30 ../../lib/search_form_advanced.php:66 msgid "Base (base dn only)" msgstr "Base (vain base dn)" -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 +#: ../../htdocs/export_form.php:54 ../../lib/search_form_advanced.php:41 msgid "Base DN" msgstr "Base DN" -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 +#: ../../htdocs/search.php:260 +msgid "Base DN: " +msgstr "Base DN:" + +#: ../../htdocs/compare.php:280 ../../htdocs/template_engine.php:794 +#: ../../templates/template_header.php:141 msgid "Binary value" msgstr "Binääriarvo" +#: ../../htdocs/template_engine.php:537 +msgid "Binary value not displayed" +msgstr "Binääriarvoa ei näytetä" + #: ../../htdocs/copy.php:61 msgid "Building snapshot of tree to copy... " msgstr "Tehdään vedosta LDAP-puusta kopiointia varten... " @@ -232,776 +223,727 @@ msgstr "Tehdään vedosta LDAP-puusta kopiointia varten... " msgid "CSV (Spreadsheet)" msgstr "CVS (laskentataulukko)" -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 +#: ../../htdocs/delete_form.php:77 ../../htdocs/delete_form.php:134 +#: ../../htdocs/update_confirm.php:232 msgid "Cancel" msgstr "Peruuta" -#: ../../htdocs/compare.php:343 +#: ../../htdocs/compare.php:387 msgid "Check password" msgstr "Tarkista salasana" -#: ../../lib/EntryWriter1.php:2427 +#: ../../htdocs/template_engine.php:877 ../../htdocs/template_engine.php:918 msgid "Check password..." msgstr "Tarkista salasana..." -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "" +#: ../../htdocs/create_form.php:33 +msgid "Choose a template" +msgstr "Valitse malli" -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "" +#: ../../htdocs/search.php:109 +msgid "Click here to go to the login form" +msgstr "Napsauta tästä päästäksesi kirjautumisikkunaan" -#: ../../lib/functions.php:3223 +#: ../../lib/functions.php:2792 msgid "Click to popup a dialog to select a date graphically" msgstr "Napsauta tästä valitaksesi päivämäärän valikosta" -#: ../../lib/functions.php:2239 +#: ../../lib/functions.php:1641 msgid "Click to popup a dialog to select an entry (DN) graphically" msgstr "Napsauta tästä valitaksesi merkinnän (DN) valikosta" -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 +#: ../../htdocs/compare.php:166 ../../htdocs/server_info.php:86 +#: ../../htdocs/template_engine.php:745 +#: ../../templates/template_header.php:133 #, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "" +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "Napsauta tästä näyttääksesi skeeman määritelmän attribuuttityypille %s" -#: ../../htdocs/schema.php:106 +#: ../../htdocs/schema.php:225 msgid "Collective" msgstr "Jaettu" -#: ../../htdocs/update_confirm.php:303 +#: ../../htdocs/update_confirm.php:229 msgid "Commit" msgstr "Hyväksy" -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 +#: ../../htdocs/compare_form.php:36 ../../htdocs/compare_form.php:70 +#: ../../htdocs/password_checker.php:32 msgid "Compare" msgstr "Vertaa" -#: ../../htdocs/compare_form.php:21 +#: ../../htdocs/compare_form.php:28 msgid "Compare another DN with" msgstr "Vertaa DN:ä kohteeseen" -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 +#: ../../htdocs/compare_form.php:47 ../../htdocs/compare_form.php:59 msgid "Compare this DN with another" msgstr "Vertaa DN:ä toiseen" -#: ../../lib/EntryWriter1.php:776 +#: ../../templates/template_header.php:67 msgid "Compare with another entry" msgstr "Vertaa toiseen merkintään" -#: ../../htdocs/compare.php:42 +#: ../../htdocs/compare.php:54 msgid "Comparing the following DNs" msgstr "Verrataan seuraavia DN:ä" -#: ../../htdocs/export_form.php:84 +#: ../../htdocs/export_form.php:86 msgid "Compress" msgstr "Tiivistä" -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "" - -#: ../../htdocs/mass_delete.php:92 +#: ../../htdocs/mass_delete.php:100 #, php-format msgid "Confirm mass delete of %s entries on server %s" msgstr "Haluatko varmasti poistaa %s merkinnän palvelimelta %s" -#: ../../lib/EntryWriter1.php:327 +#: ../../lib/functions.php:1138 +#, php-format +msgid "" +"Congratulations! You found a bug in phpLDAPadmin.

\n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
\n" +"\t
\n" +"\t Please report this bug by clicking below!" +msgstr "" +"Onnittelut! Olet löytänyt bugin PHPLDAPadminista.

\n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t
Virhe:%s
Taso:%s
Tiedosto:%s
Rivi:%s
Kutsuja:%s
PLA:n versio:%s
PHP:n versio:%s
PHP SAPI:%s
Www-palvelin:%s
\n" +"\t
\n" +"\t Raportoi bugi (englanniksi) napsauttamalla alta!" + +#: ../../templates/creation/custom.php:29 msgid "Container" msgstr "Säilö" -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "" - #: ../../lib/ldif_functions.php:525 msgid "Container is null" msgstr "Säilö on tyhjä" -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 +#: ../../htdocs/copy_form.php:56 ../../htdocs/copy_form.php:62 msgid "Copy" msgstr "Kopioi" -#: ../../htdocs/copy_form.php:96 +#: ../../htdocs/copy_form.php:106 msgid "Copy " -msgstr "Kopioi " +msgstr "Kopioi" -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:741 +#: ../../templates/template_header.php:44 msgid "Copy or move this entry" msgstr "Kopioi tai siirrä merkintä" -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "" +#: ../../htdocs/copy.php:84 +msgid "Copy successful! Would you like to " +msgstr "Kopiointi onnistui! Haluatko " -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "" +#: ../../templates/template_header.php:44 +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Kopioi objekti toiseen paikkaan, toiselle DN:lle tai toiselle palvelimelle" -#: ../../htdocs/copy.php:57 +#: ../../htdocs/copy.php:57 ../../htdocs/copy.php:102 msgid "Copying " -msgstr "Kopioidaan " +msgstr "Kopioidaan" -#: ../../htdocs/ldif_import.php:70 +#: ../../htdocs/ldif_import.php:63 msgid "Could not add object:" msgstr "Objektin lisääminen epäonnistui:" -#: ../../htdocs/create.php:133 +#: ../../htdocs/create.php:158 msgid "Could not add the object to the LDAP server." msgstr "Objektin lisääminen LDAP-palvelimelle epäonnistui." -#: ../../htdocs/login.php:137 +#: ../../htdocs/login.php:131 msgid "Could not bind anonymously to server." msgstr "Palvelimeen yhdistäminen anonyymisti ei onnistunut." -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "" +#: ../../lib/server_functions.php:356 +msgid "Could not bind to the LDAP server." +msgstr "Yhdistäminen LDAP-palvelimeen epäonnistui." -#: ../../lib/server_functions.php:347 +#: ../../lib/server_functions.php:353 #, php-format msgid "Could not connect to \"%s\" on port \"%s\"" msgstr "Yhdistäminen palvelimen \"%s\" porttiin \"%s\" epäonnistui" -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "" +#: ../../htdocs/login.php:174 ../../lib/tree_functions.php:265 +msgid "Could not connect to LDAP server." +msgstr "Yhdistäminen LDAP-palvelimeen epäonnistui." -#: ../../htdocs/ldif_import.php:71 +#: ../../htdocs/ldif_import.php:64 msgid "Could not delete object:" msgstr "Objektin poistaminen epäonnistui:" -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 +#: ../../htdocs/delete.php:36 ../../htdocs/delete.php:51 +#: ../../htdocs/rdelete.php:52 #, php-format msgid "Could not delete the entry: %s" msgstr "Merkinnän %s poistaminen epäonnistui" -#: ../../htdocs/entry_chooser.php:101 +#: ../../htdocs/entry_chooser.php:98 msgid "Could not determine base DN" msgstr "Base DN:ä ei löytynyt" -#: ../../lib/HTMLTree.php:82 +#: ../../lib/tree_functions.php:222 msgid "Could not determine the root of your LDAP tree." msgstr "LDAP-puun juurta ei löytynyt." -#: ../../lib/functions.php:1849 +#: ../../lib/functions.php:1221 #, php-format msgid "Could not fetch jpeg data from LDAP server for attribute %s." msgstr "Attribuutin %s jpeg-datan noutaminen LDAP-palvelimelta epäonnistui." -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 +#: ../../htdocs/logout.php:23 ../../lib/timeout_functions.php:74 msgid "Could not logout." msgstr "Uloskirjautuminen epäonnistui." -#: ../../htdocs/ldif_import.php:74 +#: ../../htdocs/ldif_import.php:67 msgid "Could not modify object:" msgstr "Objektin muuttaminen epäonnistui:" -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 +#: ../../htdocs/add_oclass.php:60 ../../htdocs/add_value.php:68 msgid "Could not perform ldap_mod_add operation." msgstr "Toiminto ldap_mod_add epäonnistui." -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 +#: ../../htdocs/delete_attr.php:52 ../../htdocs/update.php:155 msgid "Could not perform ldap_modify operation." msgstr "Toiminto ldap_modify epäonnistui." -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 +#: ../../htdocs/ldif_import.php:65 ../../htdocs/ldif_import.php:66 msgid "Could not rename object:" msgstr "Objektin nimeäminen epäonnistui:" -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 +#: ../../htdocs/rename.php:59 ../../lib/server_functions.php:1545 msgid "Could not rename the entry" msgstr "Merkinnän uudelleenimeäminen epäonnistui" -#: ../../htdocs/schema.php:31 +#: ../../htdocs/schema.php:35 msgid "Could not retrieve schema from" msgstr "Ei voitu noutaa skeema kohteesta" -#: ../../htdocs/login.php:152 +#: ../../htdocs/login.php:139 msgid "Could not set cookie." msgstr "Evästeen tallentaminen epäonnistui." -#: ../../lib/server_functions.php:265 +#: ../../lib/server_functions.php:271 msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "" -"TLS:n käyttöönotto ei onnistunut. Tarkista LDAP-palvelimesi asetukset." +msgstr "TLS:n käyttöönotto ei onnistunut. Tarkista LDAP-palvelimesi asetukset." -#: ../../lib/functions.php:1864 +#: ../../lib/functions.php:1236 #, php-format msgid "" "Could not write to the $jpeg_temp_dir directory %s. Please verify that your " "web server can write files there." -msgstr "" -"Ei voitu kirjoittaa $jpeg_temp_dir hakemistoon %s. Tarkista, että www-" -"palvelimellasi on oikeus kirjoittaa kyseiseen hakemistoon." +msgstr "Ei voitu kirjoittaa $jpeg_temp_dir hakemistoon %s. Tarkista, että www-palvelimellasi on oikeus kirjoittaa kyseiseen hakemistoon." -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 +#: ../../htdocs/create_form.php:32 ../../htdocs/template_engine.php:493 +#: ../../htdocs/template_engine.php:557 +#: ../../templates/creation/custom.php:191 +#: ../../templates/template_header.php:171 msgid "Create Object" msgstr "Luo objekti" -#: ../../lib/EntryWriter1.php:783 +#: ../../templates/template_header.php:71 msgid "Create a child entry" msgstr "Uusi alamerkintä" -#: ../../lib/HTMLTree.php:463 +#: ../../lib/tree_functions.php:477 msgid "Create a new entry in" msgstr "Uusi merkintä kohteeseen" -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "" - -#: ../../lib/HTMLTree.php:70 +#: ../../lib/tree_functions.php:163 msgid "Create it?" msgstr "Luo pohjamerkintä nyt." -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 +#: ../../lib/tree_functions.php:477 msgid "Create new entry here" msgstr "Uusi merkintä" -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "" - -#: ../../htdocs/welcome.php:25 +#: ../../htdocs/welcome.php:31 msgid "Credits" msgstr "Credits" -#: ../../htdocs/add_value_form.php:112 +#: ../../htdocs/add_value_form.php:64 msgid "Current list of" msgstr "Tällä hetkellä" -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "" - -#: ../../htdocs/delete_form.php:107 +#: ../../htdocs/delete_form.php:112 msgid "DN" msgstr "DN" -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "" +#: ../../lib/functions.php:89 +#, php-format +msgid "DN \"%s\" is not an LDAP distinguished name." +msgstr "LDAP ei tunnista DN:ä \"%s\"." -#: ../../lib/export_functions.php:414 +#: ../../htdocs/template_engine.php:1028 +#, php-format +msgid "DN not available %s" +msgstr "DN puuttuu %s" + +#: ../../lib/export_functions.php:418 #, php-format msgid "DSLM Export for: %s" msgstr "Vie kohde %s DSLM:nä" -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "" - -#: ../../htdocs/delete_form.php:117 +#: ../../htdocs/delete_form.php:125 msgid "Delete" msgstr "Poista" -#: ../../htdocs/delete_form.php:27 +#: ../../htdocs/delete_form.php:32 #, php-format msgid "Delete %s" msgstr "Poista %s" -#: ../../lib/HTMLTree.php:139 +#: ../../lib/tree_functions.php:291 msgid "Delete Checked Entries" msgstr "Poista valitut merkinnät" -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "" - -#: ../../lib/functions.php:1871 +#: ../../lib/functions.php:1244 msgid "Delete Photo" msgstr "Poista valokuva" -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 +#: ../../htdocs/copy_form.php:96 ../../htdocs/copy_form.php:102 msgid "Delete after copy (move):" msgstr "Poista kopioinnin jälkeen (siirto):" -#: ../../htdocs/delete_form.php:68 +#: ../../htdocs/delete_form.php:69 #, php-format msgid "Delete all %s objects" msgstr "Poista kaikki %s objektia" -#: ../../lib/functions.php:1906 +#: ../../lib/functions.php:1279 msgid "Delete photo" msgstr "Poista valokuva" -#: ../../lib/EntryWriter1.php:763 +#: ../../templates/template_header.php:56 msgid "Delete this entry" msgstr "Poista merkintä" -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 +#: ../../htdocs/mass_delete.php:64 ../../htdocs/rdelete.php:34 +#: ../../htdocs/rdelete.php:60 ../../htdocs/rdelete.php:77 #, php-format msgid "Deleting %s" msgstr "Poistetaan %s" -#: ../../htdocs/ldif_import.php:63 +#: ../../htdocs/ldif_import.php:56 msgid "Deleting..." msgstr "Poistetaan..." -#: ../../htdocs/mass_delete.php:43 +#: ../../htdocs/mass_delete.php:46 #, php-format msgid "Deletion progress on server \"%s\"" msgstr "Poisto käynnissä palvelimella \"%s\"" -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 +#: ../../htdocs/add_value_form.php:187 ../../htdocs/ldif_import.php:103 +#: ../../htdocs/ldif_import.php:113 ../../htdocs/ldif_import.php:189 +#: ../../htdocs/schema.php:79 ../../htdocs/schema.php:150 +#: ../../htdocs/schema.php:409 msgid "Description" msgstr "Kuvaus" -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 +#: ../../lib/functions.php:1040 +#, php-format +msgid "Description: %s

" +msgstr "Kuvaus: %s

" + +#: ../../lib/functions.php:1044 +msgid "Description: (no description available)
" +msgstr "Kuvaus: (ei kuvausta saatavilla)
" + +#: ../../htdocs/compare_form.php:59 ../../htdocs/copy_form.php:74 msgid "Destination DN" msgstr "Kohde DN" -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 +#: ../../htdocs/compare_form.php:67 ../../htdocs/copy_form.php:80 msgid "Destination Server" msgstr "Kohdepalvelin" -#: ../../htdocs/copy.php:29 +#: ../../htdocs/copy.php:26 msgid "Destination server is currently READ-ONLY." msgstr "Kohdepalvelin on VAIN LUKU tilassa." -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 +#: ../../htdocs/add_attr_form.php:35 ../../htdocs/add_value_form.php:61 +#: ../../htdocs/compare.php:62 ../../htdocs/compare.php:65 +#: ../../htdocs/compare_form.php:31 ../../htdocs/copy_form.php:58 +#: ../../htdocs/delete_form.php:34 ../../htdocs/delete_form.php:112 +#: ../../htdocs/rename_form.php:32 ../../htdocs/update_confirm.php:31 +#: ../../templates/template_header.php:35 msgid "Distinguished Name" msgstr "Distinguished Name" -#: ../../htdocs/mass_delete.php:95 +#: ../../htdocs/mass_delete.php:103 #, php-format msgid "Do you really want to delete %s %s %s" msgstr "Haluatko varmasti poistaa %s %s %s" -#: ../../htdocs/update_confirm.php:190 +#: ../../htdocs/update_confirm.php:120 msgid "Do you want to make these changes?" msgstr "Haluatko tehdä seuraavat muutokset?" -#: ../../htdocs/welcome.php:30 +#: ../../htdocs/welcome.php:32 msgid "Documentation" msgstr "Ohjeet" -#: ../../htdocs/ldif_import_form.php:44 +#: ../../htdocs/ldif_import_form.php:40 ../../htdocs/ldif_import_form.php:50 msgid "Don't stop on errors" msgstr "Älä keskeytä kun kohdataan virhe" -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 +#: ../../htdocs/tree.php:92 ../../htdocs/tree.php:93 +#: ../../htdocs/welcome.php:33 msgid "Donate" msgstr "Tee lahjoitus" -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 +#: ../../htdocs/search.php:213 ../../lib/export_functions.php:256 msgid "Encountered an error while performing search." msgstr "Haku törmäsi virheeseen." -#: ../../htdocs/add_value_form.php:135 +#: ../../htdocs/add_value_form.php:130 msgid "Enter the value you would like to add:" msgstr "Lisättävä arvo:" -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "" +#: ../../htdocs/search.php:228 +msgid "Entries found: " +msgstr "Löytyneet merkinnät: " -#: ../../lib/export_functions.php:319 +#: ../../lib/export_functions.php:323 msgid "Entry" msgstr "Merkintä" -#: ../../htdocs/rdelete.php:42 +#: ../../htdocs/rdelete.php:49 #, php-format msgid "Entry %s and sub-tree deleted successfully." msgstr "Merkintä %s ja sen alamerkinnät poistettiin." -#: ../../htdocs/entry_chooser.php:19 +#: ../../htdocs/delete.php:47 +#, php-format +msgid "Entry %s deleted successfully." +msgstr "Merkintä %s poistettiin." + +#: ../../htdocs/entry_chooser.php:20 msgid "Entry Chooser" msgstr "Valitse merkintä" -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "" - -#: ../../htdocs/schema.php:101 +#: ../../htdocs/schema.php:183 msgid "Equality" msgstr "Vastaavuudet" -#: ../../lib/functions.php:130 ../../lib/functions.php:513 +#: ../../lib/functions.php:1019 msgid "Error" msgstr "Virhe" #: ../../htdocs/mass_delete.php:30 msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "" -"Virhe tiedostossa mass_delete.php. Muuttuja mass_delete puuttuu POST-" -"muuttujista." +msgstr "Virhe tiedostossa mass_delete.php. Muuttuja mass_delete puuttuu POST-muuttujista." -#: ../../htdocs/ldif_import.php:118 +#: ../../htdocs/ldif_import.php:111 msgid "Error code" msgstr "Virheen koodi" -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "" +#: ../../lib/functions.php:1038 +#, php-format +msgid "Error number: %s (%s)" +msgstr "Virheen numero: %s (%s)" -#: ../../lib/server_functions.php:95 +#: ../../lib/functions.php:1042 ../../lib/functions.php:1048 +#, php-format +msgid "Error number: %s

" +msgstr "Virheen numero: %s

" + +#: ../../htdocs/login_form.php:20 +#, php-format +msgid "" +"Error: You have an error in your config file. The only three allowed values\n" +" for auth_type in the $servers section " +"are 'session', 'cookie', and 'config'. You entered '%s',\n" +" which is not allowed. " +msgstr "" +"Virhe: asetustiedoston osassa $servers kentän auth_type arvoksi on\n" +" annettu'%s'. Ainoastaan arvot 'session', 'cookie' ja config'\n" +" ovat sallittuja." + +#: ../../lib/server_functions.php:121 #, php-format msgid "" "Error: You have an error in your config file. The only three allowed values " "for auth_type in the $servers section are 'session', 'cookie', and 'config'. " "You entered '%s', which is not allowed." -msgstr "" -"Virhe: Asetustiedostossa on virhe. Osiossa $servers sijaitseva muuttuja " -"auth_type voi saada arvokseen joko 'session', 'cookie' ja 'config'. " -"Tämänhetkinen arvo, (%s), ei kelpaa." +msgstr "Virhe: Asetustiedostossa on virhe. Osiossa $servers sijaitseva muuttuja auth_type voi saada arvokseen joko 'session', 'cookie' ja 'config'. Tämänhetkinen arvo, (%s), ei kelpaa." -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 +#: ../../htdocs/export_form.php:39 ../../htdocs/export_form.php:48 +#: ../../templates/template_header.php:41 msgid "Export" msgstr "Vie" -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "" - -#: ../../htdocs/export_form.php:97 +#: ../../htdocs/export_form.php:99 msgid "Export format" msgstr "Viennin tiedostomuoto" -#: ../../lib/EntryWriter1.php:804 +#: ../../templates/template_header.php:88 msgid "Export subtree" msgstr "Vie LDAP-haara" -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 +#: ../../htdocs/ldif_import.php:96 ../../htdocs/ldif_import.php:109 +#: ../../htdocs/ldif_import.php:138 ../../htdocs/ldif_import.php:152 +#: ../../htdocs/mass_delete.php:77 msgid "Failed" msgstr "Epäonnistui" -#: ../../htdocs/add_attr.php:128 +#: ../../htdocs/add_attr.php:127 msgid "Failed to add the attribute." msgstr "Attribuutin lisääminen epäonnistui." -#: ../../htdocs/copy.php:144 +#: ../../htdocs/copy.php:154 msgid "Failed to copy DN: " -msgstr "DN:n kopiointi epäonnistui " +msgstr "DN:n kopiointi epäonnistui" -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 +#: ../../htdocs/rdelete.php:70 ../../htdocs/rdelete.php:87 #, php-format msgid "Failed to delete entry %s" msgstr "Merkinnän %s poistaminen epäonnistui" -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 +#: ../../htdocs/ldif_import.php:47 msgid "File" msgstr "Tiedosto" -#: ../../htdocs/copy_form.php:81 +#: ../../htdocs/copy_form.php:91 msgid "Filter" msgstr "Suodin" -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "" +#: ../../htdocs/search.php:262 +msgid "Filter performed: " +msgstr "Käytetty suodin: " -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - -#: ../../htdocs/search.php:276 +#: ../../htdocs/search.php:240 msgid "Format" msgstr "Muoto" -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "" - -#: ../../lib/export_functions.php:195 +#: ../../lib/export_functions.php:197 #, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" msgstr "Luotu phpLDAPadminilla ( http://phpldapadmin.sourceforge.net/ ) %s" -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 +#: ../../htdocs/schema.php:125 ../../htdocs/schema.php:316 +#: ../../htdocs/schema.php:361 ../../htdocs/schema.php:393 msgid "Go" msgstr "Siirry" -#: ../../htdocs/update_confirm.php:330 +#: ../../htdocs/update_confirm.php:243 msgid "Go back" msgstr "Takaisin" -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "" - -#: ../../htdocs/compare.php:403 +#: ../../htdocs/compare.php:455 ../../htdocs/template_engine.php:1025 #, php-format msgid "Go to %s" msgstr "Siirry kohteeseen %s" -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "" - -#: ../../lib/functions.php:359 +#: ../../htdocs/tree.php:96 ../../htdocs/tree.php:97 msgid "Help" msgstr "Ohje" -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "" - -#: ../../lib/EntryWriter1.php:749 +#: ../../templates/template_header.php:47 msgid "Hide internal attributes" msgstr "Piilota sisäiset attribuutit" -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "" - -#: ../../htdocs/copy_form.php:102 +#: ../../htdocs/copy_form.php:119 msgid "" "Hint: Copying between different servers only works if there are no schema " "violations" -msgstr "" -"Vihje: Tietojen kopiointi palvelimien välillä onnistuu vain, jos skeemat " -"vastaavat toisiaan" +msgstr "Vihje: Tietojen kopiointi palvelimien välillä onnistuu vain, jos skeemat vastaavat toisiaan" -#: ../../lib/EntryWriter1.php:809 +#: ../../templates/template_header.php:62 msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "" -"Vihje: Poistaaksesi attribuutin tyhjennä tekstikenttä ja napsauta \"Tallenna " -"muutokset\"." +msgstr "Vihje: Poistaaksesi attribuutin tyhjennä tekstikenttä ja napsauta \"Tallenna muutokset\"." -#: ../../lib/EntryWriter1.php:815 +#: ../../templates/template_header.php:94 msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "" -"Vihje: Näyttääksesi attribuutin käyttämän skeeman, napsauta sen nimeä." +msgstr "Vihje: Näyttääksesi attribuutin käyttämän skeeman, napsauta sen nimeä." -#: ../../lib/EntryWriter1.php:357 +#: ../../templates/creation/custom.php:53 msgid "" "Hint: You must choose exactly one structural objectClass (shown in bold " "above)" -msgstr "" -"Vihje: Rakenteellisista objektiluokista (yllä lihavoituna) on valittava " -"tasan yksi" +msgstr "Vihje: Rakenteellisista objektiluokista (yllä lihavoituna) on valittava tasan yksi" -#: ../../lib/functions.php:347 +#: ../../htdocs/tree.php:79 ../../htdocs/tree.php:80 msgid "Home" msgstr "Pääsivu" -#: ../../htdocs/ldif_import.php:195 +#: ../../htdocs/ldif_import.php:194 #, php-format msgid "If so, please report it." msgstr "Jos näin on, raportoi asiasta." -#: ../../htdocs/search.php:215 +#: ../../htdocs/search.php:176 msgid "" "If you want to add your own criteria to the list. Be sure to edit search.php " "to handle them. Quitting." -msgstr "" -"Jos lisäät luotteloon omia hakuehtojasi, merkitse ne tiedostoon search.php. " -"Poistutaan." +msgstr "Jos lisäät luotteloon omia hakuehtojasi, merkitse ne tiedostoon search.php. Poistutaan." -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 +#: ../../htdocs/ldif_import.php:44 ../../htdocs/ldif_import_form.php:30 msgid "Import LDIF File" msgstr "Tuo LDIF-tiedosto" -#: ../../lib/HTMLTree.php:256 +#: ../../lib/tree_functions.php:71 msgid "Import entries from an LDIF file" msgstr "Tuo merkintöjä LDIF-tiedostosta" -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" - -#: ../../lib/HTMLTree.php:161 +#: ../../lib/tree_functions.php:46 #, php-format msgid "Inactivity will log you off at %s" msgstr "Toimeton istunto katkaistaan %s" -#: ../../htdocs/export_form.php:78 +#: ../../htdocs/export_form.php:80 msgid "Include system attributes" msgstr "Ota mukaan järjestelmän attribuutit" -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 +#: ../../htdocs/schema.php:470 ../../htdocs/schema.php:496 msgid "Inherited from" msgstr "Periytyy kohteesta" -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 +#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:416 msgid "Inherits from" msgstr "Periytyy kohteesta" -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "" +#: ../../htdocs/add_oclass_form.php:94 +msgid "" +"Instructions: In order to add these objectClass(es) to this entry, you must " +"specify" +msgstr "Ohje: Lisätäksesi nämä objektiluokat tähän merkintään sinun on määritettävä" -#: ../../lib/server_functions.php:344 +#: ../../lib/server_functions.php:350 msgid "Insufficient access rights." msgstr "Puutteelliset käyttöoikeudet." -#: ../../htdocs/rename.php:47 +#: ../../htdocs/rename.php:45 msgid "Invalid RDN value" msgstr "Virheellinen RDN-arvo" -#: ../../htdocs/export.php:44 +#: ../../htdocs/export.php:42 msgid "Invalid export format" msgstr "Virheellinen viennin tiedostomuoto" -#: ../../htdocs/ldif_import.php:195 +#: ../../htdocs/ldif_import.php:194 msgid "Is this a phpLDAPadmin bug?" msgstr "Onkohan tämä phpLDAPadminin bugi?" -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "" -"Vaikuttaa siltä, että LDAP-palvelin on asetettu piilottamaan " -"juurihakemistonsa." +#: ../../lib/functions.php:1056 +#, php-format +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "Onkohan tämä phpLDAPadminin bugi? Jos on, tee bugiraportti." -#: ../../lib/server_functions.php:312 +#: ../../lib/tree_functions.php:222 +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Vaikuttaa siltä, että LDAP-palvelin on asetettu piilottamaan juurihakemistonsa." + +#: ../../lib/server_functions.php:318 #, php-format msgid "" "It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " "expression." -msgstr "" -"Vaikuttaa siltä, että sasl_authz_id_regex \"%s\".\" sisältää virheellisen " -"Perl-tyyppisen säännöllisen lausekkeen." +msgstr "Vaikuttaa siltä, että sasl_authz_id_regex \"%s\".\" sisältää virheellisen Perl-tyyppisen säännöllisen lausekkeen." -#: ../../htdocs/schema.php:302 +#: ../../htdocs/schema.php:299 msgid "Jump to a matching rule" msgstr "Siirry täsmäyssääntöön" -#: ../../htdocs/schema.php:121 +#: ../../htdocs/schema.php:111 msgid "Jump to an attribute type" msgstr "Siirry attribuuttityyppiin" -#: ../../htdocs/schema.php:381 +#: ../../htdocs/schema.php:378 msgid "Jump to an objectClass" msgstr "Siirry objektiluokkaan" -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 +#: ../../htdocs/schema.php:423 ../../htdocs/schema.php:442 msgid "Jump to this objectClass definition" msgstr "Siirry tämän objektiluokan määritykseen" -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "" +#: ../../lib/functions.php:1029 +#, php-format +msgid "LDAP said: %s" +msgstr "LDAP:n tuloste: %s" -#: ../../lib/export_functions.php:309 +#: ../../lib/export_functions.php:313 #, php-format msgid "LDIF Export for: %s" msgstr "LDIF-vienti merkinnälle: %s" -#: ../../htdocs/ldif_import.php:187 +#: ../../htdocs/ldif_import.php:186 msgid "LDIF Parse Error" msgstr "LDIF-tiedoston tulkkaaminen epäonnistui" -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 +#: ../../htdocs/ldif_import.php:101 ../../htdocs/ldif_import.php:190 msgid "Line" msgstr "Rivi" -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 +#: ../../htdocs/ldif_import.php:99 ../../htdocs/ldif_import.php:191 msgid "Line Number" msgstr "Rivinumero" -#: ../../htdocs/export_form.php:111 +#: ../../htdocs/export_form.php:113 msgid "Line ends" msgstr "Rivin loppu" -#: ../../htdocs/delete_form.php:87 +#: ../../htdocs/delete_form.php:92 msgid "List of entries to be deleted:" msgstr "Luettelo poistettavista merkinnöistä:" -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "" +#: ../../lib/tree_functions.php:81 +msgid "Logged in as: " +msgstr "Käyttäjä: " -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 +#: ../../htdocs/logout.php:45 +#, php-format +msgid "Logged out successfully from server %s" +msgstr "Kirjauduttiin ulos palvelimelta %s" + +#: ../../htdocs/update.php:136 msgid "Login" msgstr "Kirjaudu" -#: ../../htdocs/login_form.php:46 +#: ../../htdocs/login_form.php:84 msgid "Login DN" msgstr "Kirjaudu DN:än" -#: ../../htdocs/timeout.php:37 +#: ../../htdocs/timeout.php:33 ../../lib/tree_functions.php:283 msgid "Login..." msgstr "Kirjaudu..." -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "" - -#: ../../lib/HTMLTree.php:272 +#: ../../lib/tree_functions.php:75 msgid "Logout of this server" msgstr "Kirjaudu ulos palvelimelta" -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "" +#: ../../htdocs/entry_chooser.php:35 +msgid "Looking in: " +msgstr "Tarkastellaan kohdetta: " -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "" - -#: ../../htdocs/copy_form.php:88 +#: ../../htdocs/copy_form.php:98 msgid "Make sure your filter (above) will select all child records." msgstr "Varmista, että suotimesi (yllä) valitsee myös kaikki alamerkinnät." -#: ../../htdocs/mass_delete.php:51 +#: ../../htdocs/mass_delete.php:54 msgid "Malformed mass_delete array." msgstr "Virheellinen mass_delete-taulukko." -#: ../../htdocs/mass_delete.php:40 +#: ../../htdocs/mass_delete.php:43 msgid "Mass Deleting" msgstr "Massapoisto" @@ -1009,124 +951,104 @@ msgstr "Massapoisto" msgid "" "Mass deletion is not enabled. Please enable it in config.php before " "proceeding." -msgstr "" -"Massapoisto ei ole käytössä. Se voin ottaa käyttöön muokkaamalla tiedostoa " -"config.php." +msgstr "Massapoisto ei ole käytössä. Se voin ottaa käyttöön muokkaamalla tiedostoa config.php." -#: ../../htdocs/schema.php:323 +#: ../../htdocs/schema.php:321 msgid "Matching Rule OID" msgstr "OID" -#: ../../htdocs/schema.php:44 +#: ../../htdocs/schema.php:65 ../../htdocs/schema.php:67 msgid "Matching Rules" msgstr "Täsmäyssäännöt" -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 +#: ../../htdocs/add_value_form.php:194 ../../htdocs/schema.php:240 msgid "Maximum Length" msgstr "Maksimipituus" -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 +#: ../../htdocs/ldif_import_form.php:42 ../../htdocs/template_engine.php:364 msgid "Maximum file size" msgstr "Tiedoston maksimikoko" -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "" +#: ../../htdocs/add_attr_form.php:161 +#, php-format +msgid "Maximum file size: %s" +msgstr "Tiedoston maksimikoko: %s" -#: ../../lib/template_functions.php:419 +#: ../../lib/template_functions.php:385 #, php-format msgid "Missing %s in the XML file." msgstr "XML-tiedostosta puuttu %s." #: ../../lib/ldif_functions.php:169 msgid "Missing attibutes or changetype attribute for entry" -msgstr "" -"Merkinnästä puuttuu joko \"changetype\"-attribuutti tai jokin muu attribuutti" +msgstr "Merkinnästä puuttuu joko \"changetype\"-attribuutti tai jokin muu attribuutti" #: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 msgid "Missing attributes for the entry" msgstr "Merkinnästä puuttuu attribuutteja" -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "" - -#: ../../htdocs/ldif_import.php:34 +#: ../../htdocs/ldif_import.php:33 msgid "Missing uploaded file." msgstr "Kopioitava tiedosto puuttuu." -#: ../../htdocs/update.php:154 +#: ../../htdocs/update.php:132 msgid "Modification successful!" msgstr "Muutos onnistui!" -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "" - -#: ../../htdocs/ldif_import.php:66 +#: ../../htdocs/ldif_import.php:59 msgid "Modifying..." msgstr "Muokataan..." -#: ../../htdocs/schema.php:323 +#: ../../htdocs/schema.php:321 msgid "Name" msgstr "Nimi" -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 +#: ../../htdocs/add_oclass_form.php:88 ../../htdocs/add_oclass_form.php:109 msgid "New Required Attributes" msgstr "Uudet välttämättömät attribuutit" -#: ../../htdocs/update_confirm.php:202 +#: ../../htdocs/update_confirm.php:131 msgid "New Value" msgstr "Uusi arvo" -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 +#: ../../htdocs/template_engine.php:561 +msgid "Next Page" +msgstr "Seuraava sivu" + +#: ../../htdocs/schema.php:164 ../../htdocs/schema.php:221 +#: ../../htdocs/schema.php:226 ../../htdocs/schema.php:231 msgid "No" msgstr "Ei" -#: ../../htdocs/delete_attr.php:28 +#: ../../htdocs/template_engine.php:336 +msgid "No DISPLAY/DESCRIPTION attribute in template file" +msgstr "Mallitiedostosta puuttuu attribuutti DISPLAY/DESCRIPTION" + +#: ../../htdocs/delete_attr.php:29 msgid "No DN specified" msgstr "DN puuttuu" -#: ../../htdocs/ldif_import.php:38 +#: ../../htdocs/ldif_import.php:34 msgid "No LDIF file specified. Please try again." msgstr "LDIF-tiedosto puuttuu. Yritä uudelleen." -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 +#: ../../htdocs/compare.php:210 ../../htdocs/compare.php:223 msgid "No Value" msgstr "Arvo puuttuu" -#: ../../htdocs/delete_attr.php:31 +#: ../../htdocs/delete_attr.php:32 msgid "No attribute name specified." msgstr "Attribuutin nimi puuttuu." -#: ../../htdocs/export.php:88 +#: ../../htdocs/export.php:86 msgid "No available exporter found." msgstr "Tarvittava vientimoduuli puuttuu." -#: ../../htdocs/purge_cache.php:26 +#: ../../htdocs/purge_cache.php:29 msgid "No cache to purge." msgstr "Ei tyhjennettävää välimuistia." -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 +#: ../../templates/template_header.php:163 msgid "No internal attributes" msgstr "Ei sisäisiä attribuutteja" @@ -1134,21 +1056,20 @@ msgstr "Ei sisäisiä attribuutteja" msgid "No one is logged in to that server." msgstr "Kukaan ei ole kirjautunut palvelimelle." -#: ../../lib/search_form_predefined.php:42 +#: ../../lib/search_form_predefined.php:29 msgid "No queries have been defined in config.php." msgstr "Yhtäkään kyselyä ei ole määritetty tiedostossa config.php." -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 +#: ../../htdocs/compare.php:32 ../../htdocs/compare.php:34 +#: ../../htdocs/delete.php:30 ../../htdocs/download_binary_attr.php:26 +#: ../../htdocs/rdelete.php:29 ../../htdocs/template_engine.php:42 #, php-format msgid "No such entry: %s" msgstr "Merkintä puuttuu: %s" -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "" +#: ../../htdocs/view_jpeg_photo.php:24 +msgid "No such file: " +msgstr "Tiedosto puuttuu: " #: ../../htdocs/schema.php:515 #, php-format @@ -1159,177 +1080,180 @@ msgstr "Skeemasta puuttuu kohta: \"%s\"" msgid "No version found. Assuming 1." msgstr "Versionumero puuttuu. Käytetään 1:stä." -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "" -"Palvelimelle kirjautumiseen tarvittavia tietoja puuttuu. Tarkista " -"asetustiedostot." +#: ../../htdocs/add_attr.php:26 ../../htdocs/add_attr_form.php:22 +#: ../../htdocs/add_oclass.php:27 ../../htdocs/add_oclass_form.php:28 +#: ../../htdocs/add_value.php:27 ../../htdocs/add_value_form.php:24 +#: ../../htdocs/compare.php:25 ../../htdocs/compare.php:29 +#: ../../htdocs/compare_form.php:18 ../../htdocs/copy.php:29 +#: ../../htdocs/copy_form.php:22 ../../htdocs/create.php:28 +#: ../../htdocs/create_form.php:23 ../../htdocs/delete.php:22 +#: ../../htdocs/delete_attr.php:23 ../../htdocs/delete_form.php:23 +#: ../../htdocs/download_binary_attr.php:17 ../../htdocs/entry_chooser.php:43 +#: ../../htdocs/expand.php:24 ../../htdocs/export.php:17 +#: ../../htdocs/ldif_import.php:19 ../../htdocs/ldif_import_form.php:24 +#: ../../htdocs/mass_delete.php:26 ../../htdocs/rdelete.php:22 +#: ../../htdocs/rename.php:23 ../../htdocs/rename_form.php:22 +#: ../../htdocs/schema.php:22 ../../htdocs/search.php:25 +#: ../../htdocs/server_info.php:50 ../../htdocs/template_engine.php:19 +#: ../../htdocs/template_engine.php:39 ../../htdocs/update.php:43 +#: ../../templates/creation/custom.php:9 +msgid "Not enough information to login to server. Please check your configuration." +msgstr "Palvelimelle kirjautumiseen tarvittavia tietoja puuttuu. Tarkista asetustiedostot." -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 +#: ../../templates/creation/custom.php:150 msgid "Note" msgstr "Huomautus" -#: ../../htdocs/add_value_form.php:160 +#: ../../htdocs/compare.php:127 ../../htdocs/template_engine.php:694 +#, php-format +msgid "Note: '%s' is an alias for '%s'" +msgstr "Huom: '%s' on alias '%s':lle" + +#: ../../htdocs/add_value_form.php:154 msgid "" "Note: You may be required to enter new attributes that these objectClass(es) " "require" -msgstr "" -"Huom: Joudut ehkä määrittämään objektiluokkien tarvitsemat uudet attribuutit" +msgstr "Huom: Joudut ehkä määrittämään objektiluokkien tarvitsemat uudet attribuutit" + +#: ../../htdocs/add_value_form.php:75 ../../htdocs/add_value_form.php:100 +msgid "" +"Note: You will get an \"inappropriate matching\" error if you have not setup " +"an EQUALITY rule on your LDAP server for this attribute." +msgstr "Huom: Saat virheilmoituksen \"inappropriate matching\" ellet ole määrittänyt tälle attribuutille EQUALITY-sääntöä LDAP-palvelimen asetuksissa." #: ../../htdocs/delete_form.php:59 msgid "" "Note: this is potentially very dangerous and you do this at your own risk. " "This operation cannot be undone. Take into consideration aliases, referrals, " "and other things that may cause problems." -msgstr "" -"Huom: Tämä toiminto on erittäin vaarallinen, eikä sitä voi perua. Joudut " -"siis tekemään sen omalla riskilläsi. Ota huomioon aliakset, viittaukset ja " -"muut mahdollisesti seikat, jotka voivat aiheuttaa ongelmia." +msgstr "Huom: Tämä toiminto on erittäin vaarallinen, eikä sitä voi perua. Joudut siis tekemään sen omalla riskilläsi. Ota huomioon aliakset, viittaukset ja muut mahdollisesti seikat, jotka voivat aiheuttaa ongelmia." -#: ../../htdocs/search.php:310 +#: ../../htdocs/search.php:274 msgid "Notice, search size limit exceeded." msgstr "Hakutuloksien maksimimäärä ylittyi." -#: ../../htdocs/schema.php:407 +#: ../../htdocs/schema.php:406 msgid "OID" msgstr "OID" -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 +#: ../../htdocs/schema.php:50 ../../htdocs/schema.php:52 +#: ../../templates/creation/custom.php:35 msgid "ObjectClasses" msgstr "Objektiluokat" -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" - -#: ../../lib/template_functions.php:273 +#: ../../lib/template_functions.php:238 msgid "ObjectClasses in XML dont exist in LDAP server." msgstr "XML:n sisältämiä objektiluokkia ei löydy LDAP-palvelimelta." -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 +#: ../../htdocs/schema.php:163 ../../htdocs/schema.php:339 msgid "Obsolete" msgstr "Vanhentunut" -#: ../../htdocs/update_confirm.php:202 +#: ../../htdocs/update_confirm.php:131 msgid "Old Value" msgstr "Vanha arvo" -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 +#: ../../htdocs/export_form.php:31 ../../lib/search_form_advanced.php:63 msgid "One (one level beneath base)" msgstr "One (yksi taso päätason alapuolella)" -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 +#: ../../htdocs/schema.php:454 ../../templates/creation/custom.php:165 msgid "Optional Attributes" msgstr "Valinnaiset attribuutit" -#: ../../htdocs/schema.php:34 +#: ../../templates/creation/custom.php:180 +msgid "Optional Binary Attributes" +msgstr "Valinnaiset binääriset attribuutit" + +#: ../../htdocs/schema.php:38 msgid "Or lastly, your LDAP server doesnt provide this information." msgstr "Voi myös olla, ettei LDAP-palvelimesi tarjoa näitä tietoja." -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "" - -#: ../../htdocs/schema.php:102 +#: ../../htdocs/schema.php:191 msgid "Ordering" msgstr "Järjestys" -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 +#: ../../htdocs/search.php:288 ../../htdocs/search.php:326 +#: ../../htdocs/template_engine.php:576 #, php-format msgid "Page %d" msgstr "Sivu %d" -#: ../../htdocs/schema.php:433 +#: ../../htdocs/schema.php:432 msgid "Parent to" msgstr "Yläluokka kohteille" -#: ../../htdocs/login_form.php:53 +#: ../../htdocs/login_form.php:92 msgid "Password" msgstr "Salasana" -#: ../../htdocs/password_checker.php:27 +#: ../../htdocs/password_checker.php:26 msgid "Password Checker Tool" msgstr "Salasanan tarkistustyökalu" -#: ../../htdocs/password_checker.php:57 +#: ../../htdocs/password_checker.php:47 msgid "Passwords do not match!" msgstr "Salasanat eivät täsmää!" -#: ../../htdocs/password_checker.php:55 +#: ../../htdocs/password_checker.php:45 msgid "Passwords match!" msgstr "Salasanat täsmäävät!" -#: ../../htdocs/delete_form.php:35 +#: ../../htdocs/ldif_import_form.php:46 +msgid "Paste your LDIF here" +msgstr "Liitä LDIF-tiedostosi tähän" + +#: ../../htdocs/delete_form.php:40 msgid "Permanently delete all children also?" msgstr "Poista lopullisesti myös kaikki alamerkinnät?" -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "" - -#: ../../lib/functions.php:1855 +#: ../../lib/functions.php:1227 msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" -"Tiedostossa config.php olevan muuttujan $jpeg_temp_dir arvoksi on valittava " -"hakemisto, johon on kirjoitusoikeudet" +"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config." +"php" +msgstr "Tiedostossa config.php olevan muuttujan $jpeg_temp_dir arvoksi on valittava hakemisto, johon on kirjoitusoikeudet" -#: ../../lib/HTMLTree.php:84 +#: ../../lib/tree_functions.php:222 msgid "Please specify it in config.php" msgstr "Määritettävä tiedostossa config.php" -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 +#: ../../lib/search_form_advanced.php:31 +#: ../../lib/search_form_predefined.php:20 ../../lib/search_form_simple.php:26 msgid "Predefined Searches" msgstr "Valmiit haut" -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 +#: ../../templates/creation/custom.php:55 msgid "Proceed >>" msgstr "Eteenpäin >>" -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 +#: ../../htdocs/create_form.php:130 ../../htdocs/export_form.php:128 +#: ../../htdocs/ldif_import_form.php:41 ../../htdocs/ldif_import_form.php:51 +#: ../../htdocs/template_engine.php:565 msgid "Proceed >>" msgstr "Eteenpäin >>" -#: ../../lib/functions.php:349 +#: ../../htdocs/tree.php:82 msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "" -"Tyhjennä kaikki phpLDAPadminin välimuistiin tallennettu data, myös " -"palvelimen skeemat." +msgstr "Tyhjennä kaikki phpLDAPadminin välimuistiin tallennettu data, myös palvelimen skeemat." -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "" - -#: ../../lib/functions.php:349 +#: ../../htdocs/tree.php:81 ../../htdocs/tree.php:82 msgid "Purge caches" msgstr "Tyhjennä välimuistit" -#: ../../htdocs/purge_cache.php:28 +#: ../../htdocs/purge_cache.php:31 #, php-format msgid "Purged %s bytes of cache." msgstr "Tyhjennetty %s tavua välimuistista." -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 +#: ../../templates/creation/custom.php:25 +msgid "RDN" +msgstr "RDN" + +#: ../../htdocs/compare.php:572 ../../htdocs/template_engine.php:1145 msgid "Really delete attribute" msgstr "Poistetaanko attribuutti" -#: ../../htdocs/copy_form.php:75 +#: ../../htdocs/copy_form.php:85 msgid "Recursive copy" msgstr "Rekursiivinen kopiointi" @@ -1337,305 +1261,257 @@ msgstr "Rekursiivinen kopiointi" msgid "Recursive copy progress" msgstr "Rekursiivinen kopiointi käynnissä" -#: ../../htdocs/rdelete.php:31 +#: ../../htdocs/rdelete.php:35 msgid "Recursive delete progress" msgstr "Rekursiivinen poisto käynnissä" -#: ../../htdocs/copy_form.php:77 +#: ../../htdocs/copy_form.php:87 msgid "Recursively copy all children of this object as well." msgstr "Kopioi kaikki objektin alaluokat rekursiivisesti." -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 +#: ../../htdocs/create.php:154 ../../htdocs/rename.php:74 +msgid "Redirecting..." +msgstr "Uudelleenohjataan..." + +#: ../../templates/template_header.php:40 msgid "Refresh" msgstr "Päivitä" -#: ../../lib/HTMLTree.php:240 +#: ../../lib/tree_functions.php:69 msgid "Refresh all expanded containers for" msgstr "Päivitä kaikki avatut säilöt kohteelle" -#: ../../lib/EntryWriter1.php:726 +#: ../../templates/template_header.php:40 msgid "Refresh this entry" msgstr "Päivitä merkintä" -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "" +#: ../../templates/creation/custom.php:25 +msgid "Relative Distinguished Name" +msgstr "Relative Distinguished Name" -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 +#: ../../htdocs/rename_form.php:38 ../../templates/template_header.php:57 msgid "Rename" msgstr "Nimeä uudelleen" -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 +#: ../../htdocs/rename_form.php:30 msgid "Rename Entry" msgstr "Nimeä merkintä uudelleen" -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 +#: ../../htdocs/ldif_import.php:57 ../../htdocs/ldif_import.php:58 msgid "Renaming..." msgstr "Nimetään uudelleen..." -#: ../../lib/functions.php:353 +#: ../../htdocs/tree.php:89 msgid "Report a bug" msgstr "Raportoi bugi" -#: ../../lib/functions.php:351 +#: ../../htdocs/tree.php:87 msgid "Request feature" msgstr "Tee muutosehdotus" -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 +#: ../../htdocs/schema.php:453 ../../templates/creation/custom.php:139 msgid "Required Attributes" msgstr "Pakolliset attribuutit" -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 +#: ../../htdocs/compare.php:175 ../../htdocs/template_engine.php:719 #, php-format msgid "Required attribute for objectClass(es) %s" msgstr "Pakolliset attribuutit objektiluokille %s" -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 +#: ../../htdocs/compare.php:561 ../../htdocs/template_engine.php:1122 msgid "Save Changes" msgstr "Tallenna muutokset" -#: ../../lib/EntryWriter1.php:733 +#: ../../templates/template_header.php:41 msgid "Save a dump of this object" msgstr "Tee objektista vedos" -#: ../../lib/EntryWriter1.php:804 +#: ../../templates/template_header.php:88 msgid "Save a dump of this object and all of its children" msgstr "Tee objektista ja sen alaobjekteista vedos" -#: ../../htdocs/export_form.php:81 +#: ../../htdocs/export_form.php:83 msgid "Save as file" msgstr "Tallenna tiedostona" -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "" - -#: ../../htdocs/schema.php:37 +#: ../../htdocs/schema.php:43 msgid "Schema for server" msgstr "Skeema palvelimelle" -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 +#: ../../lib/search_form_advanced.php:91 +#: ../../lib/search_form_predefined.php:57 ../../lib/search_form_simple.php:57 msgid "Search" msgstr "Etsi" -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 +#: ../../htdocs/export_form.php:74 ../../lib/export_functions.php:200 +#: ../../lib/search_form_advanced.php:75 msgid "Search Filter" msgstr "Hakusuodin" -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 +#: ../../htdocs/export_form.php:61 ../../lib/export_functions.php:199 +#: ../../lib/search_form_advanced.php:56 msgid "Search Scope" msgstr "Hakualue (scope)" -#: ../../lib/search_form_simple.php:53 +#: ../../lib/search_form_simple.php:32 msgid "Search for entries whose" msgstr "Etsi merkintöjä joiden" -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "" +#: ../../htdocs/search.php:357 +msgid "Search performed by phpLDAPadmin in" +msgstr "Haun teki phpLDAPadmin kohteessa" -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 +#: ../../htdocs/search.php:180 +msgid "Searching..." +msgstr "Etsitään..." + +#: ../../htdocs/add_attr.php:61 ../../htdocs/add_attr.php:81 +#: ../../htdocs/add_attr.php:86 msgid "Security error: The file being uploaded may be malicious." msgstr "Tietoturvavaroitus: Kopioitava tiedosto saattaa olla vahingollinen." -#: ../../lib/search_form_predefined.php:46 +#: ../../lib/search_form_predefined.php:38 msgid "Select a predefined search" msgstr "Valitse valmis haku" -#: ../../lib/EntryWriter1.php:1021 +#: ../../htdocs/create_form.php:34 msgid "Select a template for the creation process" msgstr "Valitse luonnissa käytettävä malli" -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:32 +#: ../../htdocs/ldif_import_form.php:34 msgid "Select an LDIF file" msgstr "Valitse LDIF-tiedosto" -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 +#: ../../htdocs/add_attr_form.php:35 ../../htdocs/add_value_form.php:61 +#: ../../htdocs/compare.php:62 ../../htdocs/compare.php:65 +#: ../../htdocs/compare_form.php:29 ../../htdocs/copy_form.php:57 +#: ../../htdocs/create_form.php:40 ../../htdocs/delete_form.php:34 +#: ../../htdocs/delete_form.php:114 ../../htdocs/export_form.php:51 +#: ../../htdocs/ldif_import.php:46 ../../htdocs/ldif_import_form.php:31 +#: ../../htdocs/rename_form.php:32 ../../htdocs/update_confirm.php:31 +#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:36 +#: ../../lib/search_form_simple.php:30 ../../lib/tree_functions.php:40 +#: ../../templates/template_header.php:35 +#: ../../templates/template_header.php:173 msgid "Server" msgstr "Palvelin" -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "" - -#: ../../htdocs/server_info.php:66 +#: ../../htdocs/server_info.php:69 msgid "Server info for: " msgstr "Tiedot palvelimesta: " -#: ../../htdocs/server_info.php:67 +#: ../../htdocs/server_info.php:70 msgid "Server reports the following information about itself" msgstr "Palvelimen antamat tiedot" -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "" +#: ../../htdocs/entry_chooser.php:33 +msgid "Server: " +msgstr "Palvelin: " -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 +#: ../../htdocs/export_form.php:77 ../../lib/search_form_advanced.php:82 msgid "Show Attributtes" msgstr "Näytä attribuutit" -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "" - -#: ../../lib/EntryWriter1.php:755 +#: ../../templates/template_header.php:50 msgid "Show internal attributes" msgstr "Näytä sisäiset attribuutit" -#: ../../htdocs/search.php:318 +#: ../../htdocs/search.php:282 #, php-format msgid "Showing results %s through %s." msgstr "Näytetään tulokset %s - %s." -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 +#: ../../lib/search_form_advanced.php:30 +#: ../../lib/search_form_predefined.php:22 ../../lib/search_form_simple.php:24 msgid "Simple Search Form" msgstr "Perushaku" -#: ../../htdocs/update.php:156 +#: ../../htdocs/update.php:134 msgid "" "Since you changed your password, you must now login again with your new " "password." -msgstr "" -"Salasana vaihdettu. Nyt sinun on kirjauduttava sisään uudella salasanallasi." +msgstr "Salasana vaihdettu. Nyt sinun on kirjauduttava sisään uudella salasanallasi." -#: ../../htdocs/schema.php:105 +#: ../../htdocs/schema.php:220 msgid "Single Valued" msgstr "Vain yksi arvo" -#: ../../htdocs/update_confirm.php:202 +#: ../../htdocs/update_confirm.php:131 msgid "Skip" msgstr "Ohita" -#: ../../lib/EntryWriter1.php:826 +#: ../../templates/template_header.php:108 #, php-format msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "" -"Joitain attribuutteja (%s) on muutettu ja ne näkyvät alla korostettuna." +msgstr "Joitain attribuutteja (%s) on muutettu ja ne näkyvät alla korostettuna." -#: ../../htdocs/login.php:117 +#: ../../htdocs/login.php:115 msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." msgstr "Tämän LDAP-palvelimen kanssa ei voi käyttää phpLDAPadminia." -#: ../../htdocs/compare_form.php:41 +#: ../../htdocs/compare_form.php:47 msgid "Source DN" msgstr "Lähde DN" -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "" - -#: ../../lib/search_form_advanced.php:97 +#: ../../lib/search_form_advanced.php:74 msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" msgstr "Standardi LDAP-hakusuodin. Esimerkki: (&(sn=Smith)(givenname=David))" -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "" +#: ../../templates/creation/custom.php:17 +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "1 / 2: Nimi ja objektiluokat" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 +#: ../../templates/creation/custom.php:128 +msgid "Step 2 of 2: Specify attributes and values" +msgstr "2 / 2: Attribuuttien ja niiden arvojen määrittäminen" + +#: ../../htdocs/export_form.php:32 ../../lib/search_form_advanced.php:60 msgid "Sub (entire subtree)" msgstr "Sub (koko alahaara)" -#: ../../htdocs/schema.php:103 +#: ../../htdocs/schema.php:197 msgid "Substring Rule" msgstr "Alimerkkijonosääntö" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 +#: ../../htdocs/copy.php:66 ../../htdocs/copy.php:110 +#: ../../htdocs/ldif_import.php:107 ../../htdocs/ldif_import.php:132 +#: ../../htdocs/mass_delete.php:73 ../../htdocs/rdelete.php:66 +#: ../../htdocs/rdelete.php:83 msgid "Success" msgstr "Onnistui" -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "" +#: ../../htdocs/login.php:159 +#, php-format +msgid "Successfully logged into server %s" +msgstr "Kirjautuneena palvelimelle %s" -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "" - -#: ../../htdocs/compare.php:64 +#: ../../htdocs/compare.php:75 msgid "Switch Entry" msgstr "Vaihda merkintää" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 +#: ../../htdocs/add_value_form.php:190 ../../htdocs/schema.php:203 msgid "Syntax" msgstr "Syntaksi" -#: ../../htdocs/schema.php:70 +#: ../../htdocs/schema.php:79 msgid "Syntax OID" msgstr "OID" -#: ../../htdocs/schema.php:43 +#: ../../htdocs/schema.php:60 ../../htdocs/schema.php:62 msgid "Syntaxes" msgstr "Syntaksit" -#: ../../lib/EntryWriter1.php:519 +#: ../../htdocs/create_form.php:43 msgid "Template" msgstr "Malli" -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" - -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "" - -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "" - -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 +#: ../../htdocs/add_value.php:38 ../../htdocs/delete_attr.php:37 +#: ../../htdocs/update.php:94 #, php-format msgid "" "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " "configuration." -msgstr "" -"Attribuutti \"%s\" on merkitty vain luettavaksi phpLDAPadminin " -"asetustiedostoissa." - -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "" +msgstr "Attribuutti \"%s\" on merkitty vain luettavaksi phpLDAPadminin asetustiedostoissa." #: ../../lib/ldif_functions.php:410 msgid "The attribute name should be add, delete or replace" @@ -1647,93 +1523,63 @@ msgstr "Attribuutin nimen pitää olla \"newsuperior\"" #: ../../lib/ldif_functions.php:448 #, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." +msgid "The attribute to modify doesnt match the one specified by the %s attribute." msgstr "Muokattava attribuuttiei ole sama kuin attribuutin %s määrittämä." -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "" - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "" - -#: ../../htdocs/create.php:39 +#: ../../templates/creation/custom.php:65 #, php-format msgid "The container you specified (%s) does not exist. Please try again." msgstr "Määrittämääsi säilöä (%s) ei ole olemassa. Yritä uudelleen." -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "" - -#: ../../htdocs/copy.php:50 +#: ../../htdocs/copy.php:49 #, php-format msgid "The destination container (%s) does not exist." msgstr "Kohdesäilöä (%s) ei ole olemassa." -#: ../../htdocs/copy.php:47 +#: ../../htdocs/copy.php:46 #, php-format msgid "The destination entry (%s) already exists." msgstr "Kohdemerkintä (%s) on jo olemassa." -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "" - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "" - #: ../../lib/ldif_functions.php:483 msgid "The entry is not valid" msgstr "Virheellinen merkintä" -#: ../../htdocs/add_attr.php:56 +#: ../../htdocs/add_attr.php:53 msgid "" "The file you chose is either empty or does not exist. Please go back and try " "again." msgstr "Tiedosto on joko tyhjä tai sitä ei ole olemassa." -#: ../../htdocs/add_attr.php:75 +#: ../../htdocs/add_attr.php:73 msgid "" "The file you selected was only partially uploaded, likley due to a network " "error." -msgstr "" -"Valitsemasi tiedosto kopioitui vain osittain. Siinä oli luultavimmin verkon " -"toiminnan virhe." +msgstr "Valitsemasi tiedosto kopioitui vain osittain. Siinä oli luultavimmin verkon toiminnan virhe." -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 +#: ../../htdocs/add_attr.php:65 ../../htdocs/add_attr.php:69 msgid "" "The file you uploaded is too large. Please check php.ini, upload_max_size " "setting" -msgstr "" -"Kopioimasi tiedosto on liian suuri. Tarkista php.ini -tiedoston muuttuja " -"upload_max_size" +msgstr "Kopioimasi tiedosto on liian suuri. Tarkista php.ini -tiedoston muuttuja upload_max_size" -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" +#: ../../htdocs/copy_form.php:74 +msgid "The full DN of the new entry to be created when copying the source entry" msgstr "Kopioitaessa luotavan uuden merkinnän täydellinen DN" -#: ../../lib/search_form_advanced.php:80 +#: ../../lib/search_form_advanced.php:56 msgid "The scope in which to search" msgstr "Alue (scope), johon haku kohdistetaan" -#: ../../htdocs/search.php:371 +#: ../../htdocs/search.php:335 msgid "The search found no results." msgstr "Haku ei tuottanut tuloksia." -#: ../../htdocs/schema.php:32 +#: ../../htdocs/schema.php:36 msgid "The server does not fully support the LDAP protocol." msgstr "Palvelin ei tue LDAP-protokollaa täydellisesti." -#: ../../htdocs/copy.php:44 +#: ../../htdocs/copy.php:43 msgid "The source and destination DN are the same." msgstr "Lähde- ja kohde-DN ovat samoja." @@ -1741,146 +1587,97 @@ msgstr "Lähde- ja kohde-DN ovat samoja." msgid "The url attribute value should begin with file:///" msgstr "URL:n pitäisi alkaa merkkijonolla file:///" -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:76 +#: ../../htdocs/add_oclass_form.php:89 msgid "This action requires you to add" msgstr "Tässä toiminnossa sinun on lisättävä" -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 +#: ../../htdocs/compare.php:185 ../../htdocs/template_engine.php:753 msgid "" "This attribute has been flagged as read only by the phpLDAPadmin " "administrator" msgstr "PhpLDAPadminin ylläpitäjä on merkinnyt attribuutin vain luettevaksi" -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "" - -#: ../../lib/EntryWriter1.php:1971 +#: ../../htdocs/template_engine.php:727 msgid "This attribute is required for the RDN." msgstr "Attribuutti tarvitaan RND:ä varten." -#: ../../lib/HTMLTree.php:70 +#: ../../lib/tree_functions.php:163 msgid "This base entry does not exist." msgstr "Pohjamerkintä puuttuu." -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" +#: ../../htdocs/schema.php:36 +msgid "This could happen for several reasons, the most probable of which are:" msgstr "Syitä voi olla monia, mutta luultavimpia ovat seuraavat:" -#: ../../lib/search_form_advanced.php:74 +#: ../../lib/search_form_advanced.php:50 msgid "This entry does not exist." msgstr "Merkintää ei ole olemassa." -#: ../../htdocs/compare.php:70 +#: ../../htdocs/compare.php:82 msgid "This entry has no attributes" msgstr "Merkinnälle ei ole määritetty attribuutteja" -#: ../../htdocs/delete_form.php:46 +#: ../../htdocs/delete_form.php:50 #, php-format msgid "This entry is the root of a sub-tree containing %s entries." msgstr "Merkinnällä on %s alamerkintää." -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 +#: ../../htdocs/compare.php:442 ../../htdocs/template_engine.php:1015 +#, php-format msgid "This is a structural ObjectClass and cannot be removed." msgstr "Tämä on rakenteellinen objektiluokka eikä sitä voi poistaa." -#: ../../lib/search_form_advanced.php:71 +#: ../../lib/search_form_advanced.php:47 msgid "This is not a valid DN." msgstr "Virheellinen DN." -#: ../../htdocs/schema.php:415 +#: ../../htdocs/schema.php:414 msgid "This objectClass is obsolete." msgstr "Objektiluokka on vanhentunut." -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "" - -#: ../../htdocs/server_info.php:71 +#: ../../htdocs/server_info.php:74 msgid "This server has nothing to report." msgstr "Palvelin ei raportoi mitään." -#: ../../lib/EntryWriter1.php:1073 +#: ../../htdocs/create_form.php:110 +msgid "This template has been disabled in the XML file." +msgstr "Malli on poistettu käytöstä XML-tiedostossa." + +#: ../../htdocs/create_form.php:113 msgid "This template is not allowed in this container." msgstr "Tätä mallia ei voi käyttää tässä säilössä." -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "" - -#: ../../htdocs/password_checker.php:41 +#: ../../htdocs/password_checker.php:36 msgid "To" msgstr "" -#: ../../htdocs/timeout.php:36 +#: ../../htdocs/timeout.php:32 msgid "To log back in please click on the following link:" msgstr "Kirjautuaksesi uudelleen sisään napsauta seuraavaa linkkiä:" -#: ../../lib/export_functions.php:199 +#: ../../lib/export_functions.php:201 msgid "Total Entries" msgstr "Merkintöjä yhteensä" -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "" - -#: ../../htdocs/schema.php:412 +#: ../../htdocs/schema.php:411 msgid "Type" msgstr "Tyyppi" -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 +#: ../../lib/functions.php:442 #, php-format msgid "" "Unable to bind to %s with your with auto_uid credentials. Please " "check your configuration file." -msgstr "" -"Yhdistäminen kohteeseen %s auto_uid -valtuuksilla epäonnistui. " -"Tarkista asetustiedostosi." +msgstr "Yhdistäminen kohteeseen %s auto_uid -valtuuksilla epäonnistui. Tarkista asetustiedostosi." -#: ../../lib/server_functions.php:2852 +#: ../../lib/server_functions.php:2711 #, php-format msgid "" "Unable to bind to %s with your with unique_attrs credentials. Please " "check your configuration file." -msgstr "" -"Yhdistäminen kohteeseen %s unique_attr -valtuuksilla epäonnistui. " -"Tarkista asetustiedostosi." +msgstr "Yhdistäminen kohteeseen %s unique_attr -valtuuksilla epäonnistui. Tarkista asetustiedostosi." -#: ../../htdocs/mass_delete.php:23 +#: ../../htdocs/mass_delete.php:24 msgid "Unable to delete, server is in READY-ONLY mode." msgstr "Poistaminen epäonnistui, koska palvelin on VAIN LUKU -tilassa." @@ -1892,507 +1689,425 @@ msgstr "Tiedoston aukaiseminen epäonnistui" msgid "Unable to read file" msgstr "Tiedoston lukeminen epäonnistui" -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 +#: ../../htdocs/login_form.php:24 ../../htdocs/logout.php:32 +#: ../../lib/server_functions.php:2015 ../../lib/server_functions.php:2087 +#: ../../lib/server_functions.php:2369 ../../lib/server_functions.php:2420 #, php-format msgid "Unknown auth_type: %s" msgstr "Tuntematon auth_type: %s" -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "" - -#: ../../htdocs/search.php:214 +#: ../../htdocs/search.php:176 msgid "Unrecognized criteria option: " msgstr "Tuntematon ehto: " -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "" +#: ../../lib/functions.php:1119 +msgid "Unrecognized error number: " +msgstr "Tuntematon virhe: " -#: ../../htdocs/search.php:383 +#: ../../htdocs/search.php:348 #, php-format msgid "Unrecognized search result format: %s" msgstr "Tuntematon hakutuloksen muoto: %s" -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "" +#: ../../htdocs/view_jpeg_photo.php:17 +msgid "Unsafe file name: " +msgstr "Turvaton tiedostonimi: " -#: ../../htdocs/ldif_import.php:42 +#: ../../htdocs/ldif_import.php:35 msgid "Uploaded LDIF file is empty." msgstr "Kopioitu LDIF-tiedosto on tyhjä." -#: ../../htdocs/schema.php:108 +#: ../../htdocs/schema.php:235 msgid "Usage" msgstr "Käyttö" -#: ../../htdocs/welcome.php:18 +#: ../../htdocs/welcome.php:24 msgid "Use the menu to the left to navigate" msgstr "Käytä navigointiin vasemmanpuoleista valikkoa" -#: ../../htdocs/schema.php:323 +#: ../../htdocs/schema.php:321 msgid "Used by Attributes" msgstr "Käytössä attribuuteissa" -#: ../../htdocs/schema.php:111 +#: ../../htdocs/schema.php:269 msgid "Used by objectClasses" msgstr "Käytössä objektiluokissa" -#: ../../htdocs/schema.php:107 +#: ../../htdocs/schema.php:230 msgid "User Modification" msgstr "Käyttäjän muokattavissa" -#: ../../lib/EntryWriter1.php:797 +#: ../../htdocs/login_form.php:82 +msgid "User name" +msgstr "Käyttäjänimi" + +#: ../../htdocs/template_engine.php:420 ../../htdocs/template_engine.php:422 +msgid "Verify" +msgstr "Tarkista" + +#: ../../templates/template_header.php:87 #, php-format msgid "View %s children" msgstr "%s alamerkintää" -#: ../../lib/EntryWriter1.php:797 +#: ../../templates/template_header.php:87 msgid "View 1 child" msgstr "1 alamerkintä" -#: ../../lib/HTMLTree.php:224 +#: ../../lib/tree_functions.php:67 msgid "View schema for" msgstr "Näytä skeema kohteelle" -#: ../../lib/HTMLTree.php:248 +#: ../../lib/tree_functions.php:70 msgid "View server-supplied information" msgstr "Näytä palvelimen antamat tiedot" -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 +#: ../../htdocs/compare.php:437 ../../htdocs/template_engine.php:1008 msgid "View the schema description for this objectClass" msgstr "Näytä tämänobjektiluokan skeeman kuvaus" -#: ../../lib/EntryWriter1.php:819 +#: ../../templates/template_header.php:100 msgid "Viewing entry in read-only mode." msgstr "Näytetään merkintä vain luku -tilassa." -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" +#: ../../htdocs/login_form.php:53 +msgid "Warning: This web connection is unencrypted." +msgstr "Varoitus: Web-yhteys on salaamaton." -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "" +#: ../../htdocs/template_engine.php:488 +#, php-format +msgid "We are missing a page for [%s] attributes." +msgstr "Joistain attribuuteista [%s] puuttuu sivu." -#: ../../htdocs/copy_form.php:81 +#: ../../htdocs/copy_form.php:91 msgid "" "When performing a recursive copy, only copy those entries which match this " "filter" -msgstr "" -"Kopioi rekursiivisesti ainoastaan merkinnät, jotka löytyvät näkyvät tällä " -"suotimella" +msgstr "Kopioi rekursiivisesti ainoastaan merkinnät, jotka löytyvät näkyvät tällä suotimella" -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 +#: ../../htdocs/schema.php:164 ../../htdocs/schema.php:221 +#: ../../htdocs/schema.php:226 ../../htdocs/schema.php:231 msgid "Yes" msgstr "Kyllä" -#: ../../htdocs/mass_delete.php:107 +#: ../../htdocs/mass_delete.php:115 msgid "Yes, delete!" msgstr "Kyllä, poista!" -#: ../../htdocs/login_form.php:27 +#: ../../htdocs/login_form.php:52 msgid "" "You are not using 'https'. Web browser will transmit login information in " "clear text." -msgstr "" -"Et käytä 'https'-prokollaa. Www-selaimesi lähettää kirjautumistiedot " -"salaamattomana tekstinä." +msgstr "Et käytä 'https'-prokollaa. Www-selaimesi lähettää kirjautumistiedot salaamattomana tekstinä." -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 +#: ../../htdocs/add_attr.php:24 ../../htdocs/add_attr_form.php:20 +#: ../../htdocs/add_oclass.php:25 ../../htdocs/add_oclass_form.php:26 +#: ../../htdocs/add_value.php:25 ../../htdocs/add_value_form.php:22 +#: ../../htdocs/copy_form.php:20 ../../htdocs/create.php:26 +#: ../../htdocs/create_form.php:21 ../../htdocs/delete.php:20 +#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete_form.php:21 +#: ../../htdocs/download_binary_attr.php:15 +#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/rdelete.php:20 +#: ../../htdocs/rename.php:21 ../../htdocs/rename_form.php:20 +#: ../../htdocs/update.php:41 ../../htdocs/update_confirm.php:20 msgid "You cannot perform updates while server is in read-only mode" msgstr "Päivityksiä ei voi tehdä palvelimen ollessa vain luku -tilassa" -#: ../../htdocs/rename.php:31 +#: ../../htdocs/rename.php:29 msgid "" "You cannot rename an entry which has children entries (eg, the rename " "operation is not allowed on non-leaf entries)" msgstr "Et voi nimetä uudelleen merkintää, jolla on alamerkintöjä" -#: ../../htdocs/rename.php:39 +#: ../../htdocs/rename.php:37 msgid "You did not change the RDN" msgstr "Et vaihtanut RDN:n arvoa" -#: ../../htdocs/add_oclass_form.php:30 +#: ../../htdocs/add_oclass_form.php:31 ../../templates/creation/custom.php:70 msgid "" "You did not select any ObjectClasses for this object. Please go back and do " "so." msgstr "Kohteelle täytyy valita vähintään yksi objektiluokka." -#: ../../htdocs/mass_delete.php:55 +#: ../../htdocs/mass_delete.php:58 msgid "You did not select any entries to delete." msgstr "Yhtään poistettavaa merkintää ei ole valittu." -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "" - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - -#: ../../htdocs/search.php:149 +#: ../../htdocs/search.php:109 msgid "" "You have not logged into the selected server yet, so you cannot perform " "searches on it." msgstr "Hakuja ei voi tehdä ennenkuin on kirjautunut LDAP-palvelimelle." -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "" - -#: ../../htdocs/create.php:58 +#: ../../templates/creation/custom.php:61 msgid "You left the RDN field blank." msgstr "RDN-kentän arvo puuttuu." -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 +#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:77 msgid "You left the attribute value blank. Please go back and try again." msgstr "Attribuutille on annettava arvo." -#: ../../htdocs/copy.php:41 +#: ../../htdocs/copy.php:40 msgid "You left the destination DN blank." msgstr "Kohde DN -kentän arvo puuttuu." -#: ../../htdocs/login.php:27 +#: ../../htdocs/login.php:36 msgid "You left the password blank." msgstr "Salasana -kentän arvo puuttuu." -#: ../../htdocs/create.php:73 +#: ../../htdocs/create.php:64 #, php-format msgid "You left the value blank for required attribute (%s)." msgstr "Pakollisen attribuutin (%s) arvo puuttuu." -#: ../../htdocs/update_confirm.php:326 +#: ../../htdocs/update_confirm.php:241 msgid "You made no changes" msgstr "Et tehnyt mitään muutoksia" -#: ../../htdocs/export.php:43 +#: ../../htdocs/export.php:40 msgid "You must choose an export format." msgstr "Viennin tiedostomuoto on määritettävä." -#: ../../htdocs/ldif_import.php:47 +#: ../../htdocs/ldif_import.php:38 msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "" -"LDIF-tiedosto on joko kopioitava tai liitettävänä tekstinä tekstikenttään." +msgstr "LDIF-tiedosto on joko kopioitava tai liitettävänä tekstinä tekstikenttään." -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 +#: ../../htdocs/delete.php:27 ../../htdocs/rdelete.php:26 msgid "You must specify a DN" msgstr "DN on määritettävä" -#: ../../htdocs/compare.php:469 +#: ../../htdocs/compare.php:535 +#, php-format +msgid "You need one of the following ObjectClass(es) to add this attribute %s." +msgstr "Tarvitset jonkin seuraavista objektiluokista lisätäksesi attribuutin %s." + +#: ../../htdocs/index.php:76 #, php-format msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "" -"Tarvitset jonkin seuraavista objektiluokista lisätäksesi attribuutin %s." +"You need to configure phpLDAPadmin. Edit the file \"%s\" to do so. An " +"example config file is provided in \"%s.example\"." +msgstr "PhpLDAPadminin asetukset ovat tekemättä. Asetukset tallennetaan tiedostoon \"%s\". Mallina voi käyttää tiedostoa \"%s.example\"." -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" - -#: ../../lib/functions.php:1305 +#: ../../lib/functions.php:502 #, php-format msgid "" "You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." +" in your configration. Only \"uidpool\" " +"and \"search\" are valid.\n" +" Please correct this problem." msgstr "" +"Muuttujalla auto_uid_number_mechanism on virheellinen arvo (\"%s\")\n" +" asetustiedostoissa. Muuttujan arvoksi kelpaavat vain \"uidpool\" ja \"search\".\n" +" Ole hyvä ja korjaa asia." -#: ../../lib/functions.php:1163 +#: ../../lib/functions.php:422 #, php-format msgid "" "You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." +" configuration for server %s, but you " +"did not specify the\n" +" \"auto_uid_number_search_base\". Please " +"specify it before proceeding." msgstr "" +"Muuttujalle \"auto_uid_number_mechanism\" on arvo \"search\",\n" +" palvelimen %s asetustiedostossa, mutta et ole määrittänyt muuttujaa\n" +" \"auto_uid_number_search_base\"." -#: ../../lib/EntryWriter1.php:763 +#: ../../templates/template_header.php:56 msgid "You will be prompted to confirm this decision" msgstr "Tähän toimintoon tullaan pyytämään vahvistus" -#: ../../htdocs/add_attr_form.php:152 +#: ../../htdocs/add_attr_form.php:158 ../../htdocs/template_engine.php:360 msgid "" "Your PHP configuration has disabled file uploads. Please check php.ini " "before proceeding." -msgstr "" -"Tiedostojen kopiointi on estetty PHP:n asetustiedostossa. Tarkista php.ini " -"ennenkuin jatkat." +msgstr "Tiedostojen kopiointi on estetty PHP:n asetustiedostossa. Tarkista php.ini ennenkuin jatkat." -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" -"PHP-asennus ei tue mhash()-funktiota, eikä SHA-tiivisteiden luominen onnistu." +#: ../../lib/functions.php:1353 ../../lib/functions.php:1364 +#: ../../lib/functions.php:1375 ../../lib/functions.php:1423 +#: ../../lib/functions.php:1441 +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "PHP-asennus ei tue mhash()-funktiota, eikä SHA-tiivisteiden luominen onnistu." -#: ../../lib/server_functions.php:264 +#: ../../lib/server_functions.php:270 msgid "Your PHP install does not support TLS." msgstr "PHP-asennus ei tue TLS:ä." -#: ../../lib/server_functions.php:279 +#: ../../lib/server_functions.php:285 msgid "" "Your PHP installation does not support ldap_sasl_bind() function. This " "function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" -"PHP-asennus ei tue ldap_sasl_bind()-funktiota. Kyseinen funktio löytyy PHP:n " -"5.x -versioista, joiden kääntämisessä on käytetty vipua --with-ldap-sasl." +msgstr "PHP-asennus ei tue ldap_sasl_bind()-funktiota. Kyseinen funktio löytyy PHP:n 5.x -versioista, joiden kääntämisessä on käytetty vipua --with-ldap-sasl." -#: ../../htdocs/ldif_import_form.php:16 +#: ../../htdocs/ldif_import_form.php:19 msgid "" "Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " "PHP." -msgstr "" -"Kopiointi ei onnistu jos PHP.INI -tiedostosta puuttuu rivi \"file_uploads = " -"ON\"." +msgstr "Kopiointi ei onnistu jos PHP.INI -tiedostosta puuttuu rivi \"file_uploads = ON\"." -#: ../../htdocs/timeout.php:33 +#: ../../htdocs/timeout.php:29 msgid "Your Session timed out after" msgstr "Istunto aikakatkaistiin kun oli kulunut" -#: ../../htdocs/update.php:92 +#: ../../htdocs/update.php:83 #, php-format msgid "" "Your attempt to add %s (%s) to
%s
is NOT " "allowed. That attribute/value belongs to another entry.

You might like to " "search for that entry." -msgstr "" -"Lisäämistä kohteesta %s (%s) kohteeseen
%s
ei " -"sallita. Kyseinen attribuutti/arvo kuuluu toiseen merkintään.

Haluat ehkä " -"etsiä kyseisen merkinnän." +msgstr "Lisäämistä kohteesta %s (%s) kohteeseen
%s
ei sallita. Kyseinen attribuutti/arvo kuuluu toiseen merkintään.

Haluat ehkä etsiä kyseisen merkinnän." -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 +#: ../../htdocs/add_attr.php:48 ../../htdocs/add_oclass.php:51 +#: ../../htdocs/add_value.php:57 ../../htdocs/create.php:118 #, php-format msgid "" "Your attempt to add %s (%s) to
%s
is NOT " "allowed. That attribute/value belongs to another entry.

You might like to " "search for that entry." -msgstr "" -"Lisäämistä kohteesta %s (%s) kohteeseen
%s
ei " -"sallita. Kyseinen attribuutti/arvo kuuluu toiseen merkintään.

Haluat ehkä " -"etsiä kyseisen merkinnän." +msgstr "Lisäämistä kohteesta %s (%s) kohteeseen
%s
ei sallita. Kyseinen attribuutti/arvo kuuluu toiseen merkintään.

Haluat ehkä etsiä kyseisen merkinnän." -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "" +#: ../../lib/functions.php:2048 +#, php-format +msgid "" +"Your config.php specifies an invalid value for $default_search_display: %s. " +"Please fix it" +msgstr "Tiedostossa config.php on määritetty virheellinen arvo (%s) muuttujalle $default_search_display" -#: ../../lib/functions.php:1172 +#: ../../lib/functions.php:431 #, php-format msgid "" "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " "for server %s" -msgstr "" -"Palvelimen %s auto_uid_search_base on virheellinen. Tarkista phpLDAPadminin " -"asetukset" +msgstr "Palvelimen %s auto_uid_search_base on virheellinen. Tarkista phpLDAPadminin asetukset" -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 +#: ../../lib/functions.php:1334 ../../lib/functions.php:1468 msgid "Your system crypt library does not support blowfish encryption." msgstr "Käyttöjärjestelmäsi salauskirjasto ei tue blowfish-salausta." -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 +#: ../../lib/functions.php:1320 ../../lib/functions.php:1498 msgid "Your system crypt library does not support extended DES encryption." msgstr "Käyttöjärjestelmäsi salauskirjasto ei tue laajennettua DES-salausta." -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 +#: ../../lib/functions.php:1327 ../../lib/functions.php:1483 msgid "Your system crypt library does not support md5crypt encryption." msgstr "Käyttöjärjestelmäsi salauskirjasto ei tue md5crypt-salausta." -#: ../../lib/template_functions.php:984 +#: ../../lib/template_functions.php:635 #, php-format msgid "" "Your template calls php.Function for a default value, however (%s) is NOT " "available in the POST FORM variables. The following variables are available " "[%s]." -msgstr "" -"Mallissa pyydetään oletusarvoa php-funktiolta, mutta muuttujaa (%s) ei ole " -"lueteltuna POST FORM -muuttujissa. Seuraavat muuttujat ovat käytettävissä " -"[%s]." +msgstr "Mallissa pyydetään oletusarvoa php-funktiolta, mutta muuttujaa (%s) ei ole lueteltuna POST FORM -muuttujissa. Seuraavat muuttujat ovat käytettävissä [%s]." -#: ../../lib/EntryReader.php:262 +#: ../../htdocs/template_engine.php:158 #, php-format msgid "Your template has an unknown post function (%s)." msgstr "Mallissa on tuntematon post-funktio (%s)." -#: ../../lib/EntryReader.php:212 +#: ../../htdocs/template_engine.php:150 #, php-format msgid "Your template is missing variable (%s)" msgstr "Mallista puuttuu muuttuja (%s)" -#: ../../htdocs/schema.php:33 +#: ../../htdocs/schema.php:37 msgid "Your version of PHP does not correctly perform the query." msgstr "Käytössä oleva PHP:n versio ei suorita kyselyä oikeaoppisesti." -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 +#: ../../htdocs/update_confirm.php:198 ../../htdocs/update_confirm.php:202 msgid "[attribute deleted]" msgstr "[attribuutti poistetaan]" -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 +#: ../../htdocs/compare.php:533 ../../htdocs/compare.php:544 +#: ../../htdocs/template_engine.php:930 ../../htdocs/template_engine.php:1106 msgid "add value" msgstr "lisää arvo" -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "" - -#: ../../lib/functions.php:2243 +#: ../../lib/functions.php:1645 msgid "browse" msgstr "selaa" -#: ../../lib/functions.php:353 +#: ../../htdocs/tree.php:88 msgid "bug" msgstr "bugi" -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 +#: ../../htdocs/ldif_import.php:47 msgid "bytes" msgstr "tavua" -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "" - #: ../../htdocs/schema.php:248 msgid "character" msgstr "kirjain" -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 +#: ../../htdocs/add_value_form.php:194 ../../htdocs/schema.php:248 msgid "characters" msgstr "kirjaimet" -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 +#: ../../htdocs/compare.php:293 ../../htdocs/template_engine.php:812 msgid "delete attribute" msgstr "poista attribuutti" -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 +#: ../../htdocs/add_value_form.php:87 ../../htdocs/add_value_form.php:94 +#: ../../htdocs/compare.php:284 ../../htdocs/compare.php:287 +#: ../../htdocs/template_engine.php:804 ../../htdocs/template_engine.php:807 +#: ../../templates/template_header.php:147 +#: ../../templates/template_header.php:151 msgid "download value" msgstr "latausarvo" -#: ../../htdocs/compare.php:280 +#: ../../htdocs/compare.php:316 ../../htdocs/template_engine.php:851 msgid "empty" msgstr "tyhjä" -#: ../../htdocs/mass_delete.php:96 +#: ../../htdocs/mass_delete.php:104 msgid "entries" msgstr "merkinnät" -#: ../../htdocs/mass_delete.php:96 +#: ../../htdocs/mass_delete.php:104 msgid "entry" msgstr "merkintä" -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 +#: ../../lib/tree_functions.php:72 msgid "export" msgstr "vie" -#: ../../htdocs/search.php:273 +#: ../../htdocs/search.php:238 msgid "export results" msgstr "viennin tulos" -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 +#: ../../htdocs/compare.php:406 ../../htdocs/template_engine.php:952 msgid "false" msgstr "epätosi" -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "" +#: ../../htdocs/create.php:154 ../../htdocs/rename.php:74 +msgid "here" +msgstr "täällä" -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "" - -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 +#: ../../lib/tree_functions.php:71 msgid "import" msgstr "tuo" -#: ../../lib/HTMLTree.php:248 +#: ../../lib/tree_functions.php:70 msgid "info" msgstr "info" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 +#: ../../templates/creation/custom.php:150 msgid "is an alias for" msgstr "on alias kohteelle" -#: ../../lib/functions.php:1870 +#: ../../lib/functions.php:1242 msgid "jpegPhoto contains errors
" msgstr "jpegPhoto sisältää virheitä
" -#: ../../lib/functions.php:351 +#: ../../htdocs/tree.php:86 msgid "light" msgstr "kevyt" -#: ../../lib/functions.php:132 -msgid "line" -msgstr "" - -#: ../../lib/HTMLTree.php:476 +#: ../../lib/tree_functions.php:283 msgid "login" msgstr "kirjaudu" -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 +#: ../../lib/tree_functions.php:75 ../../lib/tree_functions.php:271 msgid "logout" msgstr "kirjaudu ulos" @@ -2400,60 +2115,44 @@ msgstr "kirjaudu ulos" msgid "mass_delete POST var is not an array." msgstr "mass_delete POST-muuttuja ei ole taulukko." -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "" - -#: ../../htdocs/timeout.php:33 +#: ../../htdocs/timeout.php:29 msgid "min. of inactivity. You have been automatically logged out." msgstr "min. toimettomana. Istunto aikakatkaistiin." -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "" - -#: ../../lib/HTMLTree.php:461 +#: ../../lib/tree_functions.php:475 msgid "new" msgstr "uusi" -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 +#: ../../htdocs/add_oclass_form.php:90 ../../htdocs/add_oclass_form.php:95 msgid "new attributes" msgstr "uudet attribuutit" -#: ../../htdocs/schema.php:158 +#: ../../htdocs/schema.php:153 msgid "no description" msgstr "ei kuvausta" -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "" - #: ../../htdocs/entry_chooser.php:69 msgid "no entries" msgstr "ei merkintöjä" -#: ../../htdocs/add_attr_form.php:109 +#: ../../htdocs/add_attr_form.php:114 msgid "no new attributes available for this entry" msgstr "merkintään ei voi liittää enempää attribuutteja" -#: ../../htdocs/add_attr_form.php:161 +#: ../../htdocs/add_attr_form.php:170 msgid "no new binary attributes available for this entry" msgstr "merkintään ei voi liittää enempää attribuutteja" -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 +#: ../../htdocs/schema.php:172 ../../htdocs/schema.php:258 +#: ../../htdocs/schema.php:273 ../../htdocs/schema.php:348 +#: ../../htdocs/schema.php:418 ../../htdocs/schema.php:437 +#: ../../htdocs/schema.php:478 ../../htdocs/schema.php:504 +#: ../../templates/creation/custom.php:142 +#: ../../templates/creation/custom.php:168 msgid "none" msgstr "ei käytössä" -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 +#: ../../htdocs/compare.php:407 ../../htdocs/template_engine.php:953 msgid "none, remove value" msgstr "ei käytössä, poista arvo" @@ -2461,451 +2160,111 @@ msgstr "ei käytössä, poista arvo" msgid "not applicable" msgstr "ei käytettävissä" -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 +#: ../../htdocs/schema.php:185 ../../htdocs/schema.php:193 +#: ../../htdocs/schema.php:199 ../../htdocs/schema.php:236 msgid "not specified" msgstr "ei määritetty" -#: ../../htdocs/delete_form.php:54 +#: ../../htdocs/delete_form.php:55 #, php-format msgid "" "phpLDAPadmin can recursively delete this entry and all %s of its children. " "See below for a list of all the entries that this action will delete. Do you " "want to do this?" -msgstr "" -"phpLDAPadmin voi poistaa rekursiivisesti tämän merkinnän ja sen %s " -"alamerkintää. Alla näkyy luettelo kaikista poistettavista merkinnöistä. " -"Haluatko varmasti jatkaa?" +msgstr "phpLDAPadmin voi poistaa rekursiivisesti tämän merkinnän ja sen %s alamerkintää. Alla näkyy luettelo kaikista poistettavista merkinnöistä. Haluatko varmasti jatkaa?" -#: ../../htdocs/schema.php:33 +#: ../../htdocs/schema.php:37 msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." msgstr "phpLDAPadmin ei osannut noutaa palvelimen käyttämää skeemaa." -#: ../../htdocs/welcome.php:16 +#: ../../htdocs/welcome.php:21 msgid "phpLDAPadmin logo" msgstr "phpLDAPadminin logo" -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 +#: ../../htdocs/compare.php:185 ../../htdocs/template_engine.php:753 +#: ../../lib/tree_functions.php:117 msgid "read only" msgstr "vain luku" -#: ../../lib/HTMLTree.php:240 +#: ../../lib/tree_functions.php:69 msgid "refresh" msgstr "päivitä" -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "" - -#: ../../lib/EntryWriter1.php:1829 +#: ../../htdocs/template_engine.php:880 msgid "rename" msgstr "nimeä uudelleen" -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 +#: ../../htdocs/compare.php:175 ../../htdocs/template_engine.php:719 msgid "required" msgstr "pakollinen" -#: ../../lib/HTMLTree.php:224 +#: ../../lib/tree_functions.php:67 msgid "schema" msgstr "skeema" -#: ../../lib/HTMLTree.php:232 +#: ../../lib/tree_functions.php:68 msgid "search" msgstr "Etsi" -#: ../../htdocs/search.php:266 +#: ../../htdocs/search.php:229 ../../htdocs/search.php:357 msgid "seconds" msgstr "sekuntia" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "" - -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "" - -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "" - -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 +#: ../../htdocs/compare.php:442 ../../htdocs/template_engine.php:1015 msgid "structural" msgstr "rakenteellinen" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "" +#: ../../htdocs/add_oclass_form.php:96 +msgid "that this objectClass requires. You can do so in this form." +msgstr "jonka tämä objektiluokka vaatii. Voit tehdä niin tällä lomakkeella." -#: ../../htdocs/mass_delete.php:96 +#: ../../htdocs/mass_delete.php:104 msgid "these" msgstr "nämä" -#: ../../htdocs/mass_delete.php:96 +#: ../../htdocs/mass_delete.php:104 msgid "this" msgstr "tämä" -#: ../../htdocs/copy_form.php:51 +#: ../../htdocs/copy_form.php:62 msgid "to a new object" msgstr "uuteen objektiin" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 +#: ../../htdocs/compare.php:405 ../../htdocs/template_engine.php:951 msgid "true" msgstr "tosi" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" - -#: ../../htdocs/update.php:46 +#: ../../htdocs/update.php:50 msgid "" "update_array is malformed. This might be a phpLDAPadmin bug. Please report " "it." -msgstr "" -"update_array on virheellinen. On mahdollista, että kyseessä on " -"phpLDAPadminin bugi. Ole hyvä ja tee bugiraportti." +msgstr "update_array on virheellinen. On mahdollista, että kyseessä on phpLDAPadminin bugi. Ole hyvä ja tee bugiraportti." -#: ../../htdocs/add_value_form.php:93 +#: ../../templates/template_header.php:173 +msgid "using template" +msgstr "käytetään mallia" + +#: ../../htdocs/add_value_form.php:59 msgid "value to" msgstr "arvo kohteelle" -#: ../../htdocs/add_value_form.php:112 +#: ../../htdocs/add_value_form.php:64 msgid "values for attribute" msgstr "arvoa attribuutille" -#: ../../htdocs/delete_form.php:48 +#: ../../htdocs/delete_form.php:52 msgid "view entries" msgstr "näytä merkinnät" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "" +#: ../../htdocs/copy.php:84 +msgid "view the new entry" +msgstr "nähdä uuden merkinnän" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "" +#: ../../lib/tree_functions.php:265 +msgid "warning" +msgstr "varoitus" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "" - -#: ../../htdocs/compare_form.php:29 +#: ../../htdocs/compare_form.php:36 msgid "with " -msgstr "ja " +msgstr "ja" -#~ msgid "Logged in as: " -#~ msgstr "Käyttäjä: " - -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "" -#~ "Kopioi objekti toiseen paikkaan, toiselle DN:lle tai toiselle palvelimelle" - -#~ msgid "Click to view the schema defintion for attribute type '%s'" -#~ msgstr "" -#~ "Napsauta tästä näyttääksesi skeeman määritelmän attribuuttityypille %s" - -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "Huom: '%s' on alias '%s':lle" - -#~ msgid "Entry %s deleted successfully." -#~ msgstr "Merkintä %s poistettiin." - -#~ msgid "" -#~ "Instructions: In order to add these objectClass(es) to this entry, you must " -#~ "specify" -#~ msgstr "" -#~ "Ohje: Lisätäksesi nämä objektiluokat tähän merkintään sinun on määritettävä" - -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "jonka tämä objektiluokka vaatii. Voit tehdä niin tällä lomakkeella." - -#~ msgid "Could not connect to LDAP server." -#~ msgstr "Yhdistäminen LDAP-palvelimeen epäonnistui." - -#~ msgid "Server: " -#~ msgstr "Palvelin: " - -#~ msgid "Looking in: " -#~ msgstr "Tarkastellaan kohdetta: " - -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "Huom: Saat virheilmoituksen \"inappropriate matching\" ellet ole määrittänyt " -#~ "tälle attribuutille EQUALITY-sääntöä LDAP-palvelimen asetuksissa." - -#~ msgid "Copy successful! Would you like to " -#~ msgstr "Kopiointi onnistui! Haluatko " - -#~ msgid "view the new entry" -#~ msgstr "nähdä uuden merkinnän" - -#~ msgid "Choose a template" -#~ msgstr "Valitse malli" - -#~ msgid "Click here to go to the login form" -#~ msgstr "Napsauta tästä päästäksesi kirjautumisikkunaan" - -#~ msgid "Entries found: " -#~ msgstr "Löytyneet merkinnät: " - -#~ msgid "Filter performed: " -#~ msgstr "Käytetty suodin: " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "Haun teki phpLDAPadmin kohteessa" - -#~ msgid "Unsafe file name: " -#~ msgstr "Turvaton tiedostonimi: " - -#~ msgid "No such file: " -#~ msgstr "Tiedosto puuttuu: " - -#~ msgid "LDAP said: %s" -#~ msgstr "LDAP:n tuloste: %s" - -#~ msgid "Error number: %s (%s)" -#~ msgstr "Virheen numero: %s (%s)" - -#~ msgid "Description: %s

" -#~ msgstr "Kuvaus: %s

" - -#~ msgid "Error number: %s

" -#~ msgstr "Virheen numero: %s

" - -#~ msgid "Description: (no description available)
" -#~ msgstr "Kuvaus: (ei kuvausta saatavilla)
" - -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "" -#~ "Onkohan tämä phpLDAPadminin bugi? Jos on, tee bugiraportti." - -#~ msgid "Unrecognized error number: " -#~ msgstr "Tuntematon virhe: " - -#~ msgid "Optional Binary Attributes" -#~ msgstr "Valinnaiset binääriset attribuutit" - -#~ msgid "Maximum file size: %s" -#~ msgstr "Tiedoston maksimikoko: %s" - -#~ msgid "warning" -#~ msgstr "varoitus" - -#~ msgid "using template" -#~ msgstr "käytetään mallia" - -#~ msgid "Redirecting..." -#~ msgstr "Uudelleenohjataan..." - -#~ msgid "here" -#~ msgstr "täällä" - -#~ msgid "Step 1 of 2: Name and ObjectClass(es)" -#~ msgstr "1 / 2: Nimi ja objektiluokat" - -#~ msgid "Step 2 of 2: Specify attributes and values" -#~ msgstr "2 / 2: Attribuuttien ja niiden arvojen määrittäminen" - -#~ msgid "Relative Distinguished Name" -#~ msgstr "Relative Distinguished Name" - -#~ msgid "RDN" -#~ msgstr "RDN" - -#~ msgid "(example: cn=MyNewPerson)" -#~ msgstr "(esimerkki: cn=MattiMalli)" - -#~ msgid "Could not bind to the LDAP server." -#~ msgstr "Yhdistäminen LDAP-palvelimeen epäonnistui." - -#~ msgid "Successfully logged into server %s" -#~ msgstr "Kirjautuneena palvelimelle %s" - -#~ msgid "Searching..." -#~ msgstr "Etsitään..." - -#~ msgid "Logged out successfully from server %s" -#~ msgstr "Kirjauduttiin ulos palvelimelta %s" - -#~ msgid "Authenticate to server %s" -#~ msgstr "Tunnistaudu palvelimelle %s" - -#~ msgid "Warning: This web connection is unencrypted." -#~ msgstr "Varoitus: Web-yhteys on salaamaton." - -#~ msgid "User name" -#~ msgstr "Käyttäjänimi" - -#~ msgid "" -#~ "Your config.php specifies an invalid value for $default_search_display: %s. " -#~ "Please fix it" -#~ msgstr "" -#~ "Tiedostossa config.php on määritetty virheellinen arvo (%s) muuttujalle " -#~ "$default_search_display" - -#~ msgid "Paste your LDIF here" -#~ msgstr "Liitä LDIF-tiedostosi tähän" - -#~ msgid "" -#~ "Error: You have an error in your config file. The only three allowed values\n" -#~ " for auth_type in the $servers section " -#~ "are 'session', 'cookie', and 'config'. You entered '%s',\n" -#~ " which is not allowed. " -#~ msgstr "" -#~ "Virhe: asetustiedoston osassa $servers kentän auth_type arvoksi on\n" -#~ " annettu'%s'. Ainoastaan arvot " -#~ "'session', 'cookie' ja config'\n" -#~ " ovat sallittuja. " - -#~ msgid "Base DN: " -#~ msgstr "Base DN: " - -#~ msgid "Attribute [%s] is a MUST attribute, so it cannot be disabled." -#~ msgstr "" -#~ "Attribuutti %s on merkitty pakolliseksi (MUST), joten sitä ei voi poistaa " -#~ "käytöstä." - -#~ msgid "Verify" -#~ msgstr "Tarkista" - -#~ msgid "We are missing a page for [%s] attributes." -#~ msgstr "Joistain attribuuteista [%s] puuttuu sivu." - -#~ msgid "(Auto evaluated on submission.)" -#~ msgstr "(Tarkistetaan automaattisesti lähetettäessä.)" - -#~ msgid "Next Page" -#~ msgstr "Seuraava sivu" - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -#~ " configuration for server %s, but you " -#~ "did not specify the\n" -#~ " \"auto_uid_number_search_base\". Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "Muuttujalle \"auto_uid_number_mechanism\" on arvo \"search\",\n" -#~ " palvelimen %s asetustiedostossa, mutta " -#~ "et ole määrittänyt muuttujaa\n" -#~ " \"auto_uid_number_search_base\"." - -#~ msgid "" -#~ "You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -#~ " in your configration. Only \"uidpool\" " -#~ "and \"search\" are valid.\n" -#~ " Please correct this problem." -#~ msgstr "" -#~ "Muuttujalla auto_uid_number_mechanism on virheellinen arvo (\"%s\")\n" -#~ " asetustiedostoissa. Muuttujan arvoksi " -#~ "kelpaavat vain \"uidpool\" ja \"search\".\n" -#~ " Ole hyvä ja korjaa asia." - -#~ msgid "" -#~ "Congratulations! You found a bug in phpLDAPadmin.

\n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
\n" -#~ "\t
\n" -#~ "\t Please report this bug by clicking below!" -#~ msgstr "" -#~ "Onnittelut! Olet löytänyt bugin PHPLDAPadminista.

\n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t \n" -#~ "\t
Virhe:%s
Taso:%s
Tiedosto:%s
Rivi:%s
Kutsuja:%s
PLA:n versio:%s
PHP:n versio:%s
PHP SAPI:%s
Www-palvelin:%s
\n" -#~ "\t
\n" -#~ "\t Raportoi bugi (englanniksi) napsauttamalla alta!" - -#~ msgid "" -#~ "

\n" -#~ " \n" -#~ "\t\n" -#~ "\t\n" -#~ "\t
\"Warning\"\n" -#~ " You found a non-fatal phpLDAPadmin " -#~ "bug!
Error:%s " -#~ "(%s)
File:%s line %s, caller " -#~ "%s
Versions:PLA: %s, PHP: %s, " -#~ "SAPI: %s\n" -#~ "
Web server:%s
Please check and see " -#~ "if this bug has been reported here.
If it hasnt been " -#~ "reported, you may report this bug by clicking here.

" -#~ msgstr "" -#~ "
\n" -#~ " \n" -#~ "\t\n" -#~ "\t\n" -#~ "\t
\"Warning\"\n" -#~ " Löysit bugin " -#~ "phpLDAPadminista!
Virhe:%s " -#~ "(%s)
Tiedosto:%s rivi %s, kutsuja " -#~ "%s
Versiot:PLA: %s, PHP: %s, " -#~ "SAPI: %s\n" -#~ "
Www-palvelin:%s
Tarkistathan ensin " -#~ "tästä napsauttamalla, ettei bugia ole jo raportoitu.
Napsauta tästä Jos " -#~ "bugia ei ole vielä raportoitu. Bugiraportit pitää tehdä " -#~ "englanniksi.

" - -#~ msgid "" -#~ "Attribute [%s] is a HIDDEN attribute, however, it is missing a VALUE in your " -#~ "template." -#~ msgstr "" -#~ "Attribuutti %s on merkitty piilotetuksi (HIDDEN), mutta mallissa siltä " -#~ "puuttuu arvo (VALUE)." - -#~ msgid "Binary value not displayed" -#~ msgstr "Binääriarvoa ei näytetä" - -#~ msgid "DN \"%s\" is not an LDAP distinguished name." -#~ msgstr "LDAP ei tunnista DN:ä \"%s\"." - -#~ msgid "DN not available %s" -#~ msgstr "DN puuttuu %s" - -#~ msgid "No DISPLAY/DESCRIPTION attribute in template file" -#~ msgstr "Mallitiedostosta puuttuu attribuutti DISPLAY/DESCRIPTION" - -#~ msgid "This template has been disabled in the XML file." -#~ msgstr "Malli on poistettu käytöstä XML-tiedostossa." - -#~ msgid "" -#~ "You need to configure phpLDAPadmin. Edit the file \"%s\" to do so. An " -#~ "example config file is provided in \"%s.example\"." -#~ msgstr "" -#~ "PhpLDAPadminin asetukset ovat tekemättä. Asetukset tallennetaan tiedostoon " -#~ "\"%s\". Mallina voi käyttää tiedostoa \"%s.example\"." diff --git a/locale/fr_FR/LC_MESSAGES/messages.mo b/locale/fr_FR/LC_MESSAGES/messages.mo index b58f5b1960e4132013bc8cb412bfbd249f53fa7b..ec107996246c9d157f1115d4b9636e76677a3a88 100644 GIT binary patch literal 51716 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 literal 49414 zcmd6w37B0)nfDJn1W@*UISGXBK)RCvVQEMpWPw07(@6jk;_dF+oeQ_`ZSIl{0dZUq z6%Yi)4Z#JXjN-1~h|(^&Fyf3j;^>U%%qTiI>bQ(Lj^FS9zE$U(+v%V)^L@|r-6yC2 zr|Q(H^{scSI+cGoVAneme$#hOlB2*y`zOhFxvx%BY?6GhCrM5Kp9XgV_v}p){v}iR zqwtvl&jQaSJP+&wuLDm8-vcV&r$Dkuehuyd9zQEd_657aW5CnEJ;1f#4Dj+0eie8i z;afnemb?=@4E!j#5BS&MUf|z@2Z8?_!oLHR->$QhWGc81cm~)D@-G?TkKTI|_&o4l zP|rUY;(rW2pYSiiL%?0dhgTV zbnq+S{@~9+wRaafYj>~*RDDhb^?V_C0Js+16Wjov3SJGK1->WX_d%6^%qgDF3{d6H z1`h?#05uM)z$3s>@JR4RQ2D+q#Q!D85G9X+>Yv|$M}s?2sOobpxGOjZ+zmVpRJmt^ zD(8G~KX5&GE;t4%{||x(gAai-!6!iV!ymvd@VL27XBUAf;RdL2z8w^OJOHY`UjZ4~ zA{pM#>8 zKZ2ScyFt8)pA+yLQ1x97D&0EpT<}Gp`uA<1+IK(r8StZ^%G(GLsQ%Z2%I~!y{AN(k zw}D524}$9F$HBwFr$N#2??I(Y=J|N+0V;eLsQMfWUI2E3%KvIm<99u%@p>7k`rZU8 z{jH$V-32QD`vN`y9!B_sA^c@<4dJhW=Yhx1hxdXb;0o{o(CP<@o|AJJL*PVEbn|*J z1@8qHgX7>-aIbT{eJ6n`Z!xI;xdK$ZMnU!CHQM2wV-G z$|N}yd=;qvyBic;eiA$md;%1`{t{F_{}-rw9zf%S$AN0ksi5fbOi<|;gU5g?LDj1U zsz0v*)t@&6yb08}+zzUqZw5sd4}!|~VUVFrJ_8;F{sB~bk61|FU^l3CZU)sKHwC;a z#NQwAA<)_n!upaQfhl+tgQI%R1CIb-1gia;K=t#@pz41gsDAoL2!9pamGDy`{vSZK z``6&kpaxI;VHa=)cp#|$nFp%2VJw6Q{2R;d&1pXFOd#5k) zdYukx+!ldHgI9nW-fK7xD-4BoCOYndxCEO z)vmXJs_%WE=-_jp#^qa}`sH9=-V^Kzcp9jAbPl)|cz%d~0jP0)A*lDpK+(~S;B@dV z5RsQW0LO6w$}Apu)YN zo-YCCf-eSD-#bC|_uD~@$D^Re@kwxZ@Sj2D|F7ZsZ^69@@3YL~4+E8cI;eh{3(f$S zg6iicsByUg+y{ImD7w2HRJ-3F;-3!qQ&8jmdr;-?yWI0R2;7J8G*EOp3sgQAfMZt^N{FYs|t^!j%oQzrQpsQ3C9bjh6yz~_ONgBq7A zsB&9i3ce0h``-_$UmgZkzehpQ;o||n397t*1Wy2;0qKHdKPuY=UIB_9yb|mN9|9TD z6SFWJZ+vP!-j@F*rDQzof_ znol1O_zmz>!aoO30#8`$^spLK{a*p9pKbwF{x?9nI{782abLJDvEP*vOW>j4U7*_gK~VMh8aNHy^%Ca?U7*4jgFAy;!IQyjL5VOtbnt?Z-57ayS~uzFz{f)GeObUdEnt-2^4?02HX$4 z2UL4L1ghMxfyaYSf(L-V1C`IdmpNS@2kO1Kpy*}^_|+Vx{l`TP`Q2$J7}XM-=eoH-8O3?2dQe1*%Yqe1b3QE)E!Mo{$kI7n9~ zzXC-^%h&rjYz7w)z7tfxe+xVc{5`1m4|}oq*9ved;Q>(TUk<9>UjWYszXQG-Jif#n z1-}gTfNveZwow?oP|pW_e$>I62;T`ZRg$SgUTyH<*X|1xk2cqb@&x+lbc02KX?gBq{LL5=r!!QH_h zfV+S{4)H$?@xKK1-tR%>yIaM_aX(Pu!$6JSaiHj8b_g#3Ri720_|E{S@~#H=05^s3 z^`Ods1*mkd4e@UQ_a}T$c>ZBVFHk7kCG#{<#}eKKFrY$H%~Zz`p|b1iu{O|2E*aLB01h zsQNwws{EZt9rpuO|6@S)+YC_UE(O)ED?#<^nh+iWH6JVB3h)t77HeEa11na|!<|sQh|b{`@pBC42!WdaHo@f!Be@ zfwzSC4}<#>ehd^J_$H|OAJX>ro(w*Za344iTndVgUj@zp?*`Q`UjoJNzYZP({sdI} zci!mZor18SWI8wk-UO}!e*uaP7jE)=mV;`?T2T320cw0VgQBB5z+=FVf}*c)fYZT$ z1V!(=ZT9>w0M*~CLDjzvimqP{s=luQ)gQNmQ^9wE8iy}{E5N5frSIP2<<0^{KP$nL z!E3?U;Dey%_tW4>;L%$>zop;_gs%#C8>s&MBzP(KTTt!jzsAR@0rnEU9aR30hWK9v zJme)VcTNXY-}T_d;0@p_!KXmg_r=$GJ4QgwudU#r;7y?V?_TgQ@KI3n=s@)HR>Zi|xF9g2| zs+_KuIi1Y~e@%D^sPg9hh3B&bJc#g%z+=FxL6vtaI2C*osP;Srs{Vf$p6~Q>FK;hU z@9!7F(?Rv$OzI5mY_j5yJO@s^^2C`uo%1uHX}((me?t4Spwte+O#* z?(_=!6s&-&!4HF?$K7A)^}hl1L;+ zc>ym1)!s|Nw93aWj#fg|8Yz+J(k zZbe3bQ^B8tF9k(+_1Am-?+5oL`~WEW`~)}~-0wCYuLa=q310-NoXbF!djmKhyb~1N zJ_+s%{uJCD{7+DHvCHkA&)(oZgbxNq&(lD)Yblt54N&88J9sMiX>b($cTnj|Z}4(% z1P>s552*Y;0;=Ah1@{LJzr*n)P;@vCoB>`6?g#z_sCn=PQ00Fd>;u0CsvnNL)A?K% zsBv8jihk?hp5UuMm47RE2>4D=^>_$882lnAI{7ZB@_q-Z{Jr1k;kls7SpsVOSA!`y z28vEz531gehv(0LhY;T5O+jA-4+O z?*10{8@vD%A9y!72mAoI415|?{=IMY{x}CzyI%~do}0iU!RtZM$y-2;!xzHyr$F`V z)1b!b*%1Hh5dJSPC4P^$IlXj)qUV=_3&8h)z2J|)72u(7_xNG(48r$=Yr&_%so?2% zd-_YklL+4k9uIy5R6U;ptKhG|E5U(xFgD=h;A-&Pdt4sh4yqpG;91}^U=KL`UZ=}` zQ2lr_sD8Wy6g_fr_;e@pvrH8$AE7F)sByYs?YB4^7c;ymCr(OK6o>D1o$|p z_kIM5UiNsmxAPoO<5U9Yg13Xaf?opXfqxBZ-1d2okL%H(o_B$}fHT3x;B4?3a3gp< z_zUn%uyLQ$(*vN&|0<|){|Pt^-1&Z|>*=7%n-3liz64ai-wEypJ_>e&kAZ5>&%vX> zeYW}gGeEs}9;kWqq7dH#)xOt(YTqMZ7x*jibKueMb$b3jxQ_78K(*`q_j$W70*48| z2-LWagSUc*JmBrR54@D{7eV#w)W7s`z7#x}@EzbN_!xL9c-s4Y9IpZ|A$%*?13m+) zUWb0b>GB-#c)~Y;CxPz)%i!OD8t*e6bp2xu_<6!_2mb>c`kF>2;T~-etUh` z>3I;OsN^23w6@Y_I!B6$X! z4c_(%r{8f<?s+W~I`HQsLl_X6($_XOVu?hbw=#6Jv9 zA^dr8Z}5o_{~d5Y!v6v)|KETrf67D7zmEk)H*>*5!PTJX`ASgb)WJQ#%_00!Q18DQ zRJyl=&j;Tbo_{#Re+ryR{AWRp+YiF?Js$U}1l7;igBqXPK-KpyP~&qCsB{m2$ATXP zH9k)U{1;H^eghhPJ>v6k1-LWut3mbuTF}M`d^zDdSOR|;;@5q~=l^Bk!Nj-0!@$>o z>d$w9Gr(_xYL^z3b^?_5Pq}Vapzv#k`_F{9Xo~fbyUchxVVbR6CT;fBjD^o9d5!V?!8x8LfOn%OF zCgER$Z|8c9OTUf8E#>+F_s@bFm!r7;j{6k6oGbob%FVBde>HdksGs;l7x(=Z%K!W) zw`;i`;+gj6e4YD`bAMHyBsqofKnS$VWbZSq5| z<0#`A1^E3X&xQ)mM~E9Mgkdwue8NYCIL(PYd4FHR?+tNf@C@Sb2LGDtBCg#@qu)Pq zoliL7`mK;(mFsr9L$3sPC7x-L{0jUd_<3;mkoMi+hq+!7!hZ+lfwBJfRIXA!rY>n^UXT+gG9UjTRF*Mw9FlJb+?jWdq#lnGeou(I zhB(bF@s$Sm%eeIWaX{URx6}#$GuMA{-^+Dtc)kz#M#3ZDxgm~V@+z*65!sY^2Oi0FHupP)cRtCzetQw#kNdyn{ypG0_=oW9b=-e}`voEV zBw_u2!L^C&i^OjU&lG<#*Xwn|Z!h9M0G`e@stA5JI@sTL^Y;a$nMV1a;{KRWultDG zpYR{SA92m$T4-;$9`)&PzmoVGmw4VLP`?iZY;pfBuFDB8(1QuTQb?!h!??d2JUztq zaDNYdoL7*7tZ5ezhjBl?;Tu^a6Lu*FSrin{`Xw^eZwL7tMHD3-wpSVa{nLPe~#;X z?%xI;PM-6)|8hw4=72u{Uq-xscW}Lh@Grr8xUS`r%=;yAKLalTQ5WrZAb)S=dOLA7 zaGAxrPVheBUc;r|KRcKX`V#Ipa&6<;5O^uql+e}(L;7pM*K_?l*Wo13P z?-mF9JIvqvxmNJ(gW#7!nyL2Gb%-|-_dCLW$Msq6e+!O>bhE)TL)xj_FX8@4@E^f> z;7qQ=!t*z9zd!YT1>py|8X^8)h#%zsm0SmN{XN$KT+bt3zkdb$xIWMQ--4A8|9kLp zt}55(cy<-|ey)@5jd0U`8|{x7)p;F?X;2F3H6OZa76FXwuS@V|lj-4*a^?%%=v0bFajP73iWi9eA0 zHC)$mzgvjsHra>r?j?L7_cwvx=9&_5gj}NCe)B14A-*T7)m#ln(0WnR<;D`aJ`XkskceDu~e-Lh3eL;Lye(YUS`_dP;Xa<)Sl*8d9X5E zDG%kZ)Tm^woK~9D} zyzD`fAswW56{yrkdV6W^(8f}2kfG}@ml}f`(k1oAXtJPMp|9y-zbiMvYDOi2Fw$mw za1go}ZbJZMRP6Qc>CG87UZeFP>vQV{`gucTWJ8sUN-!qX`X+l(^tUDU?}pOGa$09t znyp5Au+?tRH}$+j^+LV2WwhR=R`D)9uTrB`jj~9BiiMj^rCLipI#zCsmTHs&rF!il zK5FCHo|9zbli#Ilwv4IWapXiKwR+2mtq`raO=WtA-ePVfOp6T^#I$HZ3x$B{(JVJM zmg&@u%(K!!wVaNYM+eG{W^!I>@Tzp}mx4Cj`|zOQ4#>G)*t{H4qHkOlx z@Gdqr0B|o03L*JASvJx|E7DDs)`s}pNiRgkMA<{7jFDdL@JM~88V*x#eUn0qR?v5p z2@lmxZMZVRWDz%EY-k4)s8lV}<$BZ@O-IF!0{M6Heco`=L>MS}3+jSSvpbu;1-{c= zZbBO|olOmx05M}*><^^GZMs;~+HWD`(K_?mrkzc9kI#9?RF5dkOO1Q%!)l!gMayQE zQg|UvpQ*VKpN4s*Le(+kB%ZIS34aZp782vivGRzfWhotQAg&A5 zoiKN%H;XSbv86{8iZ@xYWs>27eT%!M)uGbZdQz>oQ6<($qL{_Rl$Bxfn=B#h#`x=Y z-4`CH10tEmu4|N~B|*f2NvOGn>Nm^q#CrXzN=F|t2N~Tp%lb3^&CG<$<-Hna9wVMl z;9{FLH7c;YKw8JEx7WAIqhsrbDh(K917fPf=jq%iAP_NXw=roeW>a|}&Tp7@>KP8B z>YPCEo1Q555ed9@dPFi=N*JViq`wQLZNh_^$;&aVoe@Auj zSn;k7mVioDX~C1)4F;wabxOjm1k#0x+9Z$iG+ETYY3p6(5R1y#fw!0S`p_UL36NC85393eG7SSyx%IG2m4*;D5eOx zpwSF^zrxg3FJ7>yXXT1zmr`<2(KQD&NP{+Xam;y2Q6udNDgt^hvnW|qH?@moG6ka2 zHRQcVm)O6UDn1@9T_tf)Mt2$9P^yiTo9B>ZuszB+TSExdx>^Xa`k0ztZZzs>N<@lM z7uN<+I~WS;07=`!bQ7dmma->qp)PHjPTNar4Vv2HO16~5O~&A>71aVcGc?qvWNrqT zMx)Rci_`3)lp#oSpvSZ(Z<`{DDzLo)J=N>lrlVp_Gbe+^A&z(_3{=x~U>P>yM>EmhJ3ed(pN&=l#cb9mjD zf%BPE)4w-eLzhTxq;I4QQl0uHdenN!41lzR3cKF4o?x*Z@6^+zbJ2bn7^ym4O*as` zW~N=v1G!U=5fWSL>a`k`!-&bQnW^DId<4BZ6ivfy_69Hpfn^$l8rV`Rh8PZwMzX}r z)&OBNZL~AJt+(*d=I){ueQ6;s&?@yaR+=oKck~Cc2@uH&6@Q6WVoAGZ9gv)#*`xzo zQie|wurve#rrqg=R%@(p)+}Nryezi2i9j7J)0B~NZ>`*#mCg`-GyN^2%3$gwa(+EI zA443=KnMr2zm~31M?H?V!v*E)SaLxHLeL+`gi6bv%o^Y1L9Jzf`qHQ)4U}7(%H2TVt&rHYM>^i%YGDn8ziTBQLlug7` zT4&EH&F@u8V=2MhlzL)wO*zA(8IVdTN^rSFdeigJB4nk)dL-c@r-Dut1wR~ulhM%8 z-t-0SN=qDeQYxWQ-$Am^gB#W@$TDBtuBZ!Sk7@CVr*eL)RLJZS;l zKE<7q-61Bq7xY>vl?el3EiY9iY#3^p%|STB2OA}PUCU)jFA~S2JP#TFlQ<0W4Eq8H z&rqh6dl*U)t8qe-sHY1k2BoD@A1uQOG|iXCVP4HJrz@8(>Wpa;+*}!LV``OaBls0! zP%}PlR<@Rt<>gV?1j{P8C77)^*`h*$B18G2@Jp62b0r{q22TxsS{SeEWG47?UMr4l zOrrQsbnfb*GVV+e9jn>oaosM~Cwq*1DA&XvvaH)<@;Qk=NL5LensK&KgZ{74lH3QZ!`50PqSxuI62%%JtyWVb+Ybr8!tsFpG@y zbz0kcJeev$w4@1f$VGzLpjxc!Q6+*;|xg zF(!awAZQNo`_Vr4b?_ug1aD)ypxJDj+CE3ww#c&H9zj8@X(GC9Lrtl+C^+-MM60)8 zR!2TS>9gR<0m4D$T2;i4&cqB`=66h+^t8 z(5!1&Dp`rL=96kA%gz^_7V zXeBGV3BHF03Us}i#p0xO?ZV{!)IxlW*nT-9lVFsEIBV9=Ny2i0&kIomiivCVP#TI4 zb35oYuFYcEgjeLrn&4=H>`LZ1vSo|h?X=?|mUPQ9w52x)VuJKbR$;%()ec|r^(TmH zm5ajkgpt-+y0VD*^OIF#eJ-x$;bzrOen%=%q_LSqNF8MmXtP#ag5d(adj{qnFWytC zavqYQKd?nhmFO0hsyA8fZjET*L`gwB-jgQ&eNC6CckiorA+3|K%jMOm26ADdyx2ren{ii@RR!JD%#i6# z-ZmGjMh>;FAK_zvm?!2T@&L;-Qi(e|=s6x4J5=BDhBS5aU@}j_D|D4iB^4I5o@UbT zhOShapj~N1&*+hXFQ7&pNz!xE20TIGf!f5x6IaJW1&7r-Y`-t zSmgF6qah}wM=aE=_uI*o8@;K1i@OS#%{aD9i_qdjKSl~FavVdn3ZhuHG-K8k-e9zB(?yiY~&0R0TH-=4$ZMF<2(fi#{h?Ks344AvpWZ>14AiFym}8x_V+dB;DMCla$zP z5#F{<0gxmLQZMFUNj=z?cAwDQtj+6(iZ{&Y9)Sne#6IRNDj_vz%pjBUm{=(jj!E6$ z9!R^T8PUGrvLi`*025z>B`b%Z+4T`^PeJf04M_#>e2}TGbU@Rnj((@%=%LQR`nSLb zHzy8eLisIplxgMhhA8NAb;qs|8zJceHeXE@>9u58r}^p~6MBN?)AQ$QJ}NZN%?czp zM49v_%LL*;&F@TSTpE{^)}&Al@ifhht~YoU6RlbrEI;=z?9wCDgLg@WiLmh4buo*xPw_fBJ=J2NY~D zwJx*Ep~VRT$67yBSUJgy+hL80$xWboLrYbS8f;ujE1X6p7as3$U_A|wB^H>0_+9j> zi2yYjKPKur&&$lTGRC(#R2k_Bv>6*e;tpeDClfj%%M%`JqTlxC7@@ISA($;u;LOAb zxT;!)5W>|)?H_`5kPu@dNCe$7mqBgO^#xy3e5Bdc+tvu@95==dltyiv|h^8R&B#Dp=|s|qv5hyZQX2kX`Fl9w+fyGS6kqy*2i8k(1S4X?Kw z1=qa$EaT3nfwD|nW8msr)(vKr?x$eW825Ukjyi9fmsW)hx99XB@-CU7~o?*bbr>fU663C|?JIyL^H z;iI)%G}Lk5L`lNVmkR@95xK%Ml^X3Z zG>x}NnQwI~Sj0Asb5B6SRCf$=E0g!cG)m4km^C53z~nR^>%m}-Pvd3?J?qd#BU7iY z`91_MD$EIQe9Ju0kc(?|A>T~ZjMWMn3iQki=-kmT3F);ZfjDi25h;?QT`SiH8(YSt z7O$!EPui9(f0=z3$lBJ8ctIVV?}TCz^(uz2&VDCT0O;LhO{0XBq+NW;+SSXFwLU*I zUDRxIIb~}*JDM$P&50{#lWhV5&mNdRy?OSmf%ygf&$n!`9dGFbSI$5WkgiP|x$h3$#9`>hk`w;xm9{LFMNXArU3lt0^PoO%6 zmk=*;(??*FG_X)7dqI3Auq0O}T`Bbuy?DXu6-!r~@4nE$T+GYMq8wAww-ahkN}6@B z_Ts~^ya6Y)9&FP4wmCeL`t6#$NL#CwfnH3zv36^H@pZGSaWeUA=$SvrqHTS&XTGn) zX)Ebv>>TjAbX`7gn8{R5E-p1{G%dMU;=i!VqXcObT`_D8l=snGDlJo>0>=&f9`eCZ zFt+6KF}akXu)NW0xrQDO)khoBhE{nBm|2~3QIjhlxZ=zBF4W&B06xkt#>Ac@)kPVD z-8JH}FT9g`n4ue!AAwOb;B0a1k+L3No?&GU!PAs5@JP`ja=GJ?Yn0SyOV}-D%Zjv0 zii!2JQ)osUMKu*)XS42o6N@V37e|hn>I`d#DGQTel9H{y#`KYxYUnVI!)hmerrp|0GGoeK{HXR8j0ovOXkTGtYr0Z=Y+6w5rx{0{=7dE6_GA`guVoNi z_pDyS48@e0-%@p1=9ySaQS!7M){2~)X;w<8mld(sUK5lTEtKV%e3T7eA#4KhkVG>qDwhCMOhxp*fmXt}| z(592ny>XYkI40jC*+RV&l#|y)#Vy#bJE(`}%vKH=)}z z7y9BJoUi|a1+uZ&m1BdngRG+Usa?dPxQ=ALFq&CKF|F;Dw*4nkT|0_jBie|yk?O6z zCNNrwD|OP`-p$A(WUM4G(~K{#^ie`jkDx~x_bB7MD!ofrES=DBP0#hAH`96P$`#qT zy5`W)-J#%+;dbAerMBnR8_w*LI;Wx5jLhgR?LNC=nt5fu?PofBpfNvtsDRqJV&$6X zI%PdoTYa+0JS*@qK1s6mQnE(?n9D^=BE4si%@@gyYTJ=~BXAguf#Q}hCt~df3u2G# zO+1HY{eM|=?TwiKr)u6g>osX?Lx4C4s#N#@kkw}`OKH8>D0G76SgCMYS|73O3I5R%&nj3aw@||Q%L;lf;FEGJI z!?xvEj#b#{f$A4_|K%eV1Qv2Gs>I@%+J3@5tIM+a8MMEl%ahB{A8fK-o`?fvDLO-* z#NsS5ci}rnr?14eO>i`>6!}C8nYQekXhh151PR^1OIEyVCPB7%TgMb5AH@(Rvwc|Sbu>dYi4XlX*N2jz7KMea#0{csDh9`BFGm*3O_|6B zNf-~t&)O-fO7!K3eaavy=z9;%=5E3s(^>Nq`z({cwQ^#6Z1h)~?NsBq|1EAn7dJKQ zfdYI>T-rMiR6b$7F!F-pM9>m_}wlkAFnaxR4D11mlQsipK7q)bFHYGE|C%!?aVs)_5#+`V9 zJgp05^$%*gl7ii%*;mS)9F(EVtXw8bpr*W5j5U)11!TG{yA{{Dds*?+CN6klU@zIH z*`(KW3!T8d+4G_t_sf}zwOA8??)sQ7b|j*5yE>$44U4e>3>N&ikv1?8>} zS9hJc_jYC>x=XfS*0ybLiMgC)-*e|1Ap!>DnP_tb1$)=~KN=;8m!AY4z!wa4?Mw~! zrYhL+$#>H91>=~!V^uSE*(Q0n6^u}Z%RVVbvm;}ej5;fk-eQF2DHHs@Nh>x;h0 zOkZ-}p*t$ryxJH^PvLt3?MuKlF&6#)dY7r^qS}|r}v#Y_oUgxkg#WUd8648 zdAc)tW}nh?GU-n1JNfjJX7ih}j4fq7IGt6W{$4)hNz22- zr9nODICBEgS7{In0~+53f!A1Mm3uO%pQsAGe&obj?Ez%4SrhAu)YMGJ-+}$W*8|e! z*^tS;S7!P6Hu;iacHPbKZLE%sZ_^r?ga%)sG}wc$51iN5aDumpwA~$0XmxxWL#u5J zrF48-iQyocfSr+*ts&N6(iTD9evRE3Ma z#loBMX{_dRJklyoiQ&tVR9Sf&-)5ijv+>-Tr~Top@z9i6EoPjhG(vlR4o3L9CU3qt zo>8*s*hxYLc%w3Ev1}n^Ct8TA}+8VR5){ksYe&tvUIZy zyHJ1RXK$>tS&@+&-R&bHzD1c5)p(0g!ZpU^!`x^Lu&Uo2#8xb8wqRpaC@njcW7w;r z#F!|9?dptVSvZYD9Ay;kPjpf1LYPN(+G6M1Mq)W8rA8H5ZGu(lG#2(hYwKCg+KNxQ zN}R>fgx%0r;f3(g1^wLd(vnJ*!L4dRaw|L*^@G}Rgpl~-n6?~L#MDKW1NHIui!Jld zPV`_?3DzDv64VLSrVVu@EV~#;tOb#9N(VWsWB(r%LarLr9h5UBW}Zn6xI{+z8bHWx zaKrdEjtQ}J^rd|!laqYT;Nl@6!wDpzJ^M^OJ0v8(u^G`;Pc2%(lr9fuNz%bujLQ<` z4~@5|zYv7H92yj!tMl3SK-cn}(h3RQ3Y<(I(uYMgt4Yx*1E1sjI_rLykzw~Uw5!8I zL^ImZ0B?ghjE*58EJGXB>2A_$mWX+YyiDcecDl-xULr{|{_0kVeK~V9; z*2P*c)-F0x9@~|I_<_yZp(E`)U1*|LDz&dO=^A*BxL+o31BdLJ{CTy@87SGu9@G9J z|JF0+rrwlluiX;V8_y)?A2|!o-+S&?I{m*U>YJB1OaJMc3oE1N#}Y~;Rpj%2JATN+W|#=0g>2j`uv z@8J`JZM3w86@zSHAdJ#4T($Uo@)_eOgpgNp2m^D-4N1<;c1JIDjD%b|dCRg(( zd<4S?<~l)MEK+L1_-l{ASeb>eEOQv6Y!KKE1XNa8I&=jxg0~sKRth{TMmh5+CXp`K z6T8}8wKp@JKF${vQGBmcN=SF`GISh^sxf&kd~IOQolrWND6gU5`**!eBe<&>6~?r+ zzc^u;6_Lj3Q>KiCgBv_IJFCScsLk!5GnpBNo=JV#^KGg$S!H*UCwV{?NNBM1)~Lzb z^eiMprJ^o{*W~fgnJ#%$$yG^YoM~QZcN8b4*rk1iq*y<0`%HIpi7v?VA%lrocZwrR z>LS!%%f)GIn#V~0!U1BR3I%yPK>|;Zv>9t&l^J7dhM9sSi;VgDdGg%gO z7Bv^8M}w)k+#!D^F(XYUq&>li>~|`+5sW!g^fdr*N~ zw-A&M^&kVi}&)KJ3DI|SO`vhnb*O5Kzu%HeeODY+}!M25G)xA3L7@IOZAHU=- zGOKWgjJnMpyM>!2RR?WH91JR-1K=)R=GvuEYp!0%nV{#gotH&6hOHv2B74Lz=wY){ zkI&R;k!GHllW$C7*$Fs!O|bXa>&Ew&nH*qvm)Lg9WZ?$Rkzs9vnVp=UJH_y+b@(^` z>;rLZG+~H=dV-%#rlyV}WrB~t12+wD&)a& zolxqa1~or9N23?a$h;hDwG9qDQX)C?mCQ7A2sXsz*uY0v=H6u_w8wx$L$u+(ycMo& z6{p5N8!{f9mF4b-=qsD4gLtUw*1#{#AfsZruda}#F<80Ow^D^@uG@_4@ES(n6U?RC zO=vl`v?_@AC-}44cvlw;4z|mj(m^i`ns-P|E3pR?>EvFQxV^$QDKG>a`ss%v_@O)f z73cXA*zm@>ZG4iQYFm!S@7JAccYKT_|8P-@v#HI&1JWypPzF(HxbqbsJD|gQQgi|h zk|>?@X6_g%A|MgOXW}5`0B(teiqc!n);EZ3*HlN#9t; zAyZPfl{Jc<-%GzBzs$vjw1rtSH!y>dTHCa<+)nUm$_0T}$-QGbvIk2xcmXHnh{flN zSzbYr(=5UO)|arz{o;p@9OP4F;6`PDYx=oVDQf#4$kDNv5R-e$2>nsKOT9 z5(SEPwH}XzT)3>Q*rR2(pwX9b9FQpl;w~X-85C~!;-X9;_C(q?G)#bGnXluJLM+z= zJan70MxA(S{t#y_=10_^hj^_J1>Kji_7x+4LrMt4T!PfzX1=V^<^a02 zsEviiTnYPvMWI?N6*|IpLf+zw%8Gad@8=dRTwiezq_xo}iSa-!gSfYt@5bSg@>Q&M zTIFz%iS+7E;J#uR85!$PC(HpUu6+Ba^NVPh7`+GK3G%E)2HBS^$HQuCZ8+I!P_C3t zkK9}|V+x864M9-FRRo-Y=8!cdRuy*^9<}8{R&tLm1=Q zYJcb!lBgR4jEiNDQhRfug}##LPt@~n(Gae&x`KitWig5pYzL2voot*Se_9|M3|6g; zi2BSFEVUU8%MZ(K{C;+}SSTycpTWc>A>yb7&J^GDi9>>df-ECID;hD4xu_-2Y-5G@OMECz z#t5ir5OC-voU+T@ZIFUKKXT4uoZjkZXE15Dn4&sRmBIy^U%;vb-wkrcx$F%#=xK)9 zSxi!}a<7E-h1^pNuWC5)d?wk4aZ*K}kiCQV6v{Payu+E}RBJX)k=s#bQNO~f%;cer z9SEXj>W(O_LzR%WZyebUYZ|{FN?8zBmjcIGNe10oT0z_(*-GuW%&nGE6D_P_B7|n3 z2-_!v=un(JMRGZ7r2ono>rn8>mXCb+Ow1RXotYQNzc)cR@Y%L>Jb&G|n%tagkmgeS z*#M4sCxoTT(Mug?IHBh*FD{#|)bg>a9A-;gC`G0flS$Db!lu1O4c1Xq@)&hfKeaHG zOH4S=gaudRg2{Tb4NGknLZmswoft*Ou$*MMULumWRbQD}EXH#5ldWi8$@Fmk<=edE zsf)@?;Kq%K=Rola!v?))K5{>h)0Vv$cLW{QfeZ^{g-~$L4b@Raipoo4#G_!580lo9 zx$>p?g7y)ZZBy=1*G4+eiZTTy%}$Fd^ij5SBgtV(rIl5zR5(0JYJ+BWV8S+ZfzrYu zQqIv#1W^;69@P;u9inAX#|Pa7m82Bb5C+g>{?J^v&8=?;LW`F)I(*;Aw#bPdVRuXv zl03K5xR7vS<{F#8g7)v-;egyDBkCqthj@%`ND)*rK=5Ls!G4= zNZqMx<+LqwkR4{8JBA-k0e47tgL@*#(>yBIpSCsav?~2~LL5RNO&@au?b25`O2KsG z#B{Vc6j?JUGsjJEn&ylrXiPC8sChxPuy4Z(_Ll5wG(znhhmC9cvh1)p^UvT5%*uQcE?jDnH_Rf?DjvIz(kLYp)4vc90WbKzAO)MbQ6UMMhQXv=y)cg@2plo4zt2u zhwV+G;2#wEWUljM6}}N>m?9a@JU-i7<+CLWB=ZY`$!EG5{<%9fx&g@y!muN=kYo7e zauc9a%eLJ{xipt0!o~;G(*BIDv}!C%J*!#=bJ;GTIz_5%7<$l;&@vZ{EvC5-cVYqm zrJv zcBN-@{Jl7WmNPE6y$b6+q>cIoURHmskuWB=gLF~Z#QQj_6_@M3f5+Z4?w z0lDgb!NH-TQ^0iOm$t)5&Hoc;eud(vi>7Sbj~)AEEU06NOFFK6vNNIwL6cgHiZLC3 zKf5>jeW|O%uK}G%-=VIyppm;E%-JJ;i_R53MFtPb7Xv~shg;j?-A z&OOFqg_2Lz}S|e!)ng0=t1+qwp zq|)ksp_-cQl%6RIBHhATwRg6fEk<3~0!bDP_IZXW(2;|zGn@IwCkjPRHgLtF{~Ir+ znVLMA=VRG+uD6MXZAXPCYw|?;3Q}^i?g@m5Qj9t;T8wF*gJj(HjR_|dmW$NR9`Q9F zUo_Y5V{OmV;RoDe19fDQ_m9rUud%Nao-=7z?WnL^{nHLvljb_3EI0j&J~h#`FFlGq zh<`#Yz8q}=1`E^3EK1bQc5SaX;AI-qa#aoXmyLAp4~Zs&jx&?ogEx(E`Y}rrcKS?q zvY99w?yQffIk8w{hazNxM}~du{cIynVFQAz^m-v1&A{WKEiF2kVkIl7TB0$Qo$qfH zn=5Kt?pDgAtSc|Bc4sW#`X(w5^qiQ47Pf2>TkU1So5zKEqa)bCXZhsQ4$~lmTmjAh z?;#V0rcp|l&}7ecQCRDuP_jeOBF~~o3LBL8gInMS^n=iF0JD%P=dIRL$Es4iw3Qm( zY#LAahzi*nZCFzh)FWyN2cXdm*`;za%PG&kbnO!j$~tt$G;QKG3X4bNZ+x>--WpRz zuS#_L@ww}E3^}s6{1`ObszDVBYgNiHQ=*K#gPpO1_)O_!&8#@b!(PUY$w%J!%gmL< zZWwdtTmR&X*3!Fdd$4)0yek=2KNU@LjdeOHGc7HX*>nsW6TpKv^!z{D?LGCZgIEW}?|}!DC-6 z$BuH|@vLNFx-_O0FLBHcKQ*0~t9T_Xm;~1}t+XT8@Tg0Vwqw{PW!;`W$^r847_rWc zq5p%zi-)uQ-zYz7YjQGYv?MxVXeMZZ#jUbkc-h&~s+U4jC$_Ar4X?$=bX)ene9&BaXQIs3Qa5A%TB0I~U%;|WL$1^%{0Z5fBKG1#& z?^?V}`VdzRZ)$7Gbw((KH*}sverz1Ak2!NY*vb3~Z;@lH?j!`aVBO-?YnJx+FJ8WQ z#hS3WPs~>-nr=9;#@gh~|UV`1{3*f!&`^bSvxV@V)v z!u;=@DA&PGS)b0ffKGI(&UE|6zBQ5hD4izj9Bl&3*Sd)oo5xTOYDT?XVbOw_MqyC6!OSIuW1`Ns!T z#IukFol7tAaob8M-QIG_x?6jO*fqm<9}+|}Vpk#%yc;uMH4O#krKxTJCH@yVeoHMliP0U2vjwv?DsIG6E8x?jWMfiqIG}^_i-5igyX4?4LIC zkoDQlC9qr{?RW{g)v~6f6Z$(F9koqNwq`NsEYS|k37uj$IQi&JW`?fgzZ-|yi-5A6 z&31!0i|&XWR-@AkIeB%-TqNPHH#;yd6F>!zh}!|?_~@h)t!Sg&7+E=myS(xK-fmlF z6urgm6CuN}V^D^BL3Sb@A*7%$1iRiPi#^bJde}-Gd%LoAEIfCU|a-$ncH!NTx>5WIqx{>_(SHHZGdt9d(JhO;ROq zx*go-8|9RQP?H4u)v;lmY_tjeFX3AB`2{a=W{`m(V2qA#DdNox4TdC|6o?1Dd@5j1$`>S z7yo~42+H0DZM@o=os4K(_cI;gIoi@WtD}QWWS}Dk(MxR-D<|7VX;Ma0r}I7LPEqyA zd5~mV#!rh}Yoe48;|d?hO>c&N9$<4zg~K4n@0WfYx5#4>b6CCXf{uAg2JU(B8pneO zBYFOB^3qv^VKc@5jqKw2gfXv?(g0s}$x&_0xTvkjvV;%oqfFU0;+65h!XQE7>I%+@ zRSWtH=Whfh0aGCVZcHv%wutjT-O3N4Gv)jnuR@CKlTn!vNL4?f&>2dsXvwOWaWXrh zP#-GbePDN)olv+;3Zj3m=8H+@8?X~LHX7>X?NV60E9^xpm^y`| za?w}dgSn-g6gfGpJ!qB z4@rW?GF|5knTK8du3nQAjt?fBiD=syWwrX^QFbsQ|0}6=VEk}FBxZ+DCHN<$pD3&^ z_gTM(xRu-1bF%H;c6_3??wa#MAKYNiNKG>(%{LxQ zWRH1OJr$osEeHxpc$cPg>Gh>qu;bQ9y`OH9v z3Y+wdJ#)wdSXpgKMl9J! z*UTGpS+Fg%qX`mT(*LFN`?4FSjj0{-&$#kca1}bo4C0YxD2{0?irdkA;|@8JjU)zZ zq~)f~??%$$vQ8R>ErcES&#~PvtdfN~CAnh3L}U^|dkM; z3AUO\n" "Language-Team: phpLDAPadmin \n" +"Last-Translator: Unknown \n" +"POT-Creation-Date: 2005-11-29 17:45+0100\n" +"PO-Revision-Date: 2005-11-29 18:22+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-11-29 23:48+0000\n" -"X-Generator: Launchpad (build Unknown)\n" -#: ../../htdocs/mass_delete.php:86 -#, php-format -msgid "%s of %s entries failed to be deleted." -msgstr "%s sur %s entrées n'ont pu être effacées." -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "(" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../lib/HTMLTree.php:486 -msgid "(Session timed out. Automatically logged out.)" -msgstr "(Session expirée. Déconnexion automatique.)" -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr ")" - -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" -msgstr ":" - -#: ../../lib/search_form_advanced.php:103 -msgid "A list of attributes to display in the results (comma-separated)" -msgstr "" -"Une liste d'attributs à afficher dans le résultat (séparé par des virgules)" - -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 -msgid "A random password was generated for you" -msgstr "Un mot de passe aléatoire a été généré pour vous" - -#: ../../lib/ldif_functions.php:532 -msgid "A valid deleteoldrdn attribute should be specified" -msgstr "Un attribut deleteoldrdn valide devrait être spécifié" - -#: ../../lib/ldif_functions.php:243 -msgid "A valid dn line is required." -msgstr "Une ligne dn valide est requise." - -#: ../../lib/ldif_functions.php:538 -msgid "A valid newrdn attribute should be specified" -msgstr "Un attribut newrdn valide devrait être spécifié" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 -msgid "Add" -msgstr "Ajouter" - -#: ../../htdocs/add_value_form.php:182 -msgid "Add New Value" -msgstr "Ajouter une nouvelle valeur" - -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 -msgid "Add ObjectClass and Attributes" -msgstr "Ajouter des objectClass et des attributs" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "Ajouter toutes les valeurs" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 -#, php-format -msgid "Add an additional value to attribute '%s'" -msgstr "Ajouter une valeur additionnel à l'attribut « %s »" - -#: ../../htdocs/add_value_form.php:93 -msgid "Add new" -msgstr "Ajouter une nouvelle valeur" - -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 -msgid "Add new ObjectClass" -msgstr "Ajouter un nouvel ObjectClass" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 -msgid "Add new attribute" -msgstr "Ajouter un nouvel attribut" - -#: ../../htdocs/add_attr_form.php:114 -msgid "Add new binary attribute" -msgstr "Ajouter un nouvel attribut binaire" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "Ajouter la sélection" - -#: ../../htdocs/ldif_import.php:62 -msgid "Adding..." -msgstr "Ajout..." - -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 -msgid "Advanced Search Form" -msgstr "Recherche avancée" - -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "Alias" - -#: ../../htdocs/schema.php:110 -msgid "Aliases" -msgstr "Alias" - -#: ../../htdocs/mass_delete.php:88 -msgid "All entries deleted successfully." -msgstr "Toutes les entrées ont été supprimées avec succès." - -#: ../../lib/EntryWriter1.php:825 -#, php-format -msgid "An attribute (%s) was modified and is highlighted below." -msgstr "Un attribut (%s) a été modifié et est surligné ci-dessous." - -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "Une entrée doit avoir au moins une classe structurante." - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "Connexion anonyme" - -#: ../../htdocs/login.php:164 -msgid "Anonymous Bind" -msgstr "Connexion anonyme" - -#: ../../htdocs/delete_form.php:102 -msgid "Are you sure you want to permanently delete this object?" -msgstr "Êtes-vous sûr de vouloir supprimer définitivement cet objet ?" - -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 -msgid "Attribute" -msgstr "Attribut" - -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "Types d'attributs" - -#: ../../lib/ldif_functions.php:455 -msgid "Attribute is not valid" -msgstr "Ce n'est pas un attribut valide." - -#: ../../lib/ldif_functions.php:375 -msgid "Attribute not well formed" -msgstr "Attribut mal formé." - -#: ../../htdocs/login_form.php:63 -msgid "Authenticate" -msgstr "Authentification" - -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "Authentification auprès du serveur" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "Membres disponibles." - -#: ../../htdocs/entry_chooser.php:65 -msgid "Back Up..." -msgstr "Sauvegarde..." - -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 -msgid "Bad username or password. Please try again." -msgstr "Mauvais nom d'utilisateur ou mot de passe. Veuillez réessayer." - -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 -msgid "Base (base dn only)" -msgstr "Base (dn de base seulement)" - -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 -msgid "Base DN" -msgstr "Base DN" - -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 -msgid "Binary value" -msgstr "Valeur binaire" - -#: ../../htdocs/copy.php:61 -msgid "Building snapshot of tree to copy... " -msgstr "Construction d'un instantané de l'arborescence à copier... " - -#: ../../lib/export_functions.php:38 -msgid "CSV (Spreadsheet)" -msgstr "CSV (feuille de calcul)" - -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "La classe demandée n'a pu être trouvée" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 -msgid "Cancel" -msgstr "Annuler" - -#: ../../htdocs/compare.php:343 -msgid "Check password" -msgstr "Vérifier le mot de passe" - -#: ../../lib/EntryWriter1.php:2427 -msgid "Check password..." -msgstr "Vérifier l'adresse..." - -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "Vérification du mot de passe" - -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "Fils" - -#: ../../lib/functions.php:3223 -msgid "Click to popup a dialog to select a date graphically" -msgstr "" -"Cliquez afin de faire apparaitre une boîte de dialogue permettant de choisir " -"une date graphiquement" - -#: ../../lib/functions.php:2239 -msgid "Click to popup a dialog to select an entry (DN) graphically" -msgstr "" -"Cliquez afin de faire apparaitre une boîte de dialogue permettant de choisir " -"une entrée graphiquement" - -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 -#, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "" -"Cliquez pour afficher la définition du schéma pour le type d'attribut « %s »" - -#: ../../htdocs/schema.php:106 -msgid "Collective" -msgstr "Collectif" - -#: ../../htdocs/update_confirm.php:303 -msgid "Commit" -msgstr "Valider" - -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 -msgid "Compare" -msgstr "Comparer" - -#: ../../htdocs/compare_form.php:21 -msgid "Compare another DN with" -msgstr "Comparer un autre DN avec" - -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 -msgid "Compare this DN with another" -msgstr "Comparer cn DN avec un autre" - -#: ../../lib/EntryWriter1.php:776 -msgid "Compare with another entry" -msgstr "Comparer avec une autre entrée" - -#: ../../htdocs/compare.php:42 -msgid "Comparing the following DNs" -msgstr "Compararaison des DNs suivants" - -#: ../../htdocs/export_form.php:84 -msgid "Compress" -msgstr "Compresser" - -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "Configuration ancienne dans le cache." - -#: ../../htdocs/mass_delete.php:92 -#, php-format -msgid "Confirm mass delete of %s entries on server %s" -msgstr "Confirmer la suppression de masse de %s entrées sur le serveur %s" - -#: ../../lib/EntryWriter1.php:327 -msgid "Container" -msgstr "Conteneur" - -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "Étape 1 de 2 : nom et ObjectClass" - -#: ../../lib/ldif_functions.php:525 -msgid "Container is null" -msgstr "Conteneur vide" - -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 -msgid "Copy" -msgstr "Copier" - -#: ../../htdocs/copy_form.php:96 -msgid "Copy " -msgstr "Copier " - -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "Copier l'entrée" - -#: ../../lib/EntryWriter1.php:741 -msgid "Copy or move this entry" -msgstr "Copier ou déplacer cette entrée" - -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "Copie effectuée !" - -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "" -"Copier cet objet vers un autre emplacement, un nouveau DN, ou un autre " -"serveur" - -#: ../../htdocs/copy.php:57 -msgid "Copying " -msgstr "Copie " - -#: ../../htdocs/ldif_import.php:70 -msgid "Could not add object:" -msgstr "Impossible d'ajouter un objet :" - -#: ../../htdocs/create.php:133 -msgid "Could not add the object to the LDAP server." -msgstr "Impossible d'ajouter l'objet au serveur LDAP." - -#: ../../htdocs/login.php:137 -msgid "Could not bind anonymously to server." -msgstr "Impossible de se connecter anonymement au serveur." - -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "Impossible de se connecter au serveur LDAP (%s)." - -#: ../../lib/server_functions.php:347 -#, php-format -msgid "Could not connect to \"%s\" on port \"%s\"" -msgstr "Impossible de se connecter à « %s » sur le port « %s »" - -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "Impossible de se connecter au serveur LDAP." - -#: ../../htdocs/ldif_import.php:71 -msgid "Could not delete object:" -msgstr "Impossible de supprimer l'objet :" - -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 -#, php-format -msgid "Could not delete the entry: %s" -msgstr "Impossible de supprimer l'entrée : %s" - -#: ../../htdocs/entry_chooser.php:101 -msgid "Could not determine base DN" -msgstr "Impossible de déterminer le DN racine" - -#: ../../lib/HTMLTree.php:82 -msgid "Could not determine the root of your LDAP tree." -msgstr "Impossible de déterminer la racine de votre arborescence LDAP." - -#: ../../lib/functions.php:1849 -#, php-format -msgid "Could not fetch jpeg data from LDAP server for attribute %s." -msgstr "" -"Impossible de récupérer les données JPEG depuis votre serveur LDAP pour " -"l'attribut %s." - -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 -msgid "Could not logout." -msgstr "Impossible de se déconnecter." - -#: ../../htdocs/ldif_import.php:74 -msgid "Could not modify object:" -msgstr "Impossible de modifier l'objet :" - -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 -msgid "Could not perform ldap_mod_add operation." -msgstr "Impossible d'effectuer ldap_mod_add operation." - -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 -msgid "Could not perform ldap_modify operation." -msgstr "Impossible d'effectuer une opération ldap_modify." - -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 -msgid "Could not rename object:" -msgstr "Impossible de renommer l'objet :" - -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 -msgid "Could not rename the entry" -msgstr "Impossible de renommer l'entrée" - -#: ../../htdocs/schema.php:31 -msgid "Could not retrieve schema from" -msgstr "Impossible de récupérer le schéma de" - -#: ../../htdocs/login.php:152 -msgid "Could not set cookie." -msgstr "Impossible de définir le cookie." - -#: ../../lib/server_functions.php:265 -msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "" -"Impossible de démarrer TLS. Veuillez vérifier la configuration de votre " -"serveur LDAP." - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "" -"Impossible d'écrire dans le répertoire $jpeg_temp_dir %s. Veuillez vérifier " -"que votre serveur Web peut écrire des fichiers dedans." - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "Créer" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "Créer une entrée" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "Créer un objet" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "Créer une sous-entrée" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "Crée une nouvelle entrée dans" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "Créer une autre entrée" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "La créer ?" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "Créer une nouvelle entrée ici" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "Création effectuée !" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "Crédits" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "Liste actuelle de" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "Couper" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "DN" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "DN indisponible" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "Exportation DSLM pour : %s" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "Valeur par défaut" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "Supprimer" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "Supprimer %s" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "Supprimer les entrées sélectionnées" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "Supprimer ce DN" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "Supprimer la photo" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "Supprimer après la copie (déplacement) :" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "Supprimer tous les %s objets" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "Supprimer la photo" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "Supprimer cette entrée" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "Suppression" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "Suppression de %s" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "Suppression..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "Progression de la suppression sur le serveur « %s »" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "Description" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "DN de destination" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "Serveur de destination" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "Le serveur de destination est en lecture seule." - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "Afficher la nouvelle entrée" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "Nom distingué" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "Voulez-vous vraiment effacer %s %s %s" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "Voulez-vous effectuer ces modifications ?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "Documentation" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "Ne pas vous arrêter sur les erreurs" - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "Donation" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "Une erreur est survenue lors de la recherche." - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "Saisissez la valeur que vous voulez ajouter :" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "Entrées trouvées :" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "Entrée" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "L'entrée %s et la sous-arborescence ont été supprimé avec succès." - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "Sélecteur d'entrées" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "Entrée créée" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "Égalité" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "Erreur" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "" -"Erreur lors de l'applel de mass_delete.php. Il manque mass_delete dans les " -"variables POST." - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "Code d'erreur" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "Erreur numéro :" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" -"Erreur : Vous avez une erreur dans votre fichier de configuration. Les trois " -"seules valeurs autorisées pour auth_type dans la section $servers sont « " -"session », « cookie », et « config ». Vous avez saisi « %s », qui n'est pas " -"autorisée." - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "Exporter" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "Exporter les entrées" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "Format d'exportation" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "Exporter une sous-arborescence" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "Échoue" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "L'ajout de l'attribut a échoué." - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "La copie du DN a échoué : " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "La suppression de l'entrée %s a échoué" - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "Fichier" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "Filtre" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "Filtrage effectué :" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "Format" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "Chiffrement" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "" -"Généré par phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) pour %s" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "Erreur générique" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "Aller à" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "Retour" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "Aller à" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "Aller vers %s" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "Membres du groupe" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "Aide" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "Cacher" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "Cacher les attributs internes" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "Astuce" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "" -"Astuce : la copie entre différents serveurs ne fonctionne que si il n'y a " -"aucune violations de schéma" - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "" -"Astuce : pour supprimer un attribut, videz le champ texte et enregistrez." - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "" -"Astuce : pour afficher le schéma d'un attribut, cliquez sur le nom de " -"l'attribut." - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "" -"Astuce : vous devez choisir un seul objectClass structurel (affiché en gras " -"ci-dessus)" - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "Accueil" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please report it." -msgstr "si c'est le cas, veuillez la rapporter." - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "" -"Si vous voulez ajouter vos propres critères dans la liste. Veuillez vous " -"assurer d'éditer search.php pour les gérer. Quitte." - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "Importer un fichier LDIF" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "Importer les entrées d'un fichier LDIF" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" -"Instructions : afin d'ajouter ces objectClass à cette entrée, vous devez " -"spécifier" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "L'inactivité vous déconnectera à %s" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "Inclure les attributs système" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "Version de PHP incorrecte" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "Hérité de" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "Hérite de" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "Instructions" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "Droits d'accés insuffisants." - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "Valeur RDN non valide" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "Format d'exportation non valide" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "Est-ce une anomalie phpLDAPadmin ?" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "" -"Il semble que votre serveur LDAP a été configuré pour ne pas révéler sa " -"racine." - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" -"Il semble que sasl_authz_id_regex \"%s\".\" contient une expression " -"rationnelle PCRE invalide." - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "Sauter vers une règle correspondante" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "Sauter vers un type d'attribut" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "Sauter vers un objectClass" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "Sauter vers cette définition d'objectClass" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "LDAP dit :" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "Exportation LDIF pour : %s" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "Erreur d'analyse LDIF" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "Importation au format LDIF" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "Ligne :" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "Numéro de ligne :" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "Les lignes se finissent par" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "Liste des entrées à supprimer :" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "Connecté en tant que :" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "Connexion" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "DN de connexion" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "Connexion..." - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "Se déconnecter" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "Se déconnecter de ce serveur" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "Rechercher dans :" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "Courriel" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "" -"Veuillez vous assurer que vos filtres (ci-dessus) sélectionneront tous les " -"enregistrements fils." - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "Tableau mass_delete malformé." - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "Suppression de masse" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "" -"La suppression de masse n'est pas activé. Veuillez l'activer dans config.php " -"avant de procéder." - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "Règle OID correspondante" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "Règles correspondantes" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "Longueur maximum" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "Taille maximale du fichier :" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "Mémoire basse" - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "Il manque %s dans le fichier XML." - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "Attribut ou type manquant pour l'entrée" - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "Il manque des attributs pour cette entrée" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "Configuration requise manquante" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "Extension requise manquante" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "Fichier téléchargé manquant." - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "Modification avec succès !" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "Modifier le groupe" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "Modifier les membres de '%s'" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "Modification..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "Nom" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "Nouveaux attributs requis" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "Nouvelle valeur" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "Non" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "Aucun DN spécifié" - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "Aucun fichier LDIF spécifié. Veuillez essayer de nouveau." - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "Aucun modèle" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "Aucune valeur" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "Aucun nom d'attribut défini." - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "Aucun filtre d'exportation trouvé." - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "Aucun cache à purger." - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "Aucune valeur pour l'attribut" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "Aucun attribut interne" - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "Personne n'est connecté sur ce serveur." - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "Aucune requête n'a été définie dans config.php." - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "Aucune entrée: %s" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "Pas de tel fichier :" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "Aucun élément de schéma : « %s »" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "Aucune version trouvé. Assume 1." - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "" -"Il n'y a pas assez d'informations pour se connecter au serveur. Veuillez " -"vérifier votre configuration." - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "Note" - -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "" -"Note : il peut vous être demandé de saisir les nouveaux attributs requis par " -"ces objectClass" - -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" -"Note : ceci est potentiellement très dangereux et vous le faites à vos " -"risques et périls. Cette opération ne peut être annulée. Prenez bien note " -"que les alias, les référents, et d'autres choses pourront vous causer des " -"problèmes." - -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "Attention, la taille limite de recherche est dépassée." - -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" - -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 -msgid "ObjectClasses" -msgstr "ObjectClass" - -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" -"L'attribut « %s » est marqué en lecture seule dans la configuration de " -"phpLDAPadmin." - -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "Le serveur ne contient pas d'objectClass en XML." - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "Obsolète" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "Ancienne valeur" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "One (un niveau au-dessous de la base)" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "Attributs optionnels" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "Ou alors, votre serveur LDAP ne fournit pas cette information." - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "ou coller votre LDIF ici" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "Trier selon :" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "Triage" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "Page %d" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "Parent de" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "Mot de passe" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "Outil de vérification de mot de passe" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "Les mots de passe ne correspondent pas !" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "Correspondance du mot de passe !" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "Supprimer aussi toutes les sous-entrées ?" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "Veuillez vérifier si ce bug a déjà été reporté" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" -"Veuillez définir $jpeg_temp_dir à un répertoire accessible en écriture dans " -"le config.php de phpLDAPadmin" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "Veuillez la spécifier dans config.php" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "Recherches prédéfinies" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 -msgid "Proceed >>" -msgstr "Procéder >>" - -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "Procéder >>" - -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "" -"Purge toutes les données cachées dans phpLDAPadmin, incluant les schémas de " -"serveur." - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "Purger les caches" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "Purger les caches" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "%s octets de cache purgés." - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "Voulez-vous vraiment supprimer l'attribut" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "Copie récursive" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "progression de la copie récursive" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "Progression de la suppression récursive" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "Copie récursive de toutes les sous-entrées de cet objet." - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "Rafraîchir" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "Rafraîchir tous les conteneurs étendus pour" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "Rafraîchir cette entrée" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "Supprimer la sélection" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "Renommer" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "Renommer l'entrée" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "Renommer avec succés!" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "Renommage..." - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "Signaler une anomalie" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "Demander une fonctionnalité" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "Attributs requis" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "Attribut requis pour l(es) objectClass %s" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "Extraction du DN" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "Enregistrer" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "Enregistrer les modifications" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "Enregistrer un dump de cet objet" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "Enregistrer un dump de cet objet et de tous ses sous-objets" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "Enregistrer dans un fichier" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "Enregistrer les modifications" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "Schema pour le serveur" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "Rechercher" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "Filtre de recherche" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "Portée de la recherche" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "Rechercher les entrées dont" - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "Recherche non autorisée" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "Erreur de sécurité : le fichier téléchargé est peut être corrompu." - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "Sélectionner une recherche prédéfinie" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "Sélectionner un modèle pour le processus de création" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "Sélectionner un modèle pour le processus de création" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "Sélectionner un fichier LDIF :" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "Serveur" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "Choisir un serveur :" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "Info serveur pour : " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "Le serveur rapporte les informations suivantes à propos de lui-même" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "Montrer" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "Afficher les attributs" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "Montrer le cache" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "Afficher les attributs internes" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "Affichage des résultats %s à %s." - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 msgid "Simple Search Form" msgstr "Recherche simple" -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "" -"Puisque vous avez changé de mot de passe, vous devez vous reconnecter avec " -"votre nouveau mot de passe." -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "Valeur simple" - -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "Passer" - -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "" -"Quelques attributs (%s) ont été modifiés et sont surlignés ci-dessous." - -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "" -"Désolé, vous n'êtes pas autorisé à utiliser phpLDAPadmin avec ce serveur " -"LDAP." - -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "DN source" - -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "Étape 2 de 2 : spécifie les attributs et valeur" - -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "" -"Filtre de recherche LDAAP standard. Exemple : (&(sn=Smith)(givenname=David))" - -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "Étape %s sur %s" - -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "Sub (sous-arborescence entière)" - -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "Règle de sous-chaîne" - -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "Succès" - -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "Suppression réussie du DN " - -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "Connexion au serveur %s effectuée." - -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "Basculer l'entrée" - -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "Syntaxe" - -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "Syntaxe OID" - -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "Syntaxes" - -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "Modèle" - -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" - -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "Modèles" - -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "Le dn relatif (%s) n'existe pas." - -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "" -"L'attribut « %s » est marqué en lecture seule dans la configuration de " -"phpLDAPadmin." - -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "L'attribut (%s) est en lecture seule." - -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "Le nom de l'attribut devrait être ajouter, supprimer ou remplace" - -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "Le nom de l'attribut devrait être newsuperior" - -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "" -"L'attribut a modifié ne correspond pas à celui spécifié par l'attribut %s." - -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "Le conteneur de destination (%s) est une feuille de l'arbre LDAP." - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "Le conteneur que vous avez spécifié (%s) n'existe pas." - -#: ../../htdocs/create.php:39 -#, php-format -msgid "The container you specified (%s) does not exist. Please try again." -msgstr "" -"Le conteneur que vous avez spécifié (%s) n'existe pas. Veuillez essayer de " -"nouveau." - -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "La suppression de ces objectClass" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "Le conteneur de destination (%s) n'existe pas." - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "L'entrée de destination (%s)existe déjà." - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "" - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "L'entrée (%s) est en lecture seule." - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "Cette entrée n'existe pas." - -#: ../../htdocs/add_attr.php:56 -msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "" -"Le fichier que vous avez choisi est soit vide, soit il n'existe pas. " -"Veuillez revenir et essayer de nouveau." - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "" -"Le fichier que vous avez sélectionné est partiellement téléchargé, surement " -"du à une erreur réseau." - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "" -"Le fichier que vous avez téléchargé est trop grand. Veuillez vérifier dans " -"php.ini le réglage upload_max_size" - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" -msgstr "" -"Le DN complet de la nouvelle entrée a créer lors de la copie de l'entrée " -"source" - -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" -msgstr "La portée dans laquelle effectuer la recherche" - -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "Aucun résultat pour cette recherche." - -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "Le serveur ne supporte pas complètement le protocole LDAP." - -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "Les DN source et destination sont les mêmes." - -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "La valeur de l'attribut url devrait commencer par file:///" - -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "Il y a" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" -"Il y a plus d'un dn pour uidpool, veuillez changer le paramètre du filtre" - -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "Cette action nécessite que vous ajoutiez" - -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "" -"Cette attribut a été mis en lecture seule par l'administrateur de " -"phpLDAPadmin" - -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "Cet attribut est requis" - -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "Cet attribut est requis pour le RDN." - -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "L'entrée racine n'existe pas." - -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "" -"Ceci peut arriver pour différentes raisons, le plus probable est sans doute :" - -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "Cette entrée n'existe pas." - -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "Cette entrée n'a aucun attribut" - -#: ../../htdocs/delete_form.php:46 -#, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "" -"Cette entrée est la racine d'une sous-arborescence contenant %s entrées." - -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "C'est un ObjectClass structurel et il ne peut être supprimé." - -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "Ce n'est pas un DN valide." - -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "Cet objectClass est obsolète." - -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "Cette opération n'est pas permise par la configuration" - -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "Ce serveur n'a rien à rapporter." - -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "Ce modèle n'est pas autorisé dans ce conteneur." - -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "Avertissement : la connexion Web n'est pas chiffrée." - -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "Vers" - -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "Pour vous reconnecter, veuillez cliquer sur le lien suivant :" - -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "Entrées totales" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "Corbeille" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "Type" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "URL" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "dn de l'uidpool non trouvé, veuillez changer le paramètre du filtre" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 -#, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "" -"Incapable de se connecter à %s avec votre crédentiel auto_uid . " -"Veuillez vérifier votre fichier de configuration." - -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "" -"Impossible de se connecter à %s avec votre crédentiel unique_attrs. " -"Veuillez vérifier votre fichier de configuration." - -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "Impossible de supprimer, le serveur est en lecture seule." - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "Impossible d'ouvrir le fichier." - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "Impossible de lire le fichier." - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "auth_type inconnu : %s" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "" - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "Option de critère non reconnue : " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "Numéro d'erreur inconnu" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "Le format du résultat de la recherche n'est pas reconnu : %s" - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "Nom de fichier non sûr :" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "Le fichier LDIF téléchargé est manquant." - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "Usage" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "Utiliser le menu de gauche pour naviguer" - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "Utilisé par ces attributs" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "Utilisé par ces objectClass" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "Modification utilisateur" - -#: ../../lib/EntryWriter1.php:797 -#, php-format -msgid "View %s children" -msgstr "Afficher %s sous-entrées" - -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "Afficher 1 sous-entrée" - -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "Afficher le schéma pour" - -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "Afficher les informations fournies par le serveur" - -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "Afficher la description de schéma de cet objectClass" - -#: ../../lib/EntryWriter1.php:819 -msgid "Viewing entry in read-only mode." -msgstr "Afficher les entrées en lecture seule." - -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" -"AVERTISSEMENT: Vous ne pouvez pas activer simultanément les compressions PHP " -"et phpLDAPadmin. Veuillez désactiver zlib.output_compression ou ajouter " -"$config->custom->appearance['compress']=false" - -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "Avertissement" - -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "" -"Lors de la copie récursive, ne copier que les entrées qui correspondent à ce " -"filtre" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "oui" - -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "Oui, supprimer !" - -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "" -"Vous n'utilisez pas « https ». Le navigateur Web transmettra les " -"informations de connexion en clair." - -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 -msgid "You cannot perform updates while server is in read-only mode" -msgstr "" -"Vous ne pouvez effectuer de mises à jour tant que le serveur est en lecture " -"seule" - -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "" -"Vous ne pouvez renommer une entrée qui a des sous-entrées (cad, l'opération " -"de renommage n'est pas autorisé sur des entrées non terminales)" - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "Vous n'avez pas modifié le RDN" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "" -"Vous n'avez pas sélectionné d'objectClass pour cet objet. Veuillez revenir " -"et le faire." - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "Vous n'avez sélectionné aucune entrées à supprimer." - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "Vous n'avez sélectionné aucun objectClass pour cet objet." - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "Vous avez trouvé un bug mineur dans phpLDAPadmin!" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "" -"Vous n'êtes pas encore connecté au serveur sélectionné, vous ne pouvez pas " -"effectuer de recherche dessus." - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "Vous avez spécifié deux mots de passe différents." - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "Vous avez laissé le champ RDN vide." - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 -msgid "You left the attribute value blank. Please go back and try again." -msgstr "" -"Vous avez laissé la valeur de l'attribut blanc. Veuillez revenir et essayer " -"de nouveau." - -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "Vopus avez laissé le DN de destination vide." - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "Vous avez laissé le mot de passe vide." - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "Vous avez laissez une valeur blanche pour l'attribut requis (%s)." - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "Vous n'avez fait aucune modification" - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "Vous devez choisir un format d'exportation." - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "" -"Vous devez soit télécharger un fichier, soit fournir un texte au format LDIF " -"dans la zone de texte." - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "Vous devez spécifier un DN" - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "" -"Vous avez besoin d'un autre ObjectClass(es) pour ajouter cet attribut %s." - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" -"Vous avez spécifié une valeur non valide pour auto_uid_number_mechanism " -"(\"%s\")\n" -"\t\t\t\t dans votre configuration. Seul « uidpool » et « search » sont " -"valides.\n" -"\t\t\t\t Veuillez corriger ce problème." - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" -"Vous avez spécifié le « auto_uid_number_mechanism » comme « search » dans " -"votre\n" -"\t\t\t\t\t\t configuration du serveur %s, mais vous n'avez pas " -"spécifié le\n" -"\t\t\t\t\t\t « auto_uid_number_search_base ». Veuillez le spécifier avant de " -"procéder." - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "Il vous sera demander de confirmer cette décision" - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "" -"Votre configuration de PHP a désactivé le téléchargement de fichiers. " -"Veuillez vérifier php.ini avant de procéder." - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" -"Votre installation PHP n'a pas de fonction mhash(). Impossible de faire de " -"signature SHA." - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "Votre installation de PHP ne supporte pas TLS." - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" -"Votre installation PHP ne fournit pas la fonction ldap_sasl_bind(). Cette " -"fonction est présente dans PHP 5.x si la compilation est effectuée avec " -"l'option --with-ldap-sasl." - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "" -"Votre PHP.INI ne contient pas file_uploads = ON. Veuillez autoriser le " -"téléchargement de fichiers dans PHP." - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "Votre session s'est terminé avec" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" -"Votre tentative d'ajouter %s (%s) à
%s
n'est " -"pas autorisée. Cet attribut/valeur appartient à une autre entrée.

Vous " -"pouvez rechercher cette entrée." - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" -"Votre tentative d'ajouter %s (%s) à
%s
n'est " -"pas autorisée. Cet attribut/valeur appartient à une autre entrée.

Vous " -"souhaitez rechercher cette entrée." - -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "Votre configuration a été automatiquement rechargée." - -#: ../../lib/functions.php:1172 -#, php-format -msgid "" -"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " -"for server %s" -msgstr "" -"Votre configuration de phpLDAPadmin spécifie un auto_uid_search_base non " -"valide pour le serveur %s" - -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "" -"Votre bibliothèque système crypt ne supporte pas le chiffrement blowfish." - -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 -msgid "Your system crypt library does not support extended DES encryption." -msgstr "" -"Votre bibliothèque système crypt ne supporte pas le chiffrement DES étendu." - -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 -msgid "Your system crypt library does not support md5crypt encryption." -msgstr "" -"Votre bibliothèque système crypt ne supporte pas le chiffrement md5crypt." - -#: ../../lib/template_functions.php:984 -#, php-format -msgid "" -"Your template calls php.Function for a default value, however (%s) is NOT " -"available in the POST FORM variables. The following variables are available " -"[%s]." -msgstr "" -"Votre gabarit demande une valeur par défaut à php.Function, mais (%s) n'est " -"PAS disponible dans les variables du formulaire POST. Les variables " -"disponibles sont [%s]." - -#: ../../lib/EntryReader.php:262 -#, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "Votre gabarit a une fonction post inconnue (%s)." - -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "La variable (%s) manque à votre gabarit." - -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "Votre version de PHP n'effectue pas correctement la requête." - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[attribut supprimé]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "Aucune valeur" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "ajouter un attribut" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "ajouter une valeur" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "ajouter une valeur" - -#: ../../htdocs/search.php:120 -msgid "advanced search" +msgid "Advanced Search Form" msgstr "Recherche avancée" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "alias" -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "parcourir" +msgid "Server" +msgstr "Serveur" -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "anomalie" -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "octets" +msgid "Search for entries whose" +msgstr "Rechercher les entrées dont" -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "demandeur" -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "caractère" +msgid "Base DN" +msgstr "Base DN" -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "caractères" -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "confirmer" +msgid "Search Scope" +msgstr "Portée de la recherche" -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "copier l'entrée" -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "Créer une entrée" +msgid "Show Attributtes" +msgstr "Afficher les attributs" -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "supprimer l'attribut" -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "Supprimer une entrée" +msgid "Search" +msgstr "Rechercher" -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "supprimer plusieurs entrées" -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "télécharger la valeur" +msgid "Select a predefined search" +msgstr "Sélectionner une recherche prédéfinie" -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "vide" -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "entrées" +msgid "Predefined Searches" +msgstr "Recherches prédéfinies" -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "entrée" -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "exporter" +msgid "No queries have been defined in config.php." +msgstr "Aucune requête n'a été définie dans config.php." + -#: ../../htdocs/search.php:273 msgid "export results" msgstr "exporter le resultat" -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "faux" -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "a été créé." +msgid "Unrecognized search result format: %s" +msgstr "Le format du résultat de la recherche n'est pas reconnu : %s" -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "" -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "importer" +msgid "Format" +msgstr "Format" -#: ../../lib/HTMLTree.php:248 -msgid "info" -msgstr "info" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "« %s » est un alias de « %s »" +msgid "list" +msgstr "liste" -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "jpegPhoto contient des erreurs
" -#: ../../lib/functions.php:351 -msgid "light" -msgstr "lumière" +msgid "table" +msgstr "table" -#: ../../lib/functions.php:132 -msgid "line" -msgstr "ligne :" -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "connexion" +msgid "Your config.php specifies an invalid value for $default_search_display: %s. Please fix it" +msgstr "Votre config.php spécifie une valeur non valide pour $default_search_display : %s. Veuillez corriger cela" -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "se déconnecter" -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "La variable POST mass_delete n'est pas un tableau." +msgid "Page %d" +msgstr "Page %d" -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "membres dans le groupe" -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "min. d'inactivité. Vous avez été automatiquement déconnecté." +msgid "Next Page" +msgstr "Page suivante" -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "Étape 2 of 2 : spécifie les attributs et valeur" -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "Modifier les membres d'un groupe" +msgid "The search found no results." +msgstr "Aucun résultat pour cette recherche." -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "nouveau" -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "nouveaux attributs" +msgid "Request feature" +msgstr "Demander une fonctionnalité" -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "aucune description" -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "aucune description disponible" +msgid "Report a bug" +msgstr "Signaler une anomalie" -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "aucune entrées" -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "aucun nouvel attribut disponible pour cette entrée" - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "aucun nouvel attribut binaire pour cette entrée" - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "aucun" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "aucun, supprimer la valeur" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "non applicable" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "non spécifié" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" -"phpLDAPadmin peut supprimer récursivement cette entrée et toutes ses %s sous-" -"entrées. Voir ci-dessous pour une liste de toutes les entrées que cette " -"action supprimera. Voulez-vous le faire ?" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "" -"phpLDAPadmin ne sais pas comment récupérer le schéma de votre serveur." - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "Logo phpLDAPadmim" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "Recherches prédéfinies" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "vider" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "lecture seule" - -#: ../../lib/HTMLTree.php:240 -msgid "refresh" -msgstr "rafraîchir" - -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "rafraîchir" - -#: ../../lib/EntryWriter1.php:1829 -msgid "rename" -msgstr "renommer" - -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "Renommer l'entrée" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "requis" - -#: ../../lib/HTMLTree.php:224 msgid "schema" msgstr "schéma" -#: ../../lib/HTMLTree.php:232 + msgid "search" msgstr "rechercher" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "secondes" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "supprimer l'attribut dn relatif" +msgid "create" +msgstr "créer" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "Recherche simple" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "Étape %s sur %s" +msgid "info" +msgstr "info" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "structurel" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "" -"ce que cet objectClass nécessite. Vous pouvez le faire dans ce formulaire." +msgid "import" +msgstr "importer" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "ces" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "Ce" +msgid "refresh" +msgstr "rafraîchir" + + +msgid "logout" +msgstr "se déconnecter" + + +msgid "Create new entry here" +msgstr "Créer une nouvelle entrée ici" + + +msgid "View schema for" +msgstr "Afficher le schéma pour" + + +msgid "Refresh all expanded containers for" +msgstr "Rafraîchir tous les conteneurs étendus pour" + + +msgid "Create a new entry on" +msgstr "Créer une nouvelle entrée sur" + + +msgid "new" +msgstr "nouveau" + + +msgid "View server-supplied information" +msgstr "Afficher les informations fournies par le serveur" + + +msgid "Import entries from an LDIF file" +msgstr "Importer les entrées d'un fichier LDIF" + + +msgid "Logout of this server" +msgstr "Se déconnecter de ce serveur" + + +msgid "Logged in as: " +msgstr "Connecté en tant que : " + + +msgid "This is not a valid DN." +msgstr "Ce n'est pas un DN valide." + + +msgid "This entry does not exist." +msgstr "Cette entrée n'existe pas." + + +msgid "read only" +msgstr "lecture seule" + + +msgid "This attribute has been flagged as read only by the phpLDAPadmin administrator" +msgstr "Cette attribut a été mis en lecture seule par l'administrateur de phpLDAPadmin" + + +msgid "Could not determine the root of your LDAP tree." +msgstr "Impossible de déterminer la racine de votre arborescence LDAP." + + +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Il semble que votre serveur LDAP a été configuré pour ne pas révéler sa racine." + + +msgid "Please specify it in config.php" +msgstr "Veuillez la spécifier dans config.php" + + +msgid "Create a new entry in" +msgstr "Crée une nouvelle entrée dans" + + +msgid "Login..." +msgstr "Connexion..." + + +msgid "login" +msgstr "connexion" + + +msgid "This base entry does not exist." +msgstr "L'entrée racine n'existe pas." + + +msgid "Create it?" +msgstr "La créer ?" + + +msgid "Delete this entry" +msgstr "Supprimer cette entrée" + + +msgid "You will be prompted to confirm this decision" +msgstr "Il vous sera demander de confirmer cette décision" + + +msgid "Copy or move this entry" +msgstr "Copier ou déplacer cette entrée" + + +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Copier cet objet vers un autre emplacement, un nouveau DN, ou un autre serveur" + + +msgid "Export" +msgstr "Exporter" + + +msgid "export" +msgstr "exporter" + + +msgid "Save a dump of this object" +msgstr "Enregistrer un dump de cet objet" + + +msgid "Save a dump of this object and all of its children" +msgstr "Enregistrer un dump de cet objet et de tous ses sous-objets" + + +msgid "Export subtree" +msgstr "Exporter une sous-arborescence" + + +msgid "Create a child entry" +msgstr "Créer une sous-entrée" + + +msgid "Rename Entry" +msgstr "Renommer l'entrée" + + +msgid "Rename" +msgstr "Renommer" + + +msgid "rename" +msgstr "renommer" + + +msgid "Add" +msgstr "Ajouter" + + +msgid "View" +msgstr "Afficher" + + +msgid "View 1 child" +msgstr "Afficher 1 sous-entrée" + + +msgid "View %s children" +msgstr "Afficher %s sous-entrées" + + +msgid "Add new attribute" +msgstr "Ajouter un nouvel attribut" + + +msgid "Add new ObjectClass" +msgstr "Ajouter un nouvel ObjectClass" + + +msgid "Hide internal attributes" +msgstr "Cacher les attributs internes" + + +msgid "Show internal attributes" +msgstr "Afficher les attributs internes" + + +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "Cliquez pour afficher la définition de schéma pour le type d'attribut « %s »" + + +msgid "none" +msgstr "aucun" + + +msgid "No internal attributes" +msgstr "Aucun attribut interne" + + +msgid "This entry has no attributes" +msgstr "Cette entrée n'a aucun attribut" + + +msgid "Save Changes" +msgstr "Enregistrer les modifications" + + +msgid "add value" +msgstr "ajouter une valeur" + + +msgid "Add an additional value to attribute '%s'" +msgstr "Ajouter une valeur additionnel à l'attribut « %s »" + + +msgid "Refresh" +msgstr "Rafraîchir" + + +msgid "Refresh this entry" +msgstr "Rafraîchir cette entrée" + + +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "Astuce : pour supprimer un attribut, videz le champ texte et enregistrez." + + +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "Astuce : pour afficher le schéma d'un attribut, cliquez sur le nom de l'attribut." + + +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "Quelques attributs (%s) ont été modifiés et sont surlignés ci-dessous." + + +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "Un attribut (%s) a été modifié et est surligné ci-dessous." + + +msgid "Viewing entry in read-only mode." +msgstr "Afficher les entrées en lecture seule." + + +msgid "no new attributes available for this entry" +msgstr "aucun nouvel attribut disponible pour cette entrée" + + +msgid "no new binary attributes available for this entry" +msgstr "aucun nouvel attribut binaire pour cette entrée" + + +msgid "Binary value" +msgstr "Valeur binaire" + + +msgid "Add new binary attribute" +msgstr "Ajouter un nouvel attribut binaire" + + +msgid "Note: '%s' is an alias for '%s'" +msgstr "Note : « %s » est un alias de « %s »" + + +msgid "Required attribute for objectClass(es) %s" +msgstr "Attribut requis pour l(es) objectClass %s" + + +msgid "This attribute is required for the RDN." +msgstr "Cet attribut est requis pour le RDN." + + +msgid "download value" +msgstr "télécharger la valeur" + + +msgid "delete attribute" +msgstr "supprimer l'attribut" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "vers un nouvel objet" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 msgid "true" msgstr "vrai" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" -"uidpool_dn non trouvé..Veuillez vérifier le filtre (arg 3) ou paramétrer " -"corectement uidpool_dn dans le fichier de configuration." -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "" -"update_array est malformé. C'est peut-être une anomalie de phpLDAPadmin. " -"Veuillez la rapporter." +msgid "false" +msgstr "faux" -#: ../../htdocs/add_value_form.php:93 -msgid "value to" -msgstr "dans" -#: ../../htdocs/add_value_form.php:112 -msgid "values for attribute" -msgstr "valeur(s) pour l'attribut" +msgid "none, remove value" +msgstr "aucun, supprimer la valeur" + + +msgid "Really delete attribute" +msgstr "Voulez-vous vraiment supprimer l'attribut" + + +msgid "Add New Value" +msgstr "Ajouter une nouvelle valeur" + + +msgid "The server does not fully support the LDAP protocol." +msgstr "Le serveur ne supporte pas complètement le protocole LDAP." + + +msgid "Your version of PHP does not correctly perform the query." +msgstr "Votre version de PHP n'effectue pas correctement la requête." + + +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "phpLDAPadmin ne sais pas comment récupérer le schéma de votre serveur." + + +msgid "Or lastly, your LDAP server doesnt provide this information." +msgstr "Ou alors, votre serveur LDAP ne fournit pas cette information." + + +msgid "Jump to an objectClass" +msgstr "Sauter vers un objectClass" + + +msgid "View the schema description for this objectClass" +msgstr "Afficher la description de schéma de cet objectClass" + + +msgid "Jump to an attribute type" +msgstr "Sauter vers un type d'attribut" + + +msgid "Jump to a matching rule" +msgstr "Sauter vers une règle correspondante" + + +msgid "Schema for server" +msgstr "Schema pour le serveur" + + +msgid "Required Attributes" +msgstr "Attributs requis" + + +msgid "required" +msgstr "requis" + + +msgid "Optional Attributes" +msgstr "Attributs optionnels" + + +msgid "Optional Binary Attributes" +msgstr "Attributs binaires optionnels" + + +msgid "OID" +msgstr "OID" + + +msgid "Aliases" +msgstr "Alias" + + +msgid "Description" +msgstr "Description" + + +msgid "no description" +msgstr "aucune description" + + +msgid "Name" +msgstr "Nom" + + +msgid "Equality" +msgstr "Égalité" + + +msgid "This objectClass is obsolete." +msgstr "Cet objectClass est obsolète." + + +msgid "Inherits from" +msgstr "Hérite de" + + +msgid "Inherited from" +msgstr "Hérité de" + + +msgid "Parent to" +msgstr "Parent de" + + +msgid "Jump to this objectClass definition" +msgstr "Sauter vers cette définition d'objectClass" + + +msgid "Matching Rule OID" +msgstr "Règle OID correspondante" + + +msgid "Syntax OID" +msgstr "Syntaxe OID" + + +msgid "not applicable" +msgstr "non applicable" + + +msgid "not specified" +msgstr "non spécifié" + + +msgid "character" +msgstr "caractère" + + +msgid "characters" +msgstr "caractères" + + +msgid "Used by objectClasses" +msgstr "Utilisé par ces objectClass" + + +msgid "Used by Attributes" +msgstr "Utilisé par ces attributs" + + +msgid "Maximum Length" +msgstr "Longueur maximum" + + +msgid "Attribute Types" +msgstr "Types d'attributs" + + +msgid "Syntaxes" +msgstr "Syntaxes" + + +msgid "Matching Rules" +msgstr "Règles correspondantes" + + +msgid "Obsolete" +msgstr "Obsolète" + + +msgid "Ordering" +msgstr "Triage" + + +msgid "Substring Rule" +msgstr "Règle de sous-chaîne" + + +msgid "Single Valued" +msgstr "Valeur simple" + + +msgid "Collective" +msgstr "Collectif" + + +msgid "User Modification" +msgstr "Modification utilisateur" + + +msgid "Usage" +msgstr "Usage" + + +msgid "Could not retrieve schema from" +msgstr "Impossible de récupérer le schéma de" + + +msgid "Type" +msgstr "Type" + + +msgid "No such schema item: \"%s\"" +msgstr "Aucun élément de schéma : « %s »" + + +msgid "A random password was generated for you" +msgstr "Un mot de passe aléatoire a été généré pour vous" + + +msgid "Entry %s deleted successfully." +msgstr "L'entrée %s a été supprimé avec succès." + + +msgid "You must specify a DN" +msgstr "Vous devez spécifier un DN" + + +msgid "Could not delete the entry: %s" +msgstr "Impossible de supprimer l'entrée : %s" + + +msgid "No such entry: %s" +msgstr "Aucune entrée: %s" + + +msgid "Delete %s" +msgstr "Supprimer %s" + + +msgid "Permanently delete all children also?" +msgstr "Supprimer aussi toutes les sous-entrées ?" + + +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "Cette entrée est la racine d'une sous-arborescence contenant %s entrées." + -#: ../../htdocs/delete_form.php:48 msgid "view entries" msgstr "afficher les entrées" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "Afficher le schéma pour" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "Afficher les informations fournies par le serveur" +msgid "phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?" +msgstr "phpLDAPadmin peut supprimer récursivement cette entrée et toutes %s de ses sous-entrées. Voir ci-dessous pour une liste de toutes les entrées que cette action supprimera. Voulez-vous le faire ?" + + +msgid "Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems." +msgstr "Note : ceci est potentiellement très dangereux et vous le faites à vos risques et périls. Cette opération ne peut être annulée. Prenez bien note que les alias, les référents, et d'autres choses pourront vous causer des problèmes." + + +msgid "Delete all %s objects" +msgstr "Supprimer tous les %s objets" + + +msgid "Recursive delete progress" +msgstr "Progression de la suppression récursive" + + +msgid "Entry %s and sub-tree deleted successfully." +msgstr "L'entrée %s et la sous-arborescence ont été supprimé avec succès." + + +msgid "Failed to delete entry %s" +msgstr "La suppression de l'entrée %s a échoué" + + +msgid "List of entries to be deleted:" +msgstr "Liste des entrées à supprimer :" + + +msgid "Are you sure you want to permanently delete this object?" +msgstr "Êtes-vous sûr de vouloir supprimer définitivement cet objet ?" + + +msgid "DN" +msgstr "DN" + + +msgid "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin configuration." +msgstr "L'attribut « %s » est marqué en lecture seule dans la configuration de phpLDAPadmin." + + +msgid "No attribute name specified." +msgstr "Aucun nom d'attribut défini." + + +msgid "No DN specified" +msgstr "Aucun DN spécifié" + + +msgid "You left the attribute value blank. Please go back and try again." +msgstr "Vous avez laissé la valeur de l'attribut blanc. Veuillez revenir et essayer de nouveau." + + +msgid "Failed to add the attribute." +msgstr "L'ajout de l'attribut a échoué." + + +msgid "The file you chose is either empty or does not exist. Please go back and try again." +msgstr "Le fichier que vous avez choisi est soit vide, soit il n'existe pas. Veuillez revenir et essayer de nouveau." + + +msgid "Security error: The file being uploaded may be malicious." +msgstr "Erreur de sécurité : le fichier téléchargé est peut être corrompu." + + +msgid "Your PHP configuration has disabled file uploads. Please check php.ini before proceeding." +msgstr "Votre configuration de PHP a désactivé le téléchargement de fichiers. Veuillez vérifier php.ini avant de procéder." + + +msgid "The file you uploaded is too large. Please check php.ini, upload_max_size setting" +msgstr "Le fichier que vous avez téléchargé est trop grand. Veuillez vérifier dans php.ini le réglage upload_max_size" + + +msgid "The file you selected was only partially uploaded, likley due to a network error." +msgstr "Le fichier que vous avez sélectionné est partiellement téléchargé, surement du à une erreur réseau." + + +msgid "Maximum file size: %s" +msgstr "Taille de fichier maximum : %s" + + +msgid "Modification successful!" +msgstr "Modification avec succès !" + + +msgid "Since you changed your password, you must now login again with your new password." +msgstr "Puisque vous avez changé de mot de passe, vous devez vous reconnecter avec votre nouveau mot de passe." + + +msgid "New Required Attributes" +msgstr "Nouveaux attributs requis" + + +msgid "This action requires you to add" +msgstr "Cette action nécessite que vous ajoutiez" + + +msgid "new attributes" +msgstr "nouveaux attributs" + + +msgid "Instructions: In order to add these objectClass(es) to this entry, you must specify" +msgstr "Instructions : afin d'ajouter ces objectClass à cette entrée, vous devez spécifier" + + +msgid "that this objectClass requires. You can do so in this form." +msgstr "ce que cet objectClass nécessite. Vous pouvez le faire dans ce formulaire." + + +msgid "Add ObjectClass and Attributes" +msgstr "Ajouter des objectClass et des attributs" + + +msgid "ObjectClasses" +msgstr "ObjectClass" + + +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "Cliquez afin de faire apparaitre une boîte de dialogue permettant de choisir une entrée graphiquement" + + +msgid "You cannot perform updates while server is in read-only mode" +msgstr "Vous ne pouvez effectuer de mises à jour tant que le serveur est en lecture seule" + + +msgid "Bad server id" +msgstr "Mauvais id de serveur" + + +msgid "Not enough information to login to server. Please check your configuration." +msgstr "Il n'y a pas assez d'informations pour se connecter au serveur. Veuillez vérifier votre configuration." + + +msgid "Could not connect to LDAP server." +msgstr "Impossible de se connecter au serveur LDAP." + + +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "Impossible de se connecter à « %s » sur le port « %s »" + + +msgid "Could not perform ldap_mod_add operation." +msgstr "Impossible d'effectuer ldap_mod_add operation." + + +msgid "Home" +msgstr "Accueil" + + +msgid "Help" +msgstr "Aide" + + +msgid "Success" +msgstr "Succès" + + +msgid "Server: " +msgstr "Serveur : " + + +msgid "Looking in: " +msgstr "Rechercher dans : " + + +msgid "No DN specified in query string!" +msgstr "Aucun DN spécifié dans la chaine de requete !" + + +msgid "Back Up..." +msgstr "Sauvegarde..." + + +msgid "no entries" +msgstr "aucune entrées" + + +msgid "Could not determine base DN" +msgstr "Impossible de déterminer le DN racine" + + +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "Ceci peut arriver pour différentes raisons, le plus probable est sans doute :" + + +msgid "Yes" +msgstr "oui" + + +msgid "No" +msgstr "Non" + + +msgid "Go" +msgstr "Aller à" + + +msgid "Delete" +msgstr "Supprimer" + + +msgid "Back" +msgstr "Revenir" + + +msgid "object" +msgstr "objet" + + +msgid "Delete all" +msgstr "Tout supprimer" + + +msgid "hint" +msgstr "astuce" + + +msgid "bug" +msgstr "anomalie" + + +msgid "warning" +msgstr "avertissement" + + +msgid "light" +msgstr "lumière" + + +msgid "Proceed >>" +msgstr "Procéder >>" + + +msgid "Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config.php" +msgstr "Veuillez définir $jpeg_temp_dir à un répertoire accessible en écriture dans le config.php de phpLDAPadmin" + + +msgid "Could not write to the $jpeg_temp_dir directory %s. Please verify that your web server can write files there." +msgstr "Impossible d'écrire dans le répertoire $jpeg_temp_dir %s. Veuillez vérifier que votre serveur Web peut écrire des fichiers dedans." + + +msgid "Could not fetch jpeg data from LDAP server for attribute %s." +msgstr "Impossible de récupérer les données JPEG depuis votre serveur LDAP pour l'attribut %s." + + +msgid "Delete photo" +msgstr "Supprimer la photo" + + +msgid "value to" +msgstr "dans" + + +msgid "Distinguished Name" +msgstr "Nom distingué" + + +msgid "Current list of" +msgstr "Liste actuelle de" + + +msgid "values for attribute" +msgstr "valeur(s) pour l'attribut" + + +msgid "Note: You will get an \"inappropriate matching\" error if you have not setup an EQUALITY rule on your LDAP server for this attribute." +msgstr "Note : vous obtiendrez une erreur « correspondance innapropriée » si vous n'avez pas défini de règle d'égalité sur votre serveur LDAP pour cette attribut." + + +msgid "Enter the value you would like to add:" +msgstr "Saisissez la valeur que vous voulez ajouter :" + + +msgid "Note: You may be required to enter new attributes that these objectClass(es) require" +msgstr "Note : il peut vous être demandé de saisir les nouveaux attributs requis par ces objectClass" + + +msgid "Syntax" +msgstr "Syntaxe" + + +msgid "You left the destination DN blank." +msgstr "Vopus avez laissé le DN de destination vide." + + +msgid "The destination entry (%s) already exists." +msgstr "L'entrée de destination (%s)existe déjà." + + +msgid "The destination container (%s) does not exist." +msgstr "Le conteneur de destination (%s) n'existe pas." + + +msgid "The source and destination DN are the same." +msgstr "Les DN source et destination sont les mêmes." + + +msgid "Copying " +msgstr "Copie " + + +msgid "Recursive copy progress" +msgstr "progression de la copie récursive" + + +msgid "Building snapshot of tree to copy... " +msgstr "Construction d'un instantané de l'arborescence à copier... " + + +msgid "Copy successful! Would you like to " +msgstr "Copie avec succès ! Voulez-vous " + + +msgid "view the new entry" +msgstr "afficher la nouvelle entrée" + + +msgid "Failed to copy DN: " +msgstr "La copie du DN a échoué : " + + +msgid "Template" +msgstr "Modèle" + + +msgid "using template" +msgstr "en utilisant le modèle" + + +msgid "Go to %s" +msgstr "Aller vers %s" + + +msgid "This is a structural ObjectClass and cannot be removed." +msgstr "C'est un ObjectClass structurel et il ne peut être supprimé." + + +msgid "structural" +msgstr "structurel" + + +msgid "to a new object" +msgstr "vers un nouvel objet" + + +msgid "Destination DN" +msgstr "DN de destination" + + +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "Le DN complet de la nouvelle entrée a créer lors de la copie de l'entrée source" + + +msgid "Destination Server" +msgstr "Serveur de destination" + + +msgid "Hint: Copying between different servers only works if there are no schema violations" +msgstr "Astuce : la copie entre différents serveurs ne fonctionne que si il n'y a aucune violations de schéma" + + +msgid "Recursively copy all children of this object as well." +msgstr "Copie récursive de toutes les sous-entrées de cet objet." + + +msgid "Recursive copy" +msgstr "Copie récursive" + + +msgid "Filter" +msgstr "Filtre" + + +msgid "When performing a recursive copy, only copy those entries which match this filter" +msgstr "Lors de la copie récursive, ne copier que les entrées qui correspondent à ce filtre" + + +msgid "Delete after copy (move):" +msgstr "Supprimer après la copie (déplacement) :" + + +msgid "Make sure your filter (above) will select all child records." +msgstr "Veuillez vous assurer que vos filtres (ci-dessus) sélectionneront tous les enregistrements fils." + + +msgid "You left the value blank for required attribute (%s)." +msgstr "Vous avez laissez une valeur blanche pour l'attribut requis (%s)." + + +msgid "Redirecting..." +msgstr "Redirection..." + + +msgid "here" +msgstr "ici" + + +msgid "Could not add the object to the LDAP server." +msgstr "Impossible d'ajouter l'objet au serveur LDAP." + + +msgid "Create Object" +msgstr "Créer un objet" + + +msgid "Choose a template" +msgstr "Choisissez un modèle" + + +msgid "Select a template for the creation process" +msgstr "Sélectionner un modèle pour le processus de création" + + +msgid "Save as file" +msgstr "Enregistrer dans un fichier" + + +msgid "You left the RDN field blank." +msgstr "Vous avez laissé le champ RDN vide." + + +msgid "The container you specified (%s) does not exist. Please try again." +msgstr "Le conteneur que vous avez spécifié (%s) n'existe pas. Veuillez essayer de nouveau." + + +msgid "You did not select any ObjectClasses for this object. Please go back and do so." +msgstr "Vous n'avez pas sélectionné d'objectClass pour cet objet. Veuillez revenir et le faire." + + +msgid "Hint: You must choose exactly one structural objectClass (shown in bold above)" +msgstr "Astuce : vous devez choisir un seul objectClass structurel (affiché en gras ci-dessus)" + + +msgid "This template is not allowed in this container." +msgstr "Ce modèle n'est pas autorisé dans ce conteneur." + + +msgid "This template has been disabled, possibly due to missing schema or missing template XML fields." +msgstr "Ce modèle a été désactivé, cela est sûrement du à un schéma manquant ou à des champs manquants dans le modèle XML." + + +msgid "Your config specifies a handler of \"%s\" for this template but this file is not readable because the permissions are too strict." +msgstr "Votre configuration spécifie un gestionnaire de « %s » pour ce modèle mais le fichier n'est pas lisible car les permissions sont trop strictes.." + + +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "Étape 1 of 2 : nom et ObjectClass" + + +msgid "Step 2 of 2: Specify attributes and values" +msgstr "Étape 2 of 2 : spécifie les attributs et valeur" + + +msgid "Relative Distinguished Name" +msgstr "Nom distingué relatif" + + +msgid "RDN" +msgstr "RDN" + + +msgid "(example: cn=MyNewPerson)" +msgstr "(exemple : cn=MaNouvellePersonne)" + + +msgid "Container" +msgstr "Conteneur" + + +msgid "You have not logged into the selected server yet, so you cannot perform searches on it." +msgstr "Vous n'êtes pas encore connecté au serveur sélectionné, vous ne pouvez pas effectuer de recherche dessus." + + +msgid "Click here to go to the login form" +msgstr "Cliquez ici pour aller au formulaire de connexion" + + +msgid "Unrecognized criteria option: " +msgstr "Option de critère non reconnue : " + + +msgid "If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting." +msgstr "Si vous voulez ajouter vos propres critères dans la liste. Veuillez vous assurer d'éditer search.php pour les gérer. Quitte." + + +msgid "Entries found: " +msgstr "Entrées trouvées : " + + +msgid "Filter performed: " +msgstr "Filtrage effectué : " + + +msgid "Search performed by phpLDAPadmin in" +msgstr "Recherche effectuée par phpLDAPadmin dans" + + +msgid "seconds" +msgstr "secondes" + + +msgid "The scope in which to search" +msgstr "La portée dans laquelle effectuer la recherche" + + +msgid "Sub (entire subtree)" +msgstr "Sub (sous-arborescence entière)" + + +msgid "One (one level beneath base)" +msgstr "One (un niveau au-dessous de la base)" + + +msgid "Base (base dn only)" +msgstr "Base (dn de base seulement)" + + +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "Filtre de recherche LDAAP standard. Exemple : (&(sn=Smith)(givenname=David))" + + +msgid "Search Filter" +msgstr "Filtre de recherche" + + +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "Une liste d'attributs à afficher dans le résultat (séparé par des virgules)" + + +msgid "equals" +msgstr "est égal à" + + +msgid "starts with" +msgstr "commence par" + + +msgid "contains" +msgstr "contient" + + +msgid "ends with" +msgstr "se termine par" + + +msgid "sounds like" +msgstr "ressemble à" + + +msgid "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE." +msgstr "Impossible de récupérer les informations LDAP depuis le serveur. Ceci est sans doute du à une anomalie dans votre version de PHP ou peut-être que votre serveur LDAP a un contrôle d'accès défini qui empèche les clients LDAP d'accéder au RootDSE." + + +msgid "Server info for: " +msgstr "Info serveur pour : " + + +msgid "Server reports the following information about itself" +msgstr "Le serveur rapporte les informations suivantes à propos de lui-même" + + +msgid "This server has nothing to report." +msgstr "Ce serveur n'a rien à rapporter." + + +msgid "update_array is malformed. This might be a phpLDAPadmin bug. Please report it." +msgstr "update_array est malformé. C'est peut-être une anomalie de phpLDAPadmin. Veuillez la rapporter." + + +msgid "Could not perform ldap_modify operation." +msgstr "Impossible d'effectuer une opération ldap_modify." + + +msgid "Do you want to make these changes?" +msgstr "Voulez-vous effectuer ces modifications ?" + + +msgid "Attribute" +msgstr "Attribut" + + +msgid "Old Value" +msgstr "Ancienne valeur" + + +msgid "New Value" +msgstr "Nouvelle valeur" + + +msgid "[attribute deleted]" +msgstr "[attribut supprimé]" + + +msgid "Commit" +msgstr "Valider" + + +msgid "Cancel" +msgstr "Annuler" + + +msgid "You made no changes" +msgstr "Vous n'avez fait aucune modification" + + +msgid "Use the menu to the left to navigate" +msgstr "Utiliser le menu de gauche pour naviguer" + + +msgid "Credits" +msgstr "Crédits" + + +msgid "ChangeLog" +msgstr "ChangeLog" + + +msgid "Documentation" +msgstr "Documentation" + + +msgid "Donate" +msgstr "Donation" + + +msgid "phpLDAPadmin logo" +msgstr "Logo phpLDAPadmim" + + +msgid "Purge caches" +msgstr "Purger les caches" + + +msgid "No cache to purge." +msgstr "Aucun cache à purger." + + +msgid "Purged %s bytes of cache." +msgstr "%s octets de cache purgés." + + +msgid "Purge all cached data in phpLDAPadmin, including server schemas." +msgstr "Purge toutes les données cachées dans phpLDAPadmin, incluant les schémas de serveur." + + +msgid "Unsafe file name: " +msgstr "Nom de fichier non sûr : " + + +msgid "No such file: " +msgstr "Pas de tel fichier : " + + +msgid "You have enabled auto_uid_numbers for %s in your configuration," +" but you have not specified the auto_uid_number_mechanism. Please correct" +" this problem." +msgstr "Vous avez activé auto_uid_numbers pour %s dans votre configuration," +" mais vous n'avez pas spécifié de mécanisme auto_uid_number_mechanism. Veuillez corriger" +" ce problème." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"uidpool\"" +" in your configuration for server %s, but you did not specify the" +" audo_uid_number_uid_pool_dn. Please specify it before proceeding." +msgstr "Vous avez défini « auto_uid_number_mechanism » comme « uidpool »" +" dans votre configuration pour le serveur %s, mais vous n'avez pas spécifié le" +" auto_uid_number_uid_pool_dn. Veuillez le spécifier avant de procéder." + + +msgid "It appears that the uidPool you specified in your configuration (\"%s\")" +" does not exist." +msgstr "Il semble que le uidPool que vous avez spécifié dans votre configuration (« %s »)" +" n'existe pas." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"search\" in your" +" configuration for server %s, but you did not specify the" +" \"auto_uid_number_search_base\". Please specify it before proceeding." +msgstr "Vous avez spécifié le « auto_uid_number_mechanism » comme « search » dans votre" +" configuration du serveur %s, mais vous n'avez pas spécifié le" +" « auto_uid_number_search_base ». Veuillez le spécifier avant de procéder." + + +msgid "Unable to bind to %s with your with auto_uid credentials. Please check your configuration file." +msgstr "Incapable de se connecter à %s avec votre crédentiel auto_uid . Veuillez vérifier votre fichier de configuration." + + +msgid "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s" +msgstr "Votre configuration de phpLDAPadmin spécifie un auto_uid_search_base non valide pour le serveur %s" + + +msgid "You specified an invalid value for auto_uid_number_mechanism (\"%s\")" +" in your configration. Only \"uidpool\" and \"search\" are valid." +" Please correct this problem." +msgstr "Vous avez spécifié une valeur non valide pour pour auto_uid_number_mechanism (\"%s\")" +" dans votre configuration. Seul « uidpool » et « search » sont valides." +" Veuillez corriger ce problème." + + +msgid "Error: You have an error in your config file. The only three allowed values" +" for auth_type in the $servers section are 'session', 'cookie', and 'config'. You entered '%s'," +" which is not allowed. " +msgstr "Erreur : Vous avez une erreur dans votre fichier de configuration. Les seuls trois valeurs autorisées" +" pour auth_type dans la section $servers sont « session », « cookie », et « config ». Vous avez saisi « %s »," +" qui n'est pas autorisée. " + + +msgid "Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file." +msgstr "Impossible de se connecter à %s avec votre crédentiel unique_attrs. Veuillez vérifier votre fichier de configuration." + + +msgid "Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry." +msgstr "Votre tentative d'ajouter %s (%s) à
%s
n'est pas autorisée. Cet attribut/valeur appartient à une autre entrée.

Vous souhaitez rechercher cette entrée." + + +msgid "Your PHP install does not support TLS." +msgstr "Votre installation de PHP ne supporte pas TLS." + + +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "Impossible de démarrer TLS. Veuillez vérifier la configuration de votre serveur LDAP." + + +msgid "Could not bind anonymously to server." +msgstr "Impossible de se connecter anonymement au serveur." + + +msgid "Anonymous Bind" +msgstr "Connexion anonyme" + + +msgid "Bad username or password. Please try again." +msgstr "Mauvais nom d'utilisateur ou mot de passe. Veuillez réessayer." + + +msgid "Successfully logged into server %s" +msgstr "Connexion au serveur %s avec succès" + + +msgid "Could not set cookie." +msgstr "Impossible de définir le cookie." + + +msgid "LDAP said: %s" +msgstr "LDAP dit : %s" + + +msgid "Error" +msgstr "Erreur" + + +msgid "browse" +msgstr "parcourir" + + +msgid "Your system crypt library does not support extended DES encryption." +msgstr "Votre bibliothèque système crypt ne supporte pas le chiffrement DES étendu." + + +msgid "Your system crypt library does not support blowfish encryption." +msgstr "Votre bibliothèque système crypt ne supporte pas le chiffrement blowfish." + + +msgid "Your system crypt library does not support md5crypt encryption." +msgstr "Votre bibliothèque système crypt ne supporte pas le chiffrement md5crypt." + + +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "Votre installation PHP n'a pas de fonction mhash(). Impossible de faire de signature SHA." + + +msgid "jpegPhoto contains errors
" +msgstr "jpegPhoto contient des erreurs
" + + +msgid "Error number: %s (%s)" +msgstr "Erreur numéro : %s (%s)" + + +msgid "Description: %s

" +msgstr "Description : %s

" + + +msgid "Error number: %s

" +msgstr "Erreur numéro : %s

" + + +msgid "Description: (no description available)
" +msgstr "Description : (aucune description disponible)
" + + +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "Est-ce une anomalie phpLDAPadmin ? Si c'est le cas, veuillez la rapporter." + + +msgid "Unrecognized error number: " +msgstr "Numéro d'erreur non reconnu: " + + +msgid "

" +" " +" " +" " +"
" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
Please check and see if this bug has been reported here.
If it hasnt been reported, you may report this bug by clicking here.

" +msgstr "
" +" " +" " +" " +"
" +" Vous avez trouvé une anomalie phpLDAPadmin non fatale !
Erreur :%s (%s)
Fichier :%s ligne %s, appelant %s
Versions :PLA : %s, PHP : %s, SAPI : %s" +"
Serveur Web :%s
Veuillez vérifier et voir si cette anomalie a déjà été rapportée ici.
Si elle n'a pas été rapportée, vous pouver rapporter cette anomalie en cliquant ici.

" + + +msgid "Congratulations! You found a bug in phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Please report this bug by clicking below!" +msgstr "Félicitations ! Vous avez trouvé une anomalie dans phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Erreur :%s
Niveau :%s
Fichier :%s
Ligne :%s
Appelant :%s
Version PLA :%s
Version PHP :%s
SAPI PHP :%s
Serveur Web :%s
" +"
" +" Veuillez rapporter cette anomalie en cliquant ci-dessous !" + + +msgid "Import LDIF File" +msgstr "Importer un fichier LDIF" + + +msgid "Select an LDIF file:" +msgstr "Sélectionner un fichier LDIF :" + + +msgid "Don't stop on errors" +msgstr "Ne pas vous arrêter sur les erreurs" + + +msgid "Adding..." +msgstr "Ajout..." + + +msgid "Deleting..." +msgstr "Suppression..." + + +msgid "Renaming..." +msgstr "Renommage..." + + +msgid "Modifying..." +msgstr "Modification..." + + +msgid "No version found. Assuming 1." +msgstr "Aucune version trouvé. Assume 1." + + +msgid "A valid dn line is required." +msgstr "Une ligne dn valide est requise." + + +msgid "Missing uploaded file." +msgstr "Fichier téléchargé manquant." + + +msgid "No LDIF file specified. Please try again." +msgstr "Aucun fichier LDIF spécifié. Veuillez essayer de nouveau." + + +msgid "Uploaded LDIF file is empty." +msgstr "Le fichier LDIF téléchargé est manquant." + + +msgid "empty" +msgstr "vide" + + +msgid "File" +msgstr "Fichier" + + +msgid "%s bytes" +msgstr "%s octets" + + +msgid "Failed" +msgstr "Échoue" + + +msgid "LDIF Parse Error" +msgstr "Erreur d'analyse LDIF" + + +msgid "Could not add object:" +msgstr "Impossible d'ajouter un objet :" + + +msgid "Could not rename object:" +msgstr "Impossible de renommer l'objet :" + + +msgid "Could not delete object:" +msgstr "Impossible de supprimer l'objet :" + + +msgid "Could not modify object:" +msgstr "Impossible de modifier l'objet :" + + +msgid "Line Number:" +msgstr "Numéro de ligne :" + + +msgid "Line:" +msgstr "Ligne :" + + +msgid "Export format" +msgstr "Format d'exportation" + + +msgid "Line ends" +msgstr "Les lignes se finissent par" + + +msgid "You must choose an export format." +msgstr "Vous devez choisir un format d'exportation." + + +msgid "Invalid export format" +msgstr "Format d'exportation non valide" + + +msgid "No available exporter found." +msgstr "Aucun filtre d'exportation trouvé." + + +msgid "Encountered an error while performing search." +msgstr "Une erreur est survenue lors de la recherche." + + +msgid "Showing results %s through %s." +msgstr "Affichage des résultats %s à %s." + + +msgid "Searching..." +msgstr "Recherche en cours..." + + +msgid "Notice, search size limit exceeded." +msgstr "Attention, la taille limite de recherche est dépassée." + + +msgid "Entry" +msgstr "Entrée" + + +msgid "LDIF Export for: %s" +msgstr "Exportation LDIF pour : %s" + + +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "Généré par phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) pour %s" + + +msgid "Total Entries" +msgstr "Entrées totales" + + +msgid "DSLM Export for: %s" +msgstr "Exportation DSLM pour : %s" + + +msgid "Include system attributes" +msgstr "Inclure les attributs système" + + +msgid "CSV (Spreadsheet)" +msgstr "CSV (feuille de calcul)" + + +msgid "You left the password blank." +msgstr "Vous avez laissé le mot de passe vide." + + +msgid "No one is logged in to that server." +msgstr "Personne n'est connecté sur ce serveur." + + +msgid "Could not logout." +msgstr "Impossible de se déconnecter." + + +msgid "Unknown auth_type: %s" +msgstr "auth_type inconnu : %s" + + +msgid "Logged out successfully from server %s" +msgstr "Déconnexion du serveur avec succès %s" + + +msgid "Authenticate to server %s" +msgstr "Authentification auprès du serveur %s" + + +msgid "Warning: This web connection is unencrypted." +msgstr "Avertissement : la connexion Web n'est pas chiffré." + + +msgid "You are not using 'https'. Web browser will transmit login information in clear text." +msgstr "Vous n'utilisez pas « https ». Le navigateur Web transmettra les informations de connexion en clair." + + +msgid "Login DN" +msgstr "DN de connexion" + + +msgid "User name" +msgstr "Nom d'utilisateur" + + +msgid "Password" +msgstr "Mot de passe" + + +msgid "Authenticate" +msgstr "Authentification" + + +msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." +msgstr "Désolé, vous n'êtes pas autorisé à utiliser phpLDAPadmin avec ce serveur LDAP." + + +msgid "Entry Chooser" +msgstr "Sélecteur d'entrées" + + +msgid "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do so. An example config file is provided in 'config/config.php.example'" +msgstr "Vous avez besoin de configurer phpLDAPadmin. Éditez le fichier « config.php » pour le faire. un exemple de fichier de configuration est fournit dans « config.php.example »" + + +msgid "Deletes not allowed in read only mode." +msgstr "Supprimer n'est pas autorisé en lecture seule." + + +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "Erreur lors de l'applel de mass_delete.php. Il manque mass_delete dans les variables POST." + + +msgid "mass_delete POST var is not an array." +msgstr "La variable POST mass_delete n'est pas un tableau." + + +msgid "Mass deletion is not enabled. Please enable it in config.php before proceeding." +msgstr "La suppression de masse n'est pas activé. Veuillez l'activer dans config.php avant de procéder." + + +msgid "Mass Deleting" +msgstr "Suppression de masse" + + +msgid "Deletion progress on server \"%s\"" +msgstr "Progression de la suppression sur le serveur « %s »" + + +msgid "Malformed mass_delete array." +msgstr "Tableau mass_delete malformé." + + +msgid "You did not select any entries to delete." +msgstr "Vous n'avez sélectionné aucune entrées à supprimer." + + +msgid "Deleting %s" +msgstr "Suppression de %s" + + +msgid "%s of %s entries failed to be deleted." +msgstr "%s sur %s entrées n'ont pu être effacées." + + +msgid "All entries deleted successfully." +msgstr "Toutes les entrées ont été supprimées avec succès." + + +msgid "Confirm mass delete of %s entries on server %s" +msgstr "Confirmer la suppression de masse de %s entrées sur le serveur %s" + + +msgid "Yes, delete!" +msgstr "Oui, supprimer !" + + +msgid "You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)" +msgstr "Vous ne pouvez renommer une entrée qui a des sous-entrées (cad, l'opération de renommage n'est pas autorisé sur des entrées non terminales)" + + +msgid "You did not change the RDN" +msgstr "Vous n'avez pas modifié le RDN" + + +msgid "Invalid RDN value" +msgstr "Valeur RDN non valide" + + +msgid "Could not rename the entry" +msgstr "Impossible de renommer l'entrée" + + +msgid "Passwords match!" +msgstr "Correspondance du mot de passe !" + + +msgid "Passwords do not match!" +msgstr "Les mots de passe ne correspondent pas !" + + +msgid "Password Checker Tool" +msgstr "Outil de vérification de mot de passe" + + +msgid "To" +msgstr "Vers" + + +msgid "Using the" +msgstr "En utilisant le" + + +msgid "You may switch to the " +msgstr "Vous pouvez basculer vers " + + +msgid "default template" +msgstr "modèle par défaut" + + +msgid "User Account (posixAccount)" +msgstr "Compte utilisateur (posixAccount)" + + +msgid "Address Book Entry (inetOrgPerson)" +msgstr "Entrée de carnet d'adresses (inetOrgPerson)" + + +msgid "Address Book Entry (mozillaOrgPerson)" +msgstr "Entrée de carnet d'adresses (mozillaOrgPerson)" + + +msgid "Kolab User Entry" +msgstr "Entrée d'utilisateur Kolab" + + +msgid "Organisational Unit" +msgstr "Unité organisationnelle" + + +msgid "New Organisational Unit" +msgstr "Nouvelle unité organisationnelle" + + +msgid "Organisational Role" +msgstr "Rôle organisationnel" + + +msgid "Posix Group" +msgstr "Groupe Posix" + + +msgid "Samba NT Machine" +msgstr "Machine NT Samba" + + +msgid "Samba 3 NT Machine" +msgstr "Machine NT Samba 3" + + +msgid "Samba User" +msgstr "Utilisateur Samba" + + +msgid "Samba 3 User" +msgstr "Utilisateur Samba 3" + + +msgid "Samba 3 Group Mapping" +msgstr "Groupe de mappage Samba 3" + + +msgid "DNS Entry" +msgstr "Entrée DNS" + + +msgid "Simple Security Object" +msgstr "Object de sécurité simple" + + +msgid "Courier Mail Account" +msgstr "Compte de messagerie" + + +msgid "Courier Mail Alias" +msgstr "Alias de compte de messagerie" + + +msgid "LDAP Alias" +msgstr "Alias LDAP" + + +msgid "Sendmail Cluster" +msgstr "Cluster Sendmail" + + +msgid "Sendmail Domain" +msgstr "Domaine Sendmail" + + +msgid "Sendmail Alias" +msgstr "Alias Sendmail" + + +msgid "Sendmail Virtual Domain" +msgstr "Domaine virtuel Sendmail" + + +msgid "Sendmail Virtual Users" +msgstr "Utilisateurs virtuels Sendmail" + + +msgid "Sendmail Relays" +msgstr "Relais Sendmail" + + +msgid "Custom" +msgstr "personnalisé" + + +msgid "My Samba domain Name" +msgstr "Mon nom de domaine Samba" + + +msgid "Administrators" +msgstr "Administrateurs" + + +msgid "Users" +msgstr "Utilisateurs" + + +msgid "Guests" +msgstr "Invités" + + +msgid "Power Users" +msgstr "Utilisateurs avec pouvoir" + + +msgid "Account Operators" +msgstr "Opérateurs de comptes" + + +msgid "Server Operators" +msgstr "Opérateurs de serveurs" + + +msgid "Print Operators" +msgstr "Opérateurs d'impression" + + +msgid "Backup Operators" +msgstr "Opérateurs de sauvegarde" + + +msgid "Replicator" +msgstr "Duplicateurs" + + +msgid " Unable to create the Samba passwords. Please, check the configuration in template_config.php" +msgstr " Impossible de créer les mots de passe Samba. Veuillez vérifier la configuration dans template_config.php" + + +msgid "Error: You have an error in your samba confguration." +msgstr "Erreur : vous avez une erreur dans votre confguration Samba." + + +msgid "Error: A name and a sid for your samba domain need to be provided." +msgstr "Erreur : un nom et un sid doivent être fournit pour votre domaine Samba." + + +msgid "Error: No name provided for samba domain." +msgstr "Erreur : aucun nom fournit pour le domaine Samba." + + +msgid "Error: No sid provided for samba domain." +msgstr "Erreur : aucun sid fournit pour le domaine Samba." + + +msgid "Samba Account" +msgstr "Compte Samba" + + +msgid "samba account" +msgstr "compte samba" + + +msgid "New User Account" +msgstr "Nouveau compte utilisateur" + + +msgid "Hint: To customize this template, edit the file templates/creation/new_user_template.php" +msgstr "astuce : pour personnaliser ce modèle, éditez le fichier templates/creation/new_user_template.php" + + +msgid "First name" +msgstr "Prénom" + + +msgid "Last name" +msgstr "Nom de famille" + + +msgid "first" +msgstr "premier" + + +msgid "last" +msgstr "dernier" + + +msgid "State" +msgstr "État" + + +msgid "Common name" +msgstr "Nom commun" + + +msgid "Encryption" +msgstr "Chiffrement" + + +msgid "Login Shell" +msgstr "Shell de connexion" + + +msgid "Home Directory" +msgstr "Dossier personnel" + + +msgid "UID Number" +msgstr "UID" + + +msgid "(automatically determined)" +msgstr "(déterminé automatiquement)" + + +msgid "Group" +msgstr "Groupe" + + +msgid "GID Number" +msgstr "GID" + + +msgid "User ID" +msgstr "ID utilisateur" + + +msgid "Your passwords don't match. Please go back and try again." +msgstr "Vos mots de passe ne correspondent pas. Veuillez revenir et réessayer." + + +msgid "You cannot leave the %s blank. Please go back and try again." +msgstr "Vous ne pouvez laisser %s vide. Veuillez revenir et réessayer." + + +msgid "You can only enter numeric values for the %s field. Please go back and try again." +msgstr "Vous ne pouvez entrez que des valeurs numériques pour le champ %s. Veuillez revenir et réessayer." + + +msgid "The container you specified (%s) does not exist. Please go back and try again." +msgstr "Le conteneur que vous avez spécifié (%s) n'existe pas. Veuillez revenir et réessayer." + + +msgid "Confirm account creation" +msgstr "Confirmer la création du compte" + + +msgid "[secret]" +msgstr "[secret]" + + +msgid "Create Account" +msgstr "Créer un compte" + + +msgid "Verify" +msgstr "Vérifier" + + +msgid "New Posix Group" +msgstr "Nouveau groupe Posix" + + +msgid "New Address Book Entry" +msgstr "Nouvelle entrée de carnet d'adresses" + + +msgid "Organisation" +msgstr "Organisation" + + +msgid "Address" +msgstr "Adresse" + + +msgid "City" +msgstr "Ville" + + +msgid "Postal code" +msgstr "Code postal" + + +msgid "Street" +msgstr "Rue" + + +msgid "Work phone" +msgstr "Téléphone (bureau)" + + +msgid "Fax" +msgstr "Fax" + + +msgid "Mobile" +msgstr "Mobile" + + +msgid "Email" +msgstr "Courriel" + + +msgid "You cannot leave the Common Name blank. Please go back and try again." +msgstr "Vousne pouvez pas laissez le Nom commun vide. Veuiller revenir er réessayer." + + +msgid "Confirm entry creation:" +msgstr "Confirmer la création de l'entrée :" + + +msgid "Create Address" +msgstr "Créer l'adresse" + + +msgid "Check password..." +msgstr "Vérifier l'adresse..." + + +msgid "(Auto evaluated on submission.)" +msgstr "(Évaluation automatique lors de la soumission.)" + + +msgid "Compare" +msgstr "Comparer" + + +msgid "Comparing the following DNs" +msgstr "Compararaison des DNs suivants" + + +msgid "Compare another DN with" +msgstr "Comparer un autre DN avec" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "Voulez-vous vraiment supprimer l'attribut" -#: ../../htdocs/compare_form.php:29 msgid "with " msgstr "avec " -#~ msgid "PHP session configuration incorrect" -#~ msgstr "Configuration incorrecte de la session PHP" + +msgid "Source DN" +msgstr "DN source" + + +msgid "Compare this DN with another" +msgstr "Comparer cn DN avec un autre" + + +msgid "Switch Entry" +msgstr "Basculer l'entrée" + + +msgid "No Value" +msgstr "Aucune valeur" + + +msgid "Compare with another entry" +msgstr "Comparer avec une autre entrée" + + +msgid "You need one of the following ObjectClass(es) to add this attribute %s." +msgstr "Vous avez besoin d'un autre ObjectClass(es) pour ajouter cet attribut %s." + + +msgid "Your Session timed out after" +msgstr "Votre session s'est terminé avec" + + +msgid "min. of inactivity. You have been automatically logged out." +msgstr "min. d'inactivité. Vous avez été automatiquement déconnecté." + + +msgid "To log back in please click on the following link:" +msgstr "Pour vous reconnecter, veuillez cliquer sur le lien suivant :" + + +msgid "(Session timed out. Automatically logged out.)" +msgstr "(Session expirée. Déconnexion automatique.)" + + +msgid "Inactivity will log you off at %s" +msgstr "L'inactivité vous déconnectera à %s" + + diff --git a/locale/hu_HU/LC_MESSAGES/messages.mo b/locale/hu_HU/LC_MESSAGES/messages.mo index c83215894cddc7e4000526dd0461f4f3be895b69..0b1ba0e31218dbb92c41d77ec4011ecb707f2696 100644 GIT binary patch literal 36853 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 Xugm%7#ajVe>{#lUG!>S7A52 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 diff --git a/locale/hu_HU/LC_MESSAGES/messages.po b/locale/hu_HU/LC_MESSAGES/messages.po index 6ac8f80..9fda4ae 100644 --- a/locale/hu_HU/LC_MESSAGES/messages.po +++ b/locale/hu_HU/LC_MESSAGES/messages.po @@ -1,2899 +1,1550 @@ # : $ + + msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2004-01-14 17:45+0200\n" -"PO-Revision-Date: 2008-11-29 00:06+0000\n" -"Last-Translator: Deon George \n" "Language-Team: phpLDAPadmin \n" +"Last-Translator: VOROSBARANYI Zoltan \n" +"POT-Creation-Date: 2005-11-29 17:45+0100\n" +"PO-Revision-Date: 2005-11-29 18:22+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-11-29 23:48+0000\n" -"X-Generator: Launchpad (build Unknown)\n" -#: ../../htdocs/mass_delete.php:86 -#, php-format -msgid "%s of %s entries failed to be deleted." -msgstr "%s darab bejegyzés törlése nem sikerült a(z) %s darabból." -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../lib/HTMLTree.php:486 -msgid "(Session timed out. Automatically logged out.)" -msgstr "" -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr "" - -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" -msgstr "" - -#: ../../lib/search_form_advanced.php:103 -msgid "A list of attributes to display in the results (comma-separated)" -msgstr "" -"A megjelenítendő találatok attribútumainak vesszővel elválasztott listája" - -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 -msgid "A random password was generated for you" -msgstr "" - -#: ../../lib/ldif_functions.php:532 -msgid "A valid deleteoldrdn attribute should be specified" -msgstr "" - -#: ../../lib/ldif_functions.php:243 -msgid "A valid dn line is required." -msgstr "Érvényes DN-sor kell." - -#: ../../lib/ldif_functions.php:538 -msgid "A valid newrdn attribute should be specified" -msgstr "" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 -msgid "Add" -msgstr "Hozzáadás" - -#: ../../htdocs/add_value_form.php:182 -msgid "Add New Value" -msgstr "Új érték hozzáadása" - -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 -msgid "Add ObjectClass and Attributes" -msgstr "Objektumosztály és attribútumok hozzáadása" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 -#, php-format -msgid "Add an additional value to attribute '%s'" -msgstr "Érték hozzáadása a(z) %s attribútumhoz" - -#: ../../htdocs/add_value_form.php:93 -msgid "Add new" -msgstr "Új" - -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 -msgid "Add new ObjectClass" -msgstr "Új objektumosztály hozzáadása" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 -msgid "Add new attribute" -msgstr "Új attribútum hozzáadása" - -#: ../../htdocs/add_attr_form.php:114 -msgid "Add new binary attribute" -msgstr "Új bináris attribútum hozzáadása" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "" - -#: ../../htdocs/ldif_import.php:62 -msgid "Adding..." -msgstr "Hozzáadás..." - -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 -msgid "Advanced Search Form" -msgstr "Részletes keresési űrlap" - -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "" - -#: ../../htdocs/schema.php:110 -msgid "Aliases" -msgstr "Álnevek (alias)" - -#: ../../htdocs/mass_delete.php:88 -msgid "All entries deleted successfully." -msgstr "Az összes bejegyzés törlése sikerült." - -#: ../../lib/EntryWriter1.php:825 -#, php-format -msgid "An attribute (%s) was modified and is highlighted below." -msgstr "Módosult egy attribútum (%s), s ez kiemelve szerepel az alábbiakban." - -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "" - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "" - -#: ../../htdocs/login.php:164 -msgid "Anonymous Bind" -msgstr "Anonymous bind" - -#: ../../htdocs/delete_form.php:102 -msgid "Are you sure you want to permanently delete this object?" -msgstr "Biztos törölni óhajtja ezt az objektumot?" - -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 -msgid "Attribute" -msgstr "Attribútumok" - -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "" - -#: ../../lib/ldif_functions.php:455 -msgid "Attribute is not valid" -msgstr "" - -#: ../../lib/ldif_functions.php:375 -msgid "Attribute not well formed" -msgstr "" - -#: ../../htdocs/login_form.php:63 -msgid "Authenticate" -msgstr "Azonosítás" - -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "" - -#: ../../htdocs/entry_chooser.php:65 -msgid "Back Up..." -msgstr "Vissza..." - -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 -msgid "Bad username or password. Please try again." -msgstr "Helytelen felhasználónév vagy jelszó. Kérem próbálja újra." - -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 -msgid "Base (base dn only)" -msgstr "Csak az alap-DN" - -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 -msgid "Base DN" -msgstr "Alap-DN" - -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 -msgid "Binary value" -msgstr "Bináris érték" - -#: ../../htdocs/copy.php:61 -msgid "Building snapshot of tree to copy... " -msgstr "A fáról készítek egy pillanatfelvételt a másoláshoz... " - -#: ../../lib/export_functions.php:38 -msgid "CSV (Spreadsheet)" -msgstr "" - -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 -msgid "Cancel" -msgstr "Mégsem" - -#: ../../htdocs/compare.php:343 -msgid "Check password" -msgstr "" - -#: ../../lib/EntryWriter1.php:2427 -msgid "Check password..." -msgstr "" - -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "" - -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "" - -#: ../../lib/functions.php:3223 -msgid "Click to popup a dialog to select a date graphically" -msgstr "" - -#: ../../lib/functions.php:2239 -msgid "Click to popup a dialog to select an entry (DN) graphically" -msgstr "" -"Kattintásra egy új ablak jön föl, amelyben egy bejegyzést választhat a DN " -"alapján." - -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 -#, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "" - -#: ../../htdocs/schema.php:106 -msgid "Collective" -msgstr "Kollektív" - -#: ../../htdocs/update_confirm.php:303 -msgid "Commit" -msgstr "Érvényesítés" - -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 -msgid "Compare" -msgstr "" - -#: ../../htdocs/compare_form.php:21 -msgid "Compare another DN with" -msgstr "" - -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 -msgid "Compare this DN with another" -msgstr "" - -#: ../../lib/EntryWriter1.php:776 -msgid "Compare with another entry" -msgstr "" - -#: ../../htdocs/compare.php:42 -msgid "Comparing the following DNs" -msgstr "" - -#: ../../htdocs/export_form.php:84 -msgid "Compress" -msgstr "" - -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "" - -#: ../../htdocs/mass_delete.php:92 -#, php-format -msgid "Confirm mass delete of %s entries on server %s" -msgstr "Hagyja jóvá a(z) %s bejegyzés tömeges törlését a(z) %s kiszolgálóról" - -#: ../../lib/EntryWriter1.php:327 -msgid "Container" -msgstr "Tároló" - -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "" - -#: ../../lib/ldif_functions.php:525 -msgid "Container is null" -msgstr "" - -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 -msgid "Copy" -msgstr "" - -#: ../../htdocs/copy_form.php:96 -msgid "Copy " -msgstr "" - -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:741 -msgid "Copy or move this entry" -msgstr "A bejegyzés másolása" - -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "" - -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "" - -#: ../../htdocs/copy.php:57 -msgid "Copying " -msgstr "Másolás: " - -#: ../../htdocs/ldif_import.php:70 -msgid "Could not add object:" -msgstr "Nem tudom ezt az objektumot hozzáadni:" - -#: ../../htdocs/create.php:133 -msgid "Could not add the object to the LDAP server." -msgstr "Nem tudom az objektumot létrehozni a kiszolgálón." - -#: ../../htdocs/login.php:137 -msgid "Could not bind anonymously to server." -msgstr "Az anonymous bind művelet nem sikerült." - -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "" - -#: ../../lib/server_functions.php:347 -#, php-format -msgid "Could not connect to \"%s\" on port \"%s\"" -msgstr "Nem tudok csatlakozni a(z) %s géphez a(z) %s porton." - -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "" - -#: ../../htdocs/ldif_import.php:71 -msgid "Could not delete object:" -msgstr "Nem tudom ezt az objektumot törölni:" - -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 -#, php-format -msgid "Could not delete the entry: %s" -msgstr "Nem tudom a(z) %s bejegyzést törölni" - -#: ../../htdocs/entry_chooser.php:101 -msgid "Could not determine base DN" -msgstr "Nem tudom az alap-DN-t meghatározni" - -#: ../../lib/HTMLTree.php:82 -msgid "Could not determine the root of your LDAP tree." -msgstr "Nem tudom megállapítani az LDAP-fa gyökerét." - -#: ../../lib/functions.php:1849 -#, php-format -msgid "Could not fetch jpeg data from LDAP server for attribute %s." -msgstr "" - -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 -msgid "Could not logout." -msgstr "Nem sikerült kilépni." - -#: ../../htdocs/ldif_import.php:74 -msgid "Could not modify object:" -msgstr "Nem tudom ezt az objektumot módosítani:" - -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 -msgid "Could not perform ldap_mod_add operation." -msgstr "Nem tudom végrehajtani az ldap_mod_add műveletet." - -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 -msgid "Could not perform ldap_modify operation." -msgstr "Nem tudom elvégezni az ldap_modify műveletet." - -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 -msgid "Could not rename object:" -msgstr "Nem tudom ezt az objektumot átnevezni:" - -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 -msgid "Could not rename the entry" -msgstr "A bejegyzést nem sikerült átnevezni" - -#: ../../htdocs/schema.php:31 -msgid "Could not retrieve schema from" -msgstr "Nem tudom a sémát elérni," - -#: ../../htdocs/login.php:152 -msgid "Could not set cookie." -msgstr "Nem tudok sütit beállítani." - -#: ../../lib/server_functions.php:265 -msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "" -"Nem tudom a TLS-t elindítani. Kérem ellenőrizze az LDAP-kiszolgálót és a " -"konfigurációt." - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "Objektum létrehozása" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "Gyermekbejegyzés létrehozása" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "Új bejegyzés" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "Köszönetnyilvánítás" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "Az aktuális lista" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "DN" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "A(z) %s DSLM exportja" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "Törlés" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "A(z) %s törlése" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "Fotó törlése" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "Mind a(z) %s objektum törlése" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "A bejegyzés törlése" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "%s törölve" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "Törlés..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "A törlési művelet a(z) %s kiszolgálón" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "Leírás" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "Cél-DN" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "Célkiszolgáló" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "" - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "Megkülönböztető név (DN)" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "Érvényesíteni kívánja a változásokat?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "Ne állj meg hiba esetén" - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "Adományozzon" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "Keresés közben hibába akadtam." - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "Adja meg a kívánt értéket:" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "Bejegyzés" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "A(z) %s bejegyzés és a részfa sikeresen törölve." - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "Bejegyzés kiválasztása" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "Egyenlőség" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "Hiba" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "" -"Hiba a mass_delete.php hívásakor. A POST változók közül hiányzik a " -"mass_delete." - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "Exportálás" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "Export-formátum" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "Részfa exportálása" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "Sikertelen" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "Nem tudtam az attribútumot hozzáadni." - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "A DN másolása nem sikerült: " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "A(z) %s bejegyzés törlése sikertelen" - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "Állomány" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "Szűrő" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "A phpLDAPadmin generálta, dátum: %s" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "Mehet" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "Menj a(z) %s DN-hez" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "Belső attribútumok elrejtése" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "" -"Tipp: A kiszolgálók közötti másolás csak akkor működik, ha nincs séma-sértés" - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "" -"Tipp: Az attribútum törléséhez előbb törölje a mezőt, majd kattintson a " -"változtatások mentésére." - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "" -"Tipp: Az attribútum sémájának megtekintéséhez kattintson az attribútum " -"nevére." - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "Tipp: Legalább egy strukturális objektumosztályt kell választania" - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please report it." -msgstr "" - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "" -"Ha kritériumot kíván adni a listához szerkessze meg a search.php-t, hogy " -"kezelje le azokat. Most kilépek." - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "LDIF-állomány importálása" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "LDIF-állományból bejegyzések importálása" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "Kitől örökölte:" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "Kitől öröklődik" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "" - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "Érvénytelen RDN érték" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "Az export formátuma érvénytelen" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "" -"Az LDAP-kiszolgálót úgy konfigurálták, hogy ne fedje föl az LDAP-fa gyökerét." - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "Ugrás az illesztőszabályhoz" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "Ugrás az attribútumtípushoz" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "Ugrás az objektumosztályhoz" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "Ugrás ehhez az objektumosztály-definícióhoz" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "A(z) %s LDIF exportja" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "LDIF-pásztázási hiba" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "Sorvégek" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "A törlendő bejegyzések listája:" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "Bejelentkezési DN" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "Belépés..." - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "Kilépés ebből a kiszolgálóból" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "" - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "A tömeges törléshez megadott tömb formátuma helytelen" - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "Tömeges törlés" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "" -"A tömeges törlés nincs engedélyezve. Mielőtt folytatná, állítsa át az " -"enable_mass_delete értékét config.php állományban." - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "Illesztőszabály-OID" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "Illesztőszabályok" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "Maximális hossz" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "" - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "" - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "" - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "A feltöltött állomány hiányzik." - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "A módosítás sikerült!" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "Módosítás..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "Név" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "Új kötelező attribútumok" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "Új érték" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "Nem" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "Nincs megadva a DN" - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "" - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "Nincs megadva az attribútumnév." - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "Nincs használható exportáló." - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "" - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "Nincs belső attribútum" - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "Arra a kiszolgálóra nincs bejelentkezve senki." - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "Nincs keresés definiálva a config.php-ben." - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "Nincs ilyen bejegyzés: %s" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "Nem találtam verziószámot, feltételeztem, hogy 1-es." - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "Kevés az adat a belépéshez. Kérem ellenőrizze a konfigurációt." - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "" - -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "" -"Megj.: Lehet hogy új kötelező attribútumokat kell bevinnie ehhez az " -"objektumosztályhoz" - -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" -"Megj.: Ez a törlés veszélyes lehet. A műveletet nem lehet visszavonni!" - -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "Figyelem: a keresési méret korlátja túllépve." - -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" - -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 -msgid "ObjectClasses" -msgstr "Objektumosztályok" - -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" - -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "" - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "Maradi" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "Régi érték" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "Egy szint az alap-DN alatt" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "Opcionális attribútumok" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "Sorbarendezés" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "Kinek a szülője" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "Jelszó" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "Az összes gyermeket is töröljem?" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "Kérem adja meg a config.php-ban" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "Előre definiált keresések" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 -msgid "Proceed >>" -msgstr "Tovább >>" - -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "" - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "" - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "Attribútum tényleges törlése" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "Rekurzív másolás" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "Rekurzív másolás folyamatban" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "A rekurzív törlés folyamatban" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "Az objektum összes gyermekeinek rekurzív másolása." - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "Frissítés" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "Az összes kiterjesztett tároló frissítése:" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "Bejegyzés frissítése" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "Átnevezés" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "A bejegyzés átnevezése" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "" - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "Hiba jelentése" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "Új tulajdonság kérése" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "Kötelező attribútumok" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "Változások mentése" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "Az objektum kiírása" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "Az objektum és az összes gyermekének kiírása" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "Séma:" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "Keresés" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "Keresőszűrő" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "A keresés hatásköre" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "Bejegyzések keresése, ahol:" - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "" -"Biztonsági hiba: a feltöltendő állomány veszélyes elemeket tartalmazhat." - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "Előre definiált keresés kiválasztása" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "Válasszon mintát a létrehozási folyamathoz" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "Kiszolgáló" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "Kiszolgáló-infó: " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "A kiszolgáló ezeket az információkat közölte önmagáról" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "Attribútumok megjelenítése" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "Belső attribútumok megjelenítése" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "A(z) %s és %s közé eső találatok megjelenítése." - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 msgid "Simple Search Form" msgstr "Egyszerű keresési űrlap" -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "" -"Mivel megváltoztatta a jelszót most újra be kell jelentkeznie az új " -"jelszóval." -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "Egyértékű" +msgid "Advanced Search Form" +msgstr "Részletes keresési űrlap" -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "" -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "" -"Módosult néhány attribútum (%s), s ezek kiemelve szerepelnek az alábbiakban." +msgid "Server" +msgstr "Kiszolgáló" -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "" -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "" +msgid "Search for entries whose" +msgstr "Bejegyzések keresése, ahol:" -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "" -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "Szabványos LDAP-szűrő, pl. (&(sn=Kovács)(givenname=István))" +msgid "Base DN" +msgstr "Alap-DN" -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "Az egész részfa" +msgid "Search Scope" +msgstr "A keresés hatásköre" -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "Alfüzér-szabály" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "Siker" +msgid "Show Attributtes" +msgstr "Attribútumok megjelenítése" -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "" -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "" +msgid "Search" +msgstr "Keresés" -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "Szintaxis" +msgid "Select a predefined search" +msgstr "Előre definiált keresés kiválasztása" -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "Szintaxis-OID" -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "Szintaxisok" +msgid "Predefined Searches" +msgstr "Előre definiált keresések" -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "Minta" -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" +msgid "No queries have been defined in config.php." +msgstr "Nincs keresés definiálva a config.php-ben." -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "" -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "" +msgid "Request feature" +msgstr "Új tulajdonság kérése" -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "" -"A(z) %s attribútum csak olvasható a phpLDAPadmin konfigurációja szerint." -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "" +msgid "Report a bug" +msgstr "Hiba jelentése" -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "" -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "" - -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "" - -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "" - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "" - -#: ../../htdocs/create.php:39 -#, php-format -msgid "The container you specified (%s) does not exist. Please try again." -msgstr "A(z) %s tároló nem létezik. Kérem próbálja újra." - -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "A cél-tároló (%s) nem létezik." - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "A célbejegyzés (%s) már létezik." - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "" - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "" - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "" - -#: ../../htdocs/add_attr.php:56 -msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "" -"A kiválasztott állomány vagy üres, vagy nem létezik. Kérem lépjen vissza és " -"próbálja újra." - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "" -"A kiválasztott állomány csak részben töltődött föl valószínűleg hálózati " -"hiba miatt." - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "" -"A feltöltött állomány túl nagy. Kérem ellenőrizze a php.ini állományban a " -"upload_max_size beállítást." - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" -msgstr "A másolással létrejövő új bejegyzés teljes DN-je" - -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" -msgstr "" - -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "" - -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "A kiszolgáló nem beszéli elég jól az LDAP-protokollt" - -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "A forrás- és cél-DN ugyanaz." - -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "" - -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "Ez a művelet megközeveteli hogy hozzáadjon" - -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "" -"A phpLDAPadmin adminisztrátora ezt az attribútumot csak olvashatóra állította" - -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "" - -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "" - -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "Ez több dolog miatt történhet, például:" - -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "" - -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "A bejegyzésnek nincs attribútuma" - -#: ../../htdocs/delete_form.php:46 -#, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "Ez a bejegyzés egy %s bejegyzést tartalmazó részfa gyökere." - -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "" - -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "" - -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "Ez az objektumosztály maradi" - -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "" - -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "A kiszolgálónak nincs mit elküldenie" - -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "" - -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "" - -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "" - -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "" - -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "Bejegyzések száma összesen" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "Típus" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 -#, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "" -"A bind művelet sikertelen a(z) %s kiszolgálóhoz az auto_uid " -"használatával. Kérem ellenőrizze a konfigurációt." - -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "" - -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "" - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "" - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "" - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "Ismeretlen auth_type: %s" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "" - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "Ismeretlen kritérium-opció: " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "" - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "A feltöltött LDIF-állomány üres." - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "Használat" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "A bal oldali menüvel tájékozódhat a programban" - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "Mely attribútumok használják" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "Mely osztályok használják" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "Felhasználó-módosítás" - -#: ../../lib/EntryWriter1.php:797 -#, php-format -msgid "View %s children" -msgstr "A gyermekek megtekintése (%s darab)" - -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "A gyermek megtekintése (1 darab)" - -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "Séma megtekintése:" - -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "A kiszolgáló információinak megtekintése" - -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "" - -#: ../../lib/EntryWriter1.php:819 -msgid "Viewing entry in read-only mode." -msgstr "A bejegyzés megtekintése csak olvasható üzemmódban." - -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" - -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "" - -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "" -"Rekurzív másolásnál csak azokat másolja le, amelyekre illik ez a szűrő" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "Igen" - -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "Igen, törlődjön" - -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "" -"Nem https kapcsolatot használ. A böngésző a bejelentkezés adatait sima " -"szöveg formátumban fogja továbbítani" - -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 -msgid "You cannot perform updates while server is in read-only mode" -msgstr "" -"Nem lehet módosítani mikor a kiszolgáló csak olvasható üzemmódban van" - -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "" -"Nem nevezhet át olyan bejegyzést aminek gyermekei vannak (azaz az átnevezés " -"művelete csak levél-bejegyzéseken megengedett)" - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "Nem változtatta meg az RDN-t" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "" -"Nem választott objektumosztályt ehhez az objektumhoz. Kérem lépjen vissza és " -"válasszon egyet." - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "Nem választotta ki a törlendő bejegyzés(eke)t." - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "" - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "Nem lépett be a kiválasztott kiszolgálóba, s így nem tudok keresni." - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "" - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "Az RDN-mezőt üresen hagyta" - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 -msgid "You left the attribute value blank. Please go back and try again." -msgstr "" -"Az attribútumértéket üresen hagyta. Kérem lépjen vissza és próbálja újra." - -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "Üresen hagyta a cél-DN mezejét" - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "A jelszó üresen maradt." - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "A(z) %s kötelező attribútum értékét üresen hagyta." - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "Nem történt változtatás" - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "Az export formátumát ki kell választani." - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "" - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "A DN-t meg kell adni" - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "" - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "Ezt a döntést majd még meg kell erősíteni" - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "" -"A PHP-konfiguráció tiltja az állományok feltöltését. Kérem ellenőrizze a " -"php.ini állományt." - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" -"Ez a PHP nem tartalmazza az mhash() függvényt. Nem tudok SHA hash-eket " -"kezelni." - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "Ez a PHP nem támogatja a TLS-t." - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "" - -#: ../../lib/functions.php:1172 -#, php-format -msgid "" -"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " -"for server %s" -msgstr "" -"A konfigurációban érvénytelen auto_uid_search_base van megadva a(z) " -"%s kiszolgálóhoz." - -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "Ez a PHP nem támogatja a blowfish titkosítást." - -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 -msgid "Your system crypt library does not support extended DES encryption." -msgstr "" - -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 -msgid "Your system crypt library does not support md5crypt encryption." -msgstr "Ez a PHP nem támogatja az md5crypt titkosítást." - -#: ../../lib/template_functions.php:984 -#, php-format -msgid "" -"Your template calls php.Function for a default value, however (%s) is NOT " -"available in the POST FORM variables. The following variables are available " -"[%s]." -msgstr "" - -#: ../../lib/EntryReader.php:262 -#, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "" - -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "" - -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "Ez a PHP-verzió nem tudja szabályosan végrehajtani a keresést." - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[attribútum törölve]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "érték hozzáadása" - -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "" - -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "böngészés" - -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "hiba" - -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "" - -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "" - -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "karakter" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "" - -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "attribútum törlése" - -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "érték letöltése" - -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "üres" - -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "" - -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "" - -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "" - -#: ../../htdocs/search.php:273 -msgid "export results" -msgstr "" - -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "hamis" - -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "" - -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "tipp" - -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "import" - -#: ../../lib/HTMLTree.php:248 -msgid "info" -msgstr "infó" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "" - -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "A jpegPhoto hibás
" - -#: ../../lib/functions.php:351 -msgid "light" -msgstr "lámpa" - -#: ../../lib/functions.php:132 -msgid "line" -msgstr "" - -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "belépés" - -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "kilépés" - -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "A mass_delete POST változó nem tömb." - -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "" - -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "" - -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "új" - -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "új attribútumo(ka)t" - -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "nincs leírás" - -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "" - -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "nics bejegyzés" - -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "a bejegyzéshez nem tartozik új attribútum" - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "a bejegyzéshez nem tartozik új bináris attribútum" - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "nincs" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "nincs, érték törése" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "nem alkalmazható" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "nincs megadva" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" -"Rekurzív módon törölhetem ezt a bejegyzést, és mind a(z) %s gyermekét. Lásd " -"alul a bejegyzéseket, amelyeket törölnék. Óhajtja törölni?" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "" -"Vagy végül is a phpLDAPadmin nem tudja hogyan kell a sémát letölteni erről a " -"kiszolgálóról." - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "csak olvasható" - -#: ../../lib/HTMLTree.php:240 -msgid "refresh" -msgstr "frissítés" - -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "" - -#: ../../lib/EntryWriter1.php:1829 -msgid "rename" -msgstr "Átnevezés" - -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "" - -#: ../../lib/HTMLTree.php:224 msgid "schema" msgstr "séma" -#: ../../lib/HTMLTree.php:232 + msgid "search" msgstr "keresés" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "s alatt hajtotta végre a keresést" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "" +msgid "create" +msgstr "létrehozás" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "" +msgid "info" +msgstr "infó" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "" +msgid "import" +msgstr "import" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "" +msgid "refresh" +msgstr "frissítés" + + +msgid "logout" +msgstr "kilépés" + + +msgid "Create new entry here" +msgstr "Új bejegyzés" + + +msgid "View schema for" +msgstr "Séma megtekintése:" + + +msgid "Refresh all expanded containers for" +msgstr "Az összes kiterjesztett tároló frissítése:" + + +msgid "Create a new entry on" +msgstr "Új bejegyzés létrehozása:" + + +msgid "new" +msgstr "új" + + +msgid "View server-supplied information" +msgstr "A kiszolgáló információinak megtekintése" + + +msgid "Import entries from an LDIF file" +msgstr "LDIF-állományból bejegyzések importálása" + + +msgid "Logout of this server" +msgstr "Kilépés ebből a kiszolgálóból" + + +msgid "Logged in as: " +msgstr "Belépve mint" + + +msgid "read only" +msgstr "csak olvasható" + + +msgid "This attribute has been flagged as read only by the phpLDAPadmin administrator" +msgstr "A phpLDAPadmin adminisztrátora ezt az attribútumot csak olvashatóra állította" + + +msgid "Could not determine the root of your LDAP tree." +msgstr "Nem tudom megállapítani az LDAP-fa gyökerét." + + +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Az LDAP-kiszolgálót úgy konfigurálták, hogy ne fedje föl az LDAP-fa gyökerét." + + +msgid "Please specify it in config.php" +msgstr "Kérem adja meg a config.php-ban" + + +msgid "Login..." +msgstr "Belépés..." + + +msgid "login" +msgstr "belépés" + + +msgid "Delete this entry" +msgstr "A bejegyzés törlése" + + +msgid "You will be prompted to confirm this decision" +msgstr "Ezt a döntést majd még meg kell erősíteni" + + +msgid "Copy or move this entry" +msgstr "A bejegyzés másolása" + + +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Az objektum másolása más helyre új DN-nel és/vagy másik kiszolgálóra" + + +msgid "Export" +msgstr "Exportálás" + + +msgid "Save a dump of this object" +msgstr "Az objektum kiírása" + + +msgid "Save a dump of this object and all of its children" +msgstr "Az objektum és az összes gyermekének kiírása" + + +msgid "Export subtree" +msgstr "Részfa exportálása" + + +msgid "Create a child entry" +msgstr "Gyermekbejegyzés létrehozása" + + +msgid "Rename Entry" +msgstr "A bejegyzés átnevezése" + + +msgid "Rename" +msgstr "Átnevezés" + + +msgid "rename" +msgstr "Átnevezés" + + +msgid "Add" +msgstr "Hozzáadás" + + +msgid "View" +msgstr "Megtekintés" + + +msgid "View 1 child" +msgstr "A gyermek megtekintése (1 darab)" + + +msgid "View %s children" +msgstr "A gyermekek megtekintése (%s darab)" + + +msgid "Add new attribute" +msgstr "Új attribútum hozzáadása" + + +msgid "Add new ObjectClass" +msgstr "Új objektumosztály hozzáadása" + + +msgid "Hide internal attributes" +msgstr "Belső attribútumok elrejtése" + + +msgid "Show internal attributes" +msgstr "Belső attribútumok megjelenítése" + + +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "Kattintással megjelenik a(z) %s attribútumtípus sémabeli definíciója" + + +msgid "none" +msgstr "nincs" + + +msgid "No internal attributes" +msgstr "Nincs belső attribútum" + + +msgid "This entry has no attributes" +msgstr "A bejegyzésnek nincs attribútuma" + + +msgid "Save Changes" +msgstr "Változások mentése" + + +msgid "add value" +msgstr "érték hozzáadása" + + +msgid "Add an additional value to attribute '%s'" +msgstr "Érték hozzáadása a(z) %s attribútumhoz" + + +msgid "Refresh" +msgstr "Frissítés" + + +msgid "Refresh this entry" +msgstr "Bejegyzés frissítése" + + +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "Tipp: Az attribútum törléséhez előbb törölje a mezőt, majd kattintson a változtatások mentésére." + + +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "Tipp: Az attribútum sémájának megtekintéséhez kattintson az attribútum nevére." + + +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "Módosult néhány attribútum (%s), s ezek kiemelve szerepelnek az alábbiakban." + + +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "Módosult egy attribútum (%s), s ez kiemelve szerepel az alábbiakban. " + + +msgid "Viewing entry in read-only mode." +msgstr "A bejegyzés megtekintése csak olvasható üzemmódban." + + +msgid "no new attributes available for this entry" +msgstr "a bejegyzéshez nem tartozik új attribútum" + + +msgid "no new binary attributes available for this entry" +msgstr "a bejegyzéshez nem tartozik új bináris attribútum" + + +msgid "Binary value" +msgstr "Bináris érték" + + +msgid "Add new binary attribute" +msgstr "Új bináris attribútum hozzáadása" + + +msgid "Note: '%s' is an alias for '%s'" +msgstr "A(z) %s álneve a(z) %s attribútumnévnek" + + +msgid "download value" +msgstr "érték letöltése" + + +msgid "delete attribute" +msgstr "attribútum törlése" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "; az új objektum" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 msgid "true" msgstr "igaz" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "" -"Az update_array hibés. Ez a phpLDAPadmin hibája lehet, kérem jelentse." +msgid "false" +msgstr "hamis" -#: ../../htdocs/add_value_form.php:93 -msgid "value to" -msgstr "érték, RDN:" -#: ../../htdocs/add_value_form.php:112 -msgid "values for attribute" -msgstr "értéket tartalmaz. Attribútum:" +msgid "none, remove value" +msgstr "nincs, érték törése" + + +msgid "Really delete attribute" +msgstr "Attribútum tényleges törlése" + + +msgid "Add New Value" +msgstr "Új érték hozzáadása" + + +msgid "The server does not fully support the LDAP protocol." +msgstr "A kiszolgáló nem beszéli elég jól az LDAP-protokollt" + + +msgid "Your version of PHP does not correctly perform the query." +msgstr "Ez a PHP-verzió nem tudja szabályosan végrehajtani a keresést." + + +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "Vagy végül is a phpLDAPadmin nem tudja hogyan kell a sémát letölteni erről a kiszolgálóról." + + +msgid "Jump to an objectClass" +msgstr "Ugrás az objektumosztályhoz" + + +msgid "Jump to an attribute type" +msgstr "Ugrás az attribútumtípushoz" + + +msgid "Jump to a matching rule" +msgstr "Ugrás az illesztőszabályhoz" + + +msgid "Schema for server" +msgstr "Séma:" + + +msgid "Required Attributes" +msgstr "Kötelező attribútumok" + + +msgid "Optional Attributes" +msgstr "Opcionális attribútumok" + + +msgid "Optional Binary Attributes" +msgstr "Opcionális bináris attribútumok" + + +msgid "OID" +msgstr "OID" + + +msgid "Aliases" +msgstr "Álnevek (alias)" + + +msgid "Description" +msgstr "Leírás" + + +msgid "no description" +msgstr "nincs leírás" + + +msgid "Name" +msgstr "Név" + + +msgid "Equality" +msgstr "Egyenlőség" + + +msgid "This objectClass is obsolete." +msgstr "Ez az objektumosztály maradi" + + +msgid "Inherits from" +msgstr "Kitől öröklődik" + + +msgid "Inherited from" +msgstr "Kitől örökölte:" + + +msgid "Parent to" +msgstr "Kinek a szülője" + + +msgid "Jump to this objectClass definition" +msgstr "Ugrás ehhez az objektumosztály-definícióhoz" + + +msgid "Matching Rule OID" +msgstr "Illesztőszabály-OID" + + +msgid "Syntax OID" +msgstr "Szintaxis-OID" + + +msgid "not applicable" +msgstr "nem alkalmazható" + + +msgid "not specified" +msgstr "nincs megadva" + + +msgid "character" +msgstr "karakter" + + +msgid "Used by objectClasses" +msgstr "Mely osztályok használják" + + +msgid "Used by Attributes" +msgstr "Mely attribútumok használják" + + +msgid "Maximum Length" +msgstr "Maximális hossz" + + +msgid "Syntaxes" +msgstr "Szintaxisok" + + +msgid "Matching Rules" +msgstr "Illesztőszabályok" + + +msgid "Obsolete" +msgstr "Maradi" + + +msgid "Ordering" +msgstr "Sorbarendezés" + + +msgid "Substring Rule" +msgstr "Alfüzér-szabály" + + +msgid "Single Valued" +msgstr "Egyértékű" + + +msgid "Collective" +msgstr "Kollektív" + + +msgid "User Modification" +msgstr "Felhasználó-módosítás" + + +msgid "Usage" +msgstr "Használat" + + +msgid "Could not retrieve schema from" +msgstr "Nem tudom a sémát elérni," + + +msgid "Type" +msgstr "Típus" + + +msgid "Entry %s deleted successfully." +msgstr "A(z) %s bejegyzés sikeresen törölve." + + +msgid "You must specify a DN" +msgstr "A DN-t meg kell adni" + + +msgid "Could not delete the entry: %s" +msgstr "Nem tudom a(z) %s bejegyzést törölni" + + +msgid "No such entry: %s" +msgstr "Nincs ilyen bejegyzés: %s" + + +msgid "Delete %s" +msgstr "A(z) %s törlése" + + +msgid "Permanently delete all children also?" +msgstr "Az összes gyermeket is töröljem?" + + +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "Ez a bejegyzés egy %s bejegyzést tartalmazó részfa gyökere." + -#: ../../htdocs/delete_form.php:48 msgid "view entries" msgstr "bejegyzések megtekintése" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "" +msgid "phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?" +msgstr "Rekurzív módon törölhetem ezt a bejegyzést, és mind a(z) %s gyermekét. Lásd alul a bejegyzéseket, amelyeket törölnék. Óhajtja törölni?" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "" -#: ../../htdocs/compare_form.php:29 -msgid "with " -msgstr "" +msgid "Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems." +msgstr "Megj.: Ez a törlés veszélyes lehet. A műveletet nem lehet visszavonni!" -#~ msgid "equals" -#~ msgstr "egyenlő" -#~ msgid "contains" -#~ msgstr "tartalmaz" +msgid "Delete all %s objects" +msgstr "Mind a(z) %s objektum törlése" -#~ msgid "create" -#~ msgstr "létrehozás" -#~ msgid "Create a new entry on" -#~ msgstr "Új bejegyzés létrehozása:" +msgid "Recursive delete progress" +msgstr "A rekurzív törlés folyamatban" -#~ msgid "Logged in as: " -#~ msgstr "Belépve mint " -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "Az objektum másolása más helyre új DN-nel és/vagy másik kiszolgálóra" +msgid "Entry %s and sub-tree deleted successfully." +msgstr "A(z) %s bejegyzés és a részfa sikeresen törölve." -#~ msgid "View" -#~ msgstr "Megtekintés" -#~ msgid "Click to view the schema defintion for attribute type '%s'" -#~ msgstr "Kattintással megjelenik a(z) %s attribútumtípus sémabeli definíciója" +msgid "Failed to delete entry %s" +msgstr "A(z) %s bejegyzés törlése sikertelen" -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "A(z) %s álneve a(z) %s attribútumnévnek" -#~ msgid "Entry %s deleted successfully." -#~ msgstr "A(z) %s bejegyzés sikeresen törölve." +msgid "List of entries to be deleted:" +msgstr "A törlendő bejegyzések listája:" -#~ msgid "" -#~ "Instructions: In order to add these objectClass(es) to this entry, you must " -#~ "specify" -#~ msgstr "Az új objektumosztály hozzáadásához" -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "kell megadni ezen az űrlapon." +msgid "Are you sure you want to permanently delete this object?" +msgstr "Biztos törölni óhajtja ezt az objektumot?" -#~ msgid "Bad server id" -#~ msgstr "Hibás kiszolgáló-azonosító" -#~ msgid "Could not connect to LDAP server." -#~ msgstr "Nem tudok csatlakozni az LDAP-kiszolgálóhoz." +msgid "DN" +msgstr "DN" -#~ msgid "Server: " -#~ msgstr "Kiszolgáló: " -#~ msgid "Looking in: " -#~ msgstr "Keresés itt: " +msgid "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin configuration." +msgstr "A(z) %s attribútum csak olvasható a phpLDAPadmin konfigurációja szerint." -#~ msgid "No DN specified in query string!" -#~ msgstr "Nincs megadva a DN a keresési füzérben!" - -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "Megj.: Ha nincs beállítva EGYENLŐSÉG-szabály ehhez az attribútumhoz a " -#~ "kiszolgáló az ún. inappropriate matching hibát adja vissza." - -#~ msgid "Copy successful! Would you like to " -#~ msgstr "A másolás sikerült! Szeretné-e " - -#~ msgid "view the new entry" -#~ msgstr "megtekinteni az új bejegyzést" - -#~ msgid "Choose a template" -#~ msgstr "Válasszon mintát" - -#~ msgid "Click here to go to the login form" -#~ msgstr "Kattintson ide a belépési űrlap eléréséhez" - -#~ msgid "Entries found: " -#~ msgstr "A megtalált bejegyzések: " -#~ msgid "Filter performed: " -#~ msgstr "Használt szűrő: " +msgid "No attribute name specified." +msgstr "Nincs megadva az attribútumnév." -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "A phpLDAPadmin" -#~ msgid "starts with" -#~ msgstr "kezdet" - -#~ msgid "ends with" -#~ msgstr "végződés" - -#~ msgid "sounds like" -#~ msgstr "hangzás" - -#~ msgid "" -#~ "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP " -#~ "or perhaps your LDAP server has access control specified that prevents LDAP " -#~ "clients from accessing the RootDSE." -#~ msgstr "Nem tudom az információt letölteni a kiszolgálóról" - -#~ msgid "ChangeLog" -#~ msgstr "Változtatások naplója" - -#~ msgid "Unsafe file name: " -#~ msgstr "Nem biztonságos állománynév: " - -#~ msgid "No such file: " -#~ msgstr "Nincs ilyen állomány: " - -#~ msgid "" -#~ "You have enabled auto_uid_numbers for %s in your configuration, " -#~ " but you have not specified the " -#~ "auto_uid_number_mechanism. Please correct " -#~ "this problem." -#~ msgstr "" -#~ "Az auto_uid_numbers engedélyezett a konfigurációban a(z) %s " -#~ "kiszolgálóhoz, de az auto_uid_number_mechanism nincs megadva. Kérem írja be " -#~ "ezt az értéket." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool\" " -#~ " in your configuration for server %s, but you did not " -#~ "specify the audo_uid_number_uid_pool_dn. Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "A konfigurációban az auto_uid_number_mechanism értéke uidpool a(z) %s " -#~ "kiszolgálóhoz, de nem adta meg az auto_uid_number_uid_pool_dn értékét. Kérem " -#~ "írja be ezt az értéket." - -#~ msgid "" -#~ "It appears that the uidPool you specified in your configuration (\"%s\") " -#~ " does not exist." -#~ msgstr "A konfigurációban megadott uidPool nem létezik (%s)." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"search\" in your " -#~ " configuration for server %s, but you did not " -#~ "specify the \"auto_uid_number_search_base\". " -#~ "Please specify it before proceeding." -#~ msgstr "" -#~ "A konfigurációban az auto_uid_number_mechanism értéke search a(z) %s " -#~ "kiszolgálóhoz, de nem adta meg az auto_uid_number_search_base értékét. Kérem " -#~ "írja be ezt az értéket." - -#~ msgid "" -#~ "You specified an invalid value for auto_uid_number_mechanism (\"%s\") " -#~ " in your configration. Only \"uidpool\" and " -#~ "\"search\" are valid. Please correct this " -#~ "problem." -#~ msgstr "" -#~ "Érvénytelen értéket adott meg a auto_uid_number_mechanism-nak (%s). Csak " -#~ "uidpool és search a megengedett érték." - -#~ msgid "" -#~ "Error: You have an error in your config file. The only three allowed values " -#~ " for auth_type in the $servers section are " -#~ "'session', 'cookie', and 'config'. You entered '%s', " -#~ " which is not allowed. " -#~ msgstr "" -#~ "Csak a session, cookie és config a megengedett értékek az auth_type-nak a " -#~ "konfigurációban. A megadott helytelen érték: %s. " - -#~ msgid "LDAP said: %s" -#~ msgstr "Az LDAP ezt mondta: %s" - -#~ msgid "Error number: %s (%s)" -#~ msgstr "Hibaszám: %s (%s)" - -#~ msgid "Description: %s

" -#~ msgstr "Leírás: %s

" - -#~ msgid "Error number: %s

" -#~ msgstr "Hibaszám: %s

" - -#~ msgid "Description: (no description available)
" -#~ msgstr "Leírás: (nincs leírás)
" - -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "Ez a phpLDAPadmin hibája? Ha igen, kérem jelentse." - -#~ msgid "Unrecognized error number: " -#~ msgstr "Ismeretlen hibaszám: " - -#~ msgid "" -#~ "

\t\t\t
You found " -#~ "a non-fatal phpLDAPadmin bug!
Error:%s " -#~ "(%s)
File: %s line " -#~ "%s, caller %s
Versions:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "server:%s
Please check and see if this bug has been reported " -#~ "here.
If it hasnt been reported, you may report this bug by clicking " -#~ "here.

" -#~ msgstr "" -#~ "
Állomány:
Egy kisebb " -#~ "hibát talált a phpLDAPadmin-" -#~ "ban!
Hiba:%s (%s)
%s. sor %s, hívó " -#~ "%s
Verziók:PLA: %s, PHP: %s, " -#~ "SAPI: %s
Web-" -#~ "kiszolgáló:%s
Kérem jelentse a hibát, kattintson " -#~ "ide!.

" - -#~ msgid "" -#~ "Congratulations! You found a bug in phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA " -#~ "Version:%s
PHP " -#~ "Version:%s
PHP " -#~ "SAPI:%s
Web " -#~ "server:%s
\t
\t Please " -#~ "report this bug by clicking below!" -#~ msgstr "" -#~ "Gratulálunk! Hibát talált a phpLDAPadmin-ban.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Hiba:%s
Szint:%s
Állomány:%s
Sor:%s
Hívó:%s
PLA " -#~ "Verzió:%s
PHP " -#~ "Verzió:%s
PHP " -#~ "SAPI:%s
Web-" -#~ "kiszolgáló:%s
\t
\t " -#~ "Kérjük jelentse a hibát, kattintson alulra!" - -#~ msgid "Select an LDIF file:" -#~ msgstr "LDIF-állomány kiválasztása" - -#~ msgid "Line Number:" -#~ msgstr "Sorszám:" - -#~ msgid "Line:" -#~ msgstr "Sor:" - -#~ msgid "Optional Binary Attributes" -#~ msgstr "Opcionális bináris attribútumok" - -#~ msgid "Maximum file size: %s" -#~ msgstr "Maximális állományméret: %s" - -#~ msgid "Back" -#~ msgstr "Vissza" - -#~ msgid "object" -#~ msgstr "objektum" - -#~ msgid "Delete all" -#~ msgstr "Minden törlése" - -#~ msgid "warning" -#~ msgstr "figyelmeztetés" - -#~ msgid "using template" -#~ msgstr "használt minta:" - -#~ msgid "Redirecting..." -#~ msgstr "Átirányítás..." - -#~ msgid "here" -#~ msgstr "ide" - -#~ msgid "Step 1 of 2: Name and ObjectClass(es)" -#~ msgstr "Első lépés: Név és objektumosztály(ok)" - -#~ msgid "Step 2 of 2: Specify attributes and values" -#~ msgstr "Második lépés: Adja meg az attribútumokat és értékeiket" - -#~ msgid "Relative Distinguished Name" -#~ msgstr "Viszonylagos megkülönböztető név (RDN)" - -#~ msgid "RDN" -#~ msgstr "RDN" - -#~ msgid "(example: cn=MyNewPerson)" -#~ msgstr "(példa: cn=ÚjEmber)" - -#~ msgid "Could not bind to the LDAP server." -#~ msgstr "A bind művelet sikertelen az LDAP-kiszolgálóhoz." - -#~ msgid "Successfully logged into server %s" -#~ msgstr "A(z) %s kiszolgálóhoz sikeresen bejelentkezett." - -#~ msgid "%s bytes" -#~ msgstr "%s byte" - -#~ msgid "Searching..." -#~ msgstr "Folyik a keresés..." - -#~ msgid "Logged out successfully from server %s" -#~ msgstr "A kilépés sikerült a(z) %s kiszolgálóból" - -#~ msgid "Authenticate to server %s" -#~ msgstr "Azonosítsa magát a(z) %s kiszolgálón" - -#~ msgid "Warning: This web connection is unencrypted." -#~ msgstr "Figyelem: A kapcsolat a bögészővel titkosítatlan." +msgid "No DN specified" +msgstr "Nincs megadva a DN" -#~ msgid "User name" -#~ msgstr "A felhasználó neve" -#~ msgid "" -#~ "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do " -#~ "so. An example config file is provided in 'config/config.php.example'" -#~ msgstr "" -#~ "Konfigurálnia kell a phpLDAPadmint a config.php állomány szerkesztésével, " -#~ "amihez mintául a config.php.example szolgálhat." +msgid "You left the attribute value blank. Please go back and try again." +msgstr "Az attribútumértéket üresen hagyta. Kérem lépjen vissza és próbálja újra." + + +msgid "Failed to add the attribute." +msgstr "Nem tudtam az attribútumot hozzáadni." + + +msgid "The file you chose is either empty or does not exist. Please go back and try again." +msgstr "A kiválasztott állomány vagy üres, vagy nem létezik. Kérem lépjen vissza és próbálja újra." + + +msgid "Security error: The file being uploaded may be malicious." +msgstr "Biztonsági hiba: a feltöltendő állomány veszélyes elemeket tartalmazhat." + + +msgid "Your PHP configuration has disabled file uploads. Please check php.ini before proceeding." +msgstr "A PHP-konfiguráció tiltja az állományok feltöltését. Kérem ellenőrizze a php.ini állományt." + + +msgid "The file you uploaded is too large. Please check php.ini, upload_max_size setting" +msgstr "A feltöltött állomány túl nagy. Kérem ellenőrizze a php.ini állományban a upload_max_size beállítást." + + +msgid "The file you selected was only partially uploaded, likley due to a network error." +msgstr "A kiválasztott állomány csak részben töltődött föl valószínűleg hálózati hiba miatt." + + +msgid "Maximum file size: %s" +msgstr "Maximális állományméret: %s" + + +msgid "Modification successful!" +msgstr "A módosítás sikerült!" + + +msgid "Since you changed your password, you must now login again with your new password." +msgstr "Mivel megváltoztatta a jelszót most újra be kell jelentkeznie az új jelszóval." + + +msgid "New Required Attributes" +msgstr "Új kötelező attribútumok" + + +msgid "This action requires you to add" +msgstr "Ez a művelet megközeveteli hogy hozzáadjon" + + +msgid "new attributes" +msgstr "új attribútumo(ka)t" + + +msgid "Instructions: In order to add these objectClass(es) to this entry, you must specify" +msgstr "Az új objektumosztály hozzáadásához" + + +msgid "that this objectClass requires. You can do so in this form." +msgstr "kell megadni ezen az űrlapon." + + +msgid "Add ObjectClass and Attributes" +msgstr "Objektumosztály és attribútumok hozzáadása" + + +msgid "ObjectClasses" +msgstr "Objektumosztályok" + + +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "Kattintásra egy új ablak jön föl, amelyben egy bejegyzést választhat a DN alapján." + + +msgid "You cannot perform updates while server is in read-only mode" +msgstr "Nem lehet módosítani mikor a kiszolgáló csak olvasható üzemmódban van" + + +msgid "Bad server id" +msgstr "Hibás kiszolgáló-azonosító" + + +msgid "Not enough information to login to server. Please check your configuration." +msgstr "Kevés az adat a belépéshez. Kérem ellenőrizze a konfigurációt." + + +msgid "Could not connect to LDAP server." +msgstr "Nem tudok csatlakozni az LDAP-kiszolgálóhoz." + + +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "Nem tudok csatlakozni a(z) %s géphez a(z) %s porton." + + +msgid "Could not perform ldap_mod_add operation." +msgstr "Nem tudom végrehajtani az ldap_mod_add műveletet." + + +msgid "Success" +msgstr "Siker" + + +msgid "Server: " +msgstr "Kiszolgáló: " + + +msgid "Looking in: " +msgstr "Keresés itt: " + + +msgid "No DN specified in query string!" +msgstr "Nincs megadva a DN a keresési füzérben!" + + +msgid "Back Up..." +msgstr "Vissza..." + + +msgid "no entries" +msgstr "nics bejegyzés" + + +msgid "Could not determine base DN" +msgstr "Nem tudom az alap-DN-t meghatározni" + + +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "Ez több dolog miatt történhet, például:" + + +msgid "Yes" +msgstr "Igen" + + +msgid "No" +msgstr "Nem" + + +msgid "Go" +msgstr "Mehet" + + +msgid "Delete" +msgstr "Törlés" + + +msgid "Back" +msgstr "Vissza" + + +msgid "object" +msgstr "objektum" + + +msgid "Delete all" +msgstr "Minden törlése" + + +msgid "hint" +msgstr "tipp" + + +msgid "bug" +msgstr "hiba" + + +msgid "warning" +msgstr "figyelmeztetés" + + +msgid "light" +msgstr "lámpa" + + +msgid "Proceed >>" +msgstr "Tovább >>" + + +msgid "Add new" +msgstr "Új" + + +msgid "value to" +msgstr "érték, RDN:" + + +msgid "Distinguished Name" +msgstr "Megkülönböztető név (DN)" + + +msgid "Current list of" +msgstr "Az aktuális lista" + + +msgid "values for attribute" +msgstr "értéket tartalmaz. Attribútum:" + + +msgid "Note: You will get an \"inappropriate matching\" error if you have not setup an EQUALITY rule on your LDAP server for this attribute." +msgstr "Megj.: Ha nincs beállítva EGYENLŐSÉG-szabály ehhez az attribútumhoz a kiszolgáló az ún. inappropriate matching hibát adja vissza." + + +msgid "Enter the value you would like to add:" +msgstr "Adja meg a kívánt értéket:" + + +msgid "Note: You may be required to enter new attributes that these objectClass(es) require" +msgstr "Megj.: Lehet hogy új kötelező attribútumokat kell bevinnie ehhez az objektumosztályhoz" + + +msgid "Syntax" +msgstr "Szintaxis" + + +msgid "You left the destination DN blank." +msgstr "Üresen hagyta a cél-DN mezejét" + + +msgid "The destination entry (%s) already exists." +msgstr "A célbejegyzés (%s) már létezik." + + +msgid "The destination container (%s) does not exist." +msgstr "A cél-tároló (%s) nem létezik." + + +msgid "The source and destination DN are the same." +msgstr "A forrás- és cél-DN ugyanaz." + + +msgid "Copying " +msgstr "Másolás: " + + +msgid "Recursive copy progress" +msgstr "Rekurzív másolás folyamatban" + + +msgid "Building snapshot of tree to copy... " +msgstr "A fáról készítek egy pillanatfelvételt a másoláshoz... " + + +msgid "Copy successful! Would you like to " +msgstr "A másolás sikerült! Szeretné-e " + + +msgid "view the new entry" +msgstr "megtekinteni az új bejegyzést" + + +msgid "Failed to copy DN: " +msgstr "A DN másolása nem sikerült: " + + +msgid "Template" +msgstr "Minta" + + +msgid "using template" +msgstr "használt minta:" + + +msgid "Go to %s" +msgstr "Menj a(z) %s DN-hez" + + +msgid "to a new object" +msgstr "; az új objektum" + + +msgid "Destination DN" +msgstr "Cél-DN" + + +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "A másolással létrejövő új bejegyzés teljes DN-je" + + +msgid "Destination Server" +msgstr "Célkiszolgáló" + + +msgid "Hint: Copying between different servers only works if there are no schema violations" +msgstr "Tipp: A kiszolgálók közötti másolás csak akkor működik, ha nincs séma-sértés" + + +msgid "Recursively copy all children of this object as well." +msgstr "Az objektum összes gyermekeinek rekurzív másolása." + + +msgid "Recursive copy" +msgstr "Rekurzív másolás" + + +msgid "Filter" +msgstr "Szűrő" + + +msgid "When performing a recursive copy, only copy those entries which match this filter" +msgstr "Rekurzív másolásnál csak azokat másolja le, amelyekre illik ez a szűrő" + + +msgid "You left the value blank for required attribute (%s)." +msgstr "A(z) %s kötelező attribútum értékét üresen hagyta." + + +msgid "Redirecting..." +msgstr "Átirányítás..." + + +msgid "here" +msgstr "ide" + + +msgid "Could not add the object to the LDAP server." +msgstr "Nem tudom az objektumot létrehozni a kiszolgálón." + + +msgid "Create Object" +msgstr "Objektum létrehozása" + + +msgid "Choose a template" +msgstr "Válasszon mintát" + + +msgid "Select a template for the creation process" +msgstr "Válasszon mintát a létrehozási folyamathoz" + + +msgid "You left the RDN field blank." +msgstr "Az RDN-mezőt üresen hagyta" + + +msgid "The container you specified (%s) does not exist. Please try again." +msgstr "A(z) %s tároló nem létezik. Kérem próbálja újra." + + +msgid "You did not select any ObjectClasses for this object. Please go back and do so." +msgstr "Nem választott objektumosztályt ehhez az objektumhoz. Kérem lépjen vissza és válasszon egyet." + + +msgid "Hint: You must choose exactly one structural objectClass (shown in bold above)" +msgstr "Tipp: Legalább egy strukturális objektumosztályt kell választania" + + +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "Első lépés: Név és objektumosztály(ok)" + + +msgid "Step 2 of 2: Specify attributes and values" +msgstr "Második lépés: Adja meg az attribútumokat és értékeiket" + + +msgid "Relative Distinguished Name" +msgstr "Viszonylagos megkülönböztető név (RDN)" + + +msgid "RDN" +msgstr "RDN" + + +msgid "(example: cn=MyNewPerson)" +msgstr "(példa: cn=ÚjEmber)" + + +msgid "Container" +msgstr "Tároló" + + +msgid "You have not logged into the selected server yet, so you cannot perform searches on it." +msgstr "Nem lépett be a kiválasztott kiszolgálóba, s így nem tudok keresni." + + +msgid "Click here to go to the login form" +msgstr "Kattintson ide a belépési űrlap eléréséhez" + + +msgid "Unrecognized criteria option: " +msgstr "Ismeretlen kritérium-opció: " + + +msgid "If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting." +msgstr "Ha kritériumot kíván adni a listához szerkessze meg a search.php-t, hogy kezelje le azokat. Most kilépek." + + +msgid "Entries found: " +msgstr "A megtalált bejegyzések: " + + +msgid "Filter performed: " +msgstr "Használt szűrő: " + + +msgid "Search performed by phpLDAPadmin in" +msgstr "A phpLDAPadmin" + + +msgid "seconds" +msgstr "s alatt hajtotta végre a keresést" + + +msgid "Sub (entire subtree)" +msgstr "Az egész részfa" + + +msgid "One (one level beneath base)" +msgstr "Egy szint az alap-DN alatt" + + +msgid "Base (base dn only)" +msgstr "Csak az alap-DN" + + +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "Szabványos LDAP-szűrő, pl. (&(sn=Kovács)(givenname=István))" + + +msgid "Search Filter" +msgstr "Keresőszűrő" + + +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "A megjelenítendő találatok attribútumainak vesszővel elválasztott listája" + + +msgid "equals" +msgstr "egyenlő" + + +msgid "starts with" +msgstr "kezdet" + + +msgid "contains" +msgstr "tartalmaz" + + +msgid "ends with" +msgstr "végződés" + + +msgid "sounds like" +msgstr "hangzás" + + +msgid "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE." +msgstr "Nem tudom az információt letölteni a kiszolgálóról" + + +msgid "Server info for: " +msgstr "Kiszolgáló-infó: " + + +msgid "Server reports the following information about itself" +msgstr "A kiszolgáló ezeket az információkat közölte önmagáról" + + +msgid "This server has nothing to report." +msgstr "A kiszolgálónak nincs mit elküldenie" + + +msgid "update_array is malformed. This might be a phpLDAPadmin bug. Please report it." +msgstr "Az update_array hibés. Ez a phpLDAPadmin hibája lehet, kérem jelentse." + + +msgid "Could not perform ldap_modify operation." +msgstr "Nem tudom elvégezni az ldap_modify műveletet." + + +msgid "Do you want to make these changes?" +msgstr "Érvényesíteni kívánja a változásokat?" + + +msgid "Attribute" +msgstr "Attribútumok" + + +msgid "Old Value" +msgstr "Régi érték" + + +msgid "New Value" +msgstr "Új érték" + + +msgid "[attribute deleted]" +msgstr "[attribútum törölve]" + + +msgid "Commit" +msgstr "Érvényesítés" + + +msgid "Cancel" +msgstr "Mégsem" + + +msgid "You made no changes" +msgstr "Nem történt változtatás" + + +msgid "Use the menu to the left to navigate" +msgstr "A bal oldali menüvel tájékozódhat a programban" + + +msgid "Credits" +msgstr "Köszönetnyilvánítás" + + +msgid "ChangeLog" +msgstr "Változtatások naplója" + + +msgid "Donate" +msgstr "Adományozzon" + + +msgid "Unsafe file name: " +msgstr "Nem biztonságos állománynév: " + + +msgid "No such file: " +msgstr "Nincs ilyen állomány: " + + +msgid "You have enabled auto_uid_numbers for %s in your configuration," +" but you have not specified the auto_uid_number_mechanism. Please correct" +" this problem." +msgstr "Az auto_uid_numbers engedélyezett a konfigurációban a(z) %s kiszolgálóhoz, de az auto_uid_number_mechanism nincs megadva. Kérem írja be ezt az értéket." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"uidpool\"" +" in your configuration for server %s, but you did not specify the" +" audo_uid_number_uid_pool_dn. Please specify it before proceeding." +msgstr "A konfigurációban az auto_uid_number_mechanism értéke uidpool a(z) %s kiszolgálóhoz, de nem adta meg az auto_uid_number_uid_pool_dn értékét. Kérem írja be ezt az értéket." + + +msgid "It appears that the uidPool you specified in your configuration (\"%s\")" +" does not exist." +msgstr "A konfigurációban megadott uidPool nem létezik (%s)." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"search\" in your" +" configuration for server %s, but you did not specify the" +" \"auto_uid_number_search_base\". Please specify it before proceeding." +msgstr "A konfigurációban az auto_uid_number_mechanism értéke search a(z) %s kiszolgálóhoz, de nem adta meg az auto_uid_number_search_base értékét. Kérem írja be ezt az értéket." + + +msgid "Unable to bind to %s with your with auto_uid credentials. Please check your configuration file." +msgstr "A bind művelet sikertelen a(z) %s kiszolgálóhoz az auto_uid használatával. Kérem ellenőrizze a konfigurációt. " + + +msgid "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s" +msgstr "A konfigurációban érvénytelen auto_uid_search_base van megadva a(z) %s kiszolgálóhoz." + + +msgid "You specified an invalid value for auto_uid_number_mechanism (\"%s\")" +" in your configration. Only \"uidpool\" and \"search\" are valid." +" Please correct this problem." +msgstr "Érvénytelen értéket adott meg a auto_uid_number_mechanism-nak (%s). Csak uidpool és search a megengedett érték." + + +msgid "Error: You have an error in your config file. The only three allowed values" +" for auth_type in the $servers section are 'session', 'cookie', and 'config'. You entered '%s'," +" which is not allowed. " +msgstr "Csak a session, cookie és config a megengedett értékek az auth_type-nak a konfigurációban. A megadott helytelen érték: %s." + + +msgid "Your PHP install does not support TLS." +msgstr "Ez a PHP nem támogatja a TLS-t." + + +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "Nem tudom a TLS-t elindítani. Kérem ellenőrizze az LDAP-kiszolgálót és a konfigurációt." + + +msgid "Could not bind anonymously to server." +msgstr "Az anonymous bind művelet nem sikerült." + + +msgid "Could not bind to the LDAP server." +msgstr "A bind művelet sikertelen az LDAP-kiszolgálóhoz." + + +msgid "Anonymous Bind" +msgstr "Anonymous bind" + + +msgid "Bad username or password. Please try again." +msgstr "Helytelen felhasználónév vagy jelszó. Kérem próbálja újra." + + +msgid "Successfully logged into server %s" +msgstr "A(z) %s kiszolgálóhoz sikeresen bejelentkezett." + + +msgid "Could not set cookie." +msgstr "Nem tudok sütit beállítani." + + +msgid "LDAP said: %s" +msgstr "Az LDAP ezt mondta: %s" + + +msgid "Error" +msgstr "Hiba" + + +msgid "browse" +msgstr "böngészés" + + +msgid "Delete Photo" +msgstr "Fotó törlése" + + +msgid "Your system crypt library does not support blowfish encryption." +msgstr "Ez a PHP nem támogatja a blowfish titkosítást." + + +msgid "Your system crypt library does not support md5crypt encryption." +msgstr "Ez a PHP nem támogatja az md5crypt titkosítást." + + +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "Ez a PHP nem tartalmazza az mhash() függvényt. Nem tudok SHA hash-eket kezelni." + + +msgid "jpegPhoto contains errors
" +msgstr "A jpegPhoto hibás
" + + +msgid "Error number: %s (%s)" +msgstr "Hibaszám: %s (%s)" + + +msgid "Description: %s

" +msgstr "Leírás: %s

" + + +msgid "Error number: %s

" +msgstr "Hibaszám: %s

" + + +msgid "Description: (no description available)
" +msgstr "Leírás: (nincs leírás)
" + + +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "Ez a phpLDAPadmin hibája? Ha igen, kérem jelentse." + + +msgid "Unrecognized error number: " +msgstr "Ismeretlen hibaszám: " + + +msgid "
" +" " +" " +" " +"
" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
Please check and see if this bug has been reported here.
If it hasnt been reported, you may report this bug by clicking here.

" +msgstr "
" +"
" +" Egy kisebb hibát talált a phpLDAPadmin-ban!
Hiba:%s (%s)
Állomány:%s. sor %s, hívó %s
Verziók:PLA: %s, PHP: %s, SAPI: %s" +"
Web-kiszolgáló:%s
" +" Kérem jelentse a hibát, kattintson ide!.

" + + +msgid "Congratulations! You found a bug in phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Please report this bug by clicking below!" +msgstr "Gratulálunk! Hibát talált a phpLDAPadmin-ban.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Hiba:%s
Szint:%s
Állomány:%s
Sor:%s
Hívó:%s
PLA Verzió:%s
PHP Verzió:%s
PHP SAPI:%s
Web-kiszolgáló:%s
" +"
" +" Kérjük jelentse a hibát, kattintson alulra!" + + +msgid "Import LDIF File" +msgstr "LDIF-állomány importálása" + + +msgid "Select an LDIF file:" +msgstr "LDIF-állomány kiválasztása" + + +msgid "Don't stop on errors" +msgstr "Ne állj meg hiba esetén" + + +msgid "Adding..." +msgstr "Hozzáadás..." + + +msgid "Deleting..." +msgstr "Törlés..." + + +msgid "Modifying..." +msgstr "Módosítás..." + + +msgid "No version found. Assuming 1." +msgstr "Nem találtam verziószámot, feltételeztem, hogy 1-es." + + +msgid "A valid dn line is required." +msgstr "Érvényes DN-sor kell." + + +msgid "Missing uploaded file." +msgstr "A feltöltött állomány hiányzik." + + +msgid "Uploaded LDIF file is empty." +msgstr "A feltöltött LDIF-állomány üres." + + +msgid "empty" +msgstr "üres" + + +msgid "File" +msgstr "Állomány" + + +msgid "%s bytes" +msgstr "%s byte" + + +msgid "Failed" +msgstr "Sikertelen" + + +msgid "LDIF Parse Error" +msgstr "LDIF-pásztázási hiba" + + +msgid "Could not add object:" +msgstr "Nem tudom ezt az objektumot hozzáadni:" + + +msgid "Could not rename object:" +msgstr "Nem tudom ezt az objektumot átnevezni:" + + +msgid "Could not delete object:" +msgstr "Nem tudom ezt az objektumot törölni:" + + +msgid "Could not modify object:" +msgstr "Nem tudom ezt az objektumot módosítani:" + + +msgid "Line Number:" +msgstr "Sorszám:" + + +msgid "Line:" +msgstr "Sor:" + + +msgid "Export format" +msgstr "Export-formátum" + + +msgid "Line ends" +msgstr "Sorvégek" + + +msgid "You must choose an export format." +msgstr "Az export formátumát ki kell választani." + + +msgid "Invalid export format" +msgstr "Az export formátuma érvénytelen" + + +msgid "No available exporter found." +msgstr "Nincs használható exportáló." + + +msgid "Encountered an error while performing search." +msgstr "Keresés közben hibába akadtam." + + +msgid "Showing results %s through %s." +msgstr "A(z) %s és %s közé eső találatok megjelenítése." + + +msgid "Searching..." +msgstr "Folyik a keresés..." + + +msgid "Notice, search size limit exceeded." +msgstr "Figyelem: a keresési méret korlátja túllépve." + + +msgid "Entry" +msgstr "Bejegyzés" + + +msgid "LDIF Export for: %s" +msgstr "A(z) %s LDIF exportja" + + +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "A phpLDAPadmin generálta, dátum: %s" + + +msgid "Total Entries" +msgstr "Bejegyzések száma összesen" + + +msgid "DSLM Export for: %s" +msgstr "A(z) %s DSLM exportja" + + +msgid "You left the password blank." +msgstr "A jelszó üresen maradt." + + +msgid "No one is logged in to that server." +msgstr "Arra a kiszolgálóra nincs bejelentkezve senki." + + +msgid "Could not logout." +msgstr "Nem sikerült kilépni." + + +msgid "Unknown auth_type: %s" +msgstr "Ismeretlen auth_type: %s" + + +msgid "Logged out successfully from server %s" +msgstr "A kilépés sikerült a(z) %s kiszolgálóból" + + +msgid "Authenticate to server %s" +msgstr "Azonosítsa magát a(z) %s kiszolgálón" + + +msgid "Warning: This web connection is unencrypted." +msgstr "Figyelem: A kapcsolat a bögészővel titkosítatlan." + + +msgid "You are not using 'https'. Web browser will transmit login information in clear text." +msgstr "Nem https kapcsolatot használ. A böngésző a bejelentkezés adatait sima szöveg formátumban fogja továbbítani" + + +msgid "Login DN" +msgstr "Bejelentkezési DN" + + +msgid "User name" +msgstr "A felhasználó neve" + + +msgid "Password" +msgstr "Jelszó" + + +msgid "Authenticate" +msgstr "Azonosítás" + + +msgid "Entry Chooser" +msgstr "Bejegyzés kiválasztása" + + +msgid "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do so. An example config file is provided in 'config/config.php.example'" +msgstr "Konfigurálnia kell a phpLDAPadmint a config.php állomány szerkesztésével, amihez mintául a config.php.example szolgálhat." + + +msgid "Deletes not allowed in read only mode." +msgstr "Csak olvasható üzemmódban a törlés nem működik." + + +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "Hiba a mass_delete.php hívásakor. A POST változók közül hiányzik a mass_delete." + + +msgid "mass_delete POST var is not an array." +msgstr "A mass_delete POST változó nem tömb." + + +msgid "Mass deletion is not enabled. Please enable it in config.php before proceeding." +msgstr "A tömeges törlés nincs engedélyezve. Mielőtt folytatná, állítsa át az enable_mass_delete értékét config.php állományban." + + +msgid "Mass Deleting" +msgstr "Tömeges törlés" + + +msgid "Deletion progress on server \"%s\"" +msgstr "A törlési művelet a(z) %s kiszolgálón" + + +msgid "Malformed mass_delete array." +msgstr "A tömeges törléshez megadott tömb formátuma helytelen" + + +msgid "You did not select any entries to delete." +msgstr "Nem választotta ki a törlendő bejegyzés(eke)t. " + + +msgid "Deleting %s" +msgstr "%s törölve" + + +msgid "%s of %s entries failed to be deleted." +msgstr "%s darab bejegyzés törlése nem sikerült a(z) %s darabból." + + +msgid "All entries deleted successfully." +msgstr "Az összes bejegyzés törlése sikerült." + + +msgid "Confirm mass delete of %s entries on server %s" +msgstr "Hagyja jóvá a(z) %s bejegyzés tömeges törlését a(z) %s kiszolgálóról" + + +msgid "Yes, delete!" +msgstr "Igen, törlődjön" + + +msgid "You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)" +msgstr "Nem nevezhet át olyan bejegyzést aminek gyermekei vannak (azaz az átnevezés művelete csak levél-bejegyzéseken megengedett)" + + +msgid "You did not change the RDN" +msgstr "Nem változtatta meg az RDN-t" + + +msgid "Invalid RDN value" +msgstr "Érvénytelen RDN érték" + + +msgid "Could not rename the entry" +msgstr "A bejegyzést nem sikerült átnevezni" + -#~ msgid "Deletes not allowed in read only mode." -#~ msgstr "Csak olvasható üzemmódban a törlés nem működik." diff --git a/locale/it_IT/LC_MESSAGES/messages.mo b/locale/it_IT/LC_MESSAGES/messages.mo index 5d55619584a277c4310a87cabb11b057760c0890..88d19ac1a79c9b37c707fb1bd05fe43a5e342456 100644 GIT binary patch delta 11532 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 diff --git a/locale/it_IT/LC_MESSAGES/messages.po b/locale/it_IT/LC_MESSAGES/messages.po index bfbb6b1..4b38f01 100644 --- a/locale/it_IT/LC_MESSAGES/messages.po +++ b/locale/it_IT/LC_MESSAGES/messages.po @@ -4,14 +4,12 @@ msgstr "" "Project-Id-Version: phpldapadmin messages\n" "Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sf.net\n" "POT-Creation-Date: 2004-01-14 17:45+0200\n" -"PO-Revision-Date: 2008-11-28 19:45+0000\n" -"Last-Translator: Luca Livraghi \n" +"PO-Revision-Date: 2008-01-22 15:04+0100\n" +"Last-Translator: Fabio Pedretti \n" "Language-Team: phpLDAPadmin \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-11-29 23:48+0000\n" -"X-Generator: Launchpad (build Unknown)\n" #: ../../htdocs/mass_delete.php:86 #, php-format @@ -22,7 +20,7 @@ msgstr "Impossibile eliminare %s di %s voci." msgid "(" msgstr "(" -#: ../../lib/HTMLTree.php:486 +#: ../../lib/HTMLTree.php:481 msgid "(Session timed out. Automatically logged out.)" msgstr "(Sessione scaduta. Disconnesso automaticamente.)" @@ -30,43 +28,39 @@ msgstr "(Sessione scaduta. Disconnesso automaticamente.)" msgid ")" msgstr ")" -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 +#: ../../htdocs/add_attr.php:25 ../../htdocs/add_value.php:24 +#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value_form.php:78 +#: ../../htdocs/add_value_form.php:104 ../../htdocs/copy.php:20 +#: ../../htdocs/copy.php:76 ../../htdocs/create.php:25 +#: ../../htdocs/create.php:114 ../../htdocs/delete.php:21 +#: ../../htdocs/delete_attr.php:21 ../../htdocs/export.php:18 +#: ../../htdocs/ldif_import.php:19 ../../htdocs/mass_delete.php:26 +#: ../../htdocs/purge_cache.php:13 ../../htdocs/rdelete.php:21 +#: ../../htdocs/refresh.php:17 ../../htdocs/rename.php:24 +#: ../../htdocs/schema.php:20 ../../htdocs/search.php:120 +#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 +#: ../../htdocs/search.php:265 ../../htdocs/search.php:276 +#: ../../htdocs/search.php:295 ../../htdocs/search.php:299 +#: ../../htdocs/server_info.php:16 ../../htdocs/update.php:61 +#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 +#: ../../htdocs/update_confirm.php:316 ../../htdocs/update_confirm.php:321 +#: ../../htdocs/view_jpeg_photo.php:25 ../../lib/EntryWriter1.php:247 #: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 #: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 #: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 +#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1260 +#: ../../lib/EntryWriter1.php:1429 ../../lib/EntryWriter1.php:2452 #: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 +#: ../../lib/HTMLTree.php:274 ../../lib/page.php:200 msgid ":" msgstr ":" -#: ../../lib/search_form_advanced.php:103 +#: ../../lib/search_form_advanced.php:102 msgid "A list of attributes to display in the results (comma-separated)" msgstr "" "Una lista di attributi da visualizzare nei risultati (separati da virgole)" -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 +#: ../../lib/EntryWriter1.php:2452 ../../lib/template_functions.php:962 msgid "A random password was generated for you" msgstr "E' stata generata una password casuale" @@ -82,46 +76,46 @@ msgstr "E' richiesta una corretta riga dn." msgid "A valid newrdn attribute should be specified" msgstr "Deve essere specificato un corretto attributo newrdn" -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 +#: ../../htdocs/add_attr_form.php:103 ../../htdocs/add_attr_form.php:147 +#: ../../lib/EntryWriter1.php:789 msgid "Add" msgstr "Aggiungi" -#: ../../htdocs/add_value_form.php:182 +#: ../../htdocs/add_value_form.php:240 msgid "Add New Value" msgstr "Aggiungi Nuovo Valore" -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 +#: ../../htdocs/add_oclass_form.php:104 ../../htdocs/compare.php:526 msgid "Add ObjectClass and Attributes" msgstr "Aggiungi ObjectClass e Attributi" -#: ../../htdocs/modify_member_form.php:145 +#: ../../htdocs/modify_member_form.php:144 msgid "Add all" msgstr "Aggiungi tutto" -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 +#: ../../htdocs/compare.php:537 ../../lib/EntryWriter1.php:1835 #, php-format msgid "Add an additional value to attribute '%s'" msgstr "Aggiungi un'altro valore all'attributo '%s'" -#: ../../htdocs/add_value_form.php:93 +#: ../../htdocs/add_value_form.php:98 msgid "Add new" msgstr "Aggiungi nuovo" -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 +#: ../../htdocs/add_value_form.php:196 ../../htdocs/compare.php:528 msgid "Add new ObjectClass" msgstr "Aggiungi nuovo ObjectClass" -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 +#: ../../htdocs/add_attr_form.php:23 ../../htdocs/add_attr_form.php:71 +#: ../../lib/EntryWriter1.php:789 msgid "Add new attribute" msgstr "Aggiungi un nuovo attributo" -#: ../../htdocs/add_attr_form.php:114 +#: ../../htdocs/add_attr_form.php:113 msgid "Add new binary attribute" msgstr "Aggiungi un nuovo attributo binario" -#: ../../htdocs/modify_member_form.php:145 +#: ../../htdocs/modify_member_form.php:144 msgid "Add selected" msgstr "Aggiungi selezionato/i" @@ -129,16 +123,16 @@ msgstr "Aggiungi selezionato/i" msgid "Adding..." msgstr "In aggiunta..." -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 +#: ../../lib/search_form_advanced.php:32 +#: ../../lib/search_form_predefined.php:33 ../../lib/search_form_simple.php:34 msgid "Advanced Search Form" msgstr "Modulo di Ricerca Avanzato" -#: ../../lib/config_default.php:646 +#: ../../lib/config_default.php:634 msgid "Alias for" msgstr "Alias per" -#: ../../htdocs/schema.php:110 +#: ../../htdocs/schema.php:108 msgid "Aliases" msgstr "Alias" @@ -167,14 +161,10 @@ msgstr "Bind Anonimo" msgid "Are you sure you want to permanently delete this object?" msgstr "Sei sicuro di voler permanentemente eliminare questo oggetto?" -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 +#: ../../htdocs/compare.php:53 ../../htdocs/update_confirm.php:202 msgid "Attribute" msgstr "Attributo" -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "" - #: ../../lib/ldif_functions.php:455 msgid "Attribute is not valid" msgstr "L'attributo non è valido" @@ -187,15 +177,15 @@ msgstr "Attributo malformato" msgid "Authenticate" msgstr "Autentica" -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 #: ../../htdocs/login.php:26 ../../htdocs/login.php:91 #: ../../htdocs/login.php:116 ../../htdocs/login.php:136 #: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 +#: ../../htdocs/login_form.php:19 ../../lib/HTMLTree.php:90 +#: ../../lib/server_functions.php:2426 msgid "Authenticate to server" msgstr "Autentica sul server" -#: ../../htdocs/modify_member_form.php:114 +#: ../../htdocs/modify_member_form.php:113 msgid "Available members" msgstr "Membri disponibili" @@ -203,21 +193,21 @@ msgstr "Membri disponibili" msgid "Back Up..." msgstr "Back Up..." -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 #: ../../htdocs/login.php:92 ../../htdocs/login.php:144 +#: ../../lib/server_functions.php:339 ../../lib/server_functions.php:2427 msgid "Bad username or password. Please try again." msgstr "Nome utente o password errati. Riprova." -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 +#: ../../htdocs/export_form.php:31 ../../lib/search_form_advanced.php:89 msgid "Base (base dn only)" msgstr "Base (solo base dn)" -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 +#: ../../htdocs/export_form.php:52 ../../htdocs/search.php:295 +#: ../../lib/search_form_advanced.php:63 msgid "Base DN" msgstr "DN Base" -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 +#: ../../htdocs/compare.php:274 ../../lib/EntryWriter1.php:1979 msgid "Binary value" msgstr "Valore binario" @@ -229,24 +219,24 @@ msgstr "Istantanea dell'albero da copiare in costruzione... " msgid "CSV (Spreadsheet)" msgstr "CSV (Foglio di calcolo)" -#: ../../lib/functions.php:63 +#: ../../lib/functions.php:65 msgid "Called to load a class that cant be found" msgstr "Richiesta l'esecuzione di una classe che non può essere trovata" -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 +#: ../../htdocs/delete_form.php:77 ../../htdocs/delete_form.php:127 +#: ../../htdocs/update_confirm.php:307 msgid "Cancel" msgstr "Annulla" -#: ../../htdocs/compare.php:343 +#: ../../htdocs/compare.php:381 msgid "Check password" msgstr "Verifica password" -#: ../../lib/EntryWriter1.php:2427 +#: ../../lib/EntryWriter1.php:2416 msgid "Check password..." msgstr "Verifica password..." -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 +#: ../../lib/EntryReader.php:359 ../../lib/EntryReader.php:381 msgid "Checking passwords" msgstr "Verifica password" @@ -254,36 +244,36 @@ msgstr "Verifica password" msgid "Children" msgstr "Figli" -#: ../../lib/functions.php:3223 +#: ../../lib/functions.php:3208 msgid "Click to popup a dialog to select a date graphically" msgstr "" "Clicca per aprire una finestra di dialogo per la selezione grafica di una " "data" -#: ../../lib/functions.php:2239 +#: ../../lib/functions.php:2226 msgid "Click to popup a dialog to select an entry (DN) graphically" msgstr "" "Clicca per aprire una finestra di dialogo per la selezione grafica di una " "voce (DN)" -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 +#: ../../htdocs/compare.php:160 ../../htdocs/server_info.php:83 +#: ../../lib/EntryWriter1.php:1901 #, php-format msgid "Click to view the schema definition for attribute type '%s'" msgstr "" "Clicca per visualizzare la definizione dello schema per il tipo di attributo " "'%s'" -#: ../../htdocs/schema.php:106 +#: ../../htdocs/schema.php:104 msgid "Collective" msgstr "Collettivo" -#: ../../htdocs/update_confirm.php:303 +#: ../../htdocs/update_confirm.php:304 msgid "Commit" msgstr "Invia" -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 #: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 +#: ../../htdocs/password_checker.php:33 ../../lib/EntryWriter1.php:775 msgid "Compare" msgstr "Confronta" @@ -299,7 +289,7 @@ msgstr "Confronta questo DN con un altro" msgid "Compare with another entry" msgstr "Confronta con un'altra voce" -#: ../../htdocs/compare.php:42 +#: ../../htdocs/compare.php:48 msgid "Comparing the following DNs" msgstr "Confronta i seguenti DN" @@ -361,7 +351,7 @@ msgstr "In copia " msgid "Could not add object:" msgstr "Impossibile aggiungere l'oggetto:" -#: ../../htdocs/create.php:133 +#: ../../htdocs/create.php:132 msgid "Could not add the object to the LDAP server." msgstr "Impossibile aggiungere l'oggetto al server LDAP." @@ -369,17 +359,17 @@ msgstr "Impossibile aggiungere l'oggetto al server LDAP." msgid "Could not bind anonymously to server." msgstr "Impossibile collegarsi anonimamente al server LDAP." -#: ../../lib/server_functions.php:350 +#: ../../lib/server_functions.php:348 #, php-format msgid "Could not bind to the LDAP server (%s)." msgstr "Impossibile collegarsi al server LDAP (%s)." -#: ../../lib/server_functions.php:347 +#: ../../lib/server_functions.php:345 #, php-format msgid "Could not connect to \"%s\" on port \"%s\"" msgstr "Impossibile collegarsi a \"%s\" sulla porta \"%s\"" -#: ../../lib/HTMLTree.php:96 +#: ../../lib/HTMLTree.php:91 msgid "Could not connect to LDAP server" msgstr "Impossibile collegarsi al server LDAP." @@ -397,16 +387,16 @@ msgstr "Impossibile eliminare la voce: %s" msgid "Could not determine base DN" msgstr "Impossibile determinare la DN di base." -#: ../../lib/HTMLTree.php:82 +#: ../../lib/HTMLTree.php:78 msgid "Could not determine the root of your LDAP tree." msgstr "Impossibile determinare la radice del tuo albero LDAP." -#: ../../lib/functions.php:1849 +#: ../../lib/functions.php:1836 #, php-format msgid "Could not fetch jpeg data from LDAP server for attribute %s." msgstr "Impossibile recuperare dati jpeg dal server LDAP per l'attributo %s." -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 +#: ../../htdocs/logout.php:24 ../../lib/timeout_functions.php:74 msgid "Could not logout." msgstr "Impossibile uscire." @@ -418,7 +408,7 @@ msgstr "Impossibile modificare l'oggetto:" msgid "Could not perform ldap_mod_add operation." msgstr "Impossibile eseguire l'operazione ldap_mod_add." -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 +#: ../../htdocs/delete_attr.php:50 ../../htdocs/update.php:178 msgid "Could not perform ldap_modify operation." msgstr "Impossibile eseguire l'operazione ldap_modify." @@ -426,7 +416,7 @@ msgstr "Impossibile eseguire l'operazione ldap_modify." msgid "Could not rename object:" msgstr "Impossibile rinominare l'oggetto:" -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 +#: ../../htdocs/rename.php:61 ../../lib/server_functions.php:1522 msgid "Could not rename the entry" msgstr "Impossibile rinominare la voce" @@ -438,12 +428,12 @@ msgstr "Impossibile recuperare lo schema per" msgid "Could not set cookie." msgstr "Impossibile impostare un cookie." -#: ../../lib/server_functions.php:265 +#: ../../lib/server_functions.php:263 msgid "Could not start TLS. Please check your LDAP server configuration." msgstr "" "Impossibile utilizzare TLS. Controlla la configurazione del server LDAP." -#: ../../lib/functions.php:1864 +#: ../../lib/functions.php:1851 #, php-format msgid "" "Could not write to the $jpeg_temp_dir directory %s. Please verify that your " @@ -456,7 +446,7 @@ msgstr "" msgid "Create" msgstr "Crea" -#: ../../htdocs/create.php:118 +#: ../../htdocs/create.php:117 msgid "Create Entry" msgstr "Crea la Voce" @@ -469,26 +459,26 @@ msgstr "Crea l'Oggetto" msgid "Create a child entry" msgstr "Crea una voce figlia" -#: ../../lib/HTMLTree.php:463 +#: ../../lib/HTMLTree.php:458 msgid "Create a new entry in" msgstr "Crea una nuova voce in" -#: ../../htdocs/create.php:128 +#: ../../htdocs/create.php:127 msgid "Create another entry" msgstr "Crea un'altra voce" -#: ../../lib/HTMLTree.php:70 +#: ../../lib/HTMLTree.php:66 msgid "Create it?" msgstr "Crearla?" -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 +#: ../../lib/AJAXTree.php:343 ../../lib/AJAXTree.php:344 +#: ../../lib/AJAXTree.php:367 ../../lib/AJAXTree.php:368 +#: ../../lib/HTMLTree.php:458 ../../lib/PLMTree.php:142 +#: ../../lib/PLMTree.php:162 msgid "Create new entry here" msgstr "Crea qui una nuova voce" -#: ../../htdocs/create.php:115 +#: ../../htdocs/create.php:114 msgid "Creation successful!" msgstr "Creazione eseguita!" @@ -496,7 +486,7 @@ msgstr "Creazione eseguita!" msgid "Credits" msgstr "Riconoscimenti" -#: ../../htdocs/add_value_form.php:112 +#: ../../htdocs/add_value_form.php:104 msgid "Current list of" msgstr "Lista corrente di" @@ -508,7 +498,7 @@ msgstr "Taglia" msgid "DN" msgstr "DN" -#: ../../lib/EntryWriter1.php:1886 +#: ../../lib/EntryWriter1.php:1874 msgid "DN not available" msgstr "DN non disponibile" @@ -517,7 +507,7 @@ msgstr "DN non disponibile" msgid "DSLM Export for: %s" msgstr "Esportazione DSLM per: %s" -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 +#: ../../lib/EntryWriter1.php:1098 ../../lib/EntryWriter1.php:1310 msgid "Default" msgstr "Predefinito" @@ -530,7 +520,7 @@ msgstr "Elimina" msgid "Delete %s" msgstr "Elimina %s" -#: ../../lib/HTMLTree.php:139 +#: ../../lib/HTMLTree.php:134 msgid "Delete Checked Entries" msgstr "Elimina le Voci Selezionate" @@ -538,7 +528,7 @@ msgstr "Elimina le Voci Selezionate" msgid "Delete DN" msgstr "Elimina DN" -#: ../../lib/functions.php:1871 +#: ../../lib/functions.php:1858 msgid "Delete Photo" msgstr "Elimina Foto" @@ -551,7 +541,7 @@ msgstr "Elimina dopo la copia (sposta):" msgid "Delete all %s objects" msgstr "Elimina tutti gli oggetti %s" -#: ../../lib/functions.php:1906 +#: ../../lib/functions.php:1893 msgid "Delete photo" msgstr "Elimina foto" @@ -577,11 +567,11 @@ msgstr "Eliminazione..." msgid "Deletion progress on server \"%s\"" msgstr "Eliminazione in corso sul server \"%s\"" -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 +#: ../../htdocs/add_value_form.php:230 ../../htdocs/ldif_import.php:110 +#: ../../htdocs/ldif_import.php:120 ../../htdocs/ldif_import.php:190 +#: ../../htdocs/schema.php:69 ../../htdocs/schema.php:96 +#: ../../htdocs/schema.php:403 ../../lib/functions.php:1777 +#: ../../lib/functions.php:1780 msgid "Description" msgstr "Descrizione" @@ -597,16 +587,16 @@ msgstr "Server di destinazione" msgid "Destination server is currently READ-ONLY." msgstr "Il server di destinazione è al momento in SOLA-LETTURA" -#: ../../htdocs/create.php:126 +#: ../../htdocs/create.php:125 msgid "Display the new created entry" msgstr "Visualizza le nuove voci create" -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 +#: ../../htdocs/add_attr_form.php:25 ../../htdocs/add_value_form.php:100 +#: ../../htdocs/compare.php:56 ../../htdocs/compare.php:59 +#: ../../htdocs/compare_form.php:24 ../../htdocs/copy_form.php:47 #: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 +#: ../../htdocs/modify_member_form.php:72 ../../htdocs/rename_form.php:29 +#: ../../lib/EntryWriter1.php:512 msgid "Distinguished Name" msgstr "Distinguished Name" @@ -623,19 +613,19 @@ msgstr "Si vogliono effettuare le seguenti modifiche?" msgid "Documentation" msgstr "Documentazione" -#: ../../htdocs/ldif_import_form.php:44 +#: ../../htdocs/ldif_import_form.php:33 ../../htdocs/ldif_import_form.php:44 msgid "Don't stop on errors" msgstr "Non interrompere in caso di errori" -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 +#: ../../htdocs/welcome.php:35 ../../lib/functions.php:371 msgid "Donate" msgstr "Dona" -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 +#: ../../htdocs/search.php:250 ../../lib/export_functions.php:252 msgid "Encountered an error while performing search." msgstr "Si è verificato un errore nell'esecuzione della ricerca." -#: ../../htdocs/add_value_form.php:135 +#: ../../htdocs/add_value_form.php:178 msgid "Enter the value you would like to add:" msgstr "Inserisci il valore che si desidera aggiungere:" @@ -656,15 +646,15 @@ msgstr "Voce %s e sotto-albero eliminati con successo." msgid "Entry Chooser" msgstr "Selezionatore di Voci" -#: ../../htdocs/create.php:123 +#: ../../htdocs/create.php:122 msgid "Entry created" msgstr "Voce creata" -#: ../../htdocs/schema.php:101 +#: ../../htdocs/schema.php:99 msgid "Equality" msgstr "Uguaglianza" -#: ../../lib/functions.php:130 ../../lib/functions.php:513 +#: ../../lib/functions.php:132 ../../lib/functions.php:520 msgid "Error" msgstr "Errore" @@ -677,8 +667,8 @@ msgstr "" msgid "Error code" msgstr "Codice d'errore" -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 +#: ../../lib/functions.php:1776 ../../lib/functions.php:1779 +#: ../../lib/functions.php:1785 msgid "Error number" msgstr "Numero d'errore" @@ -693,12 +683,12 @@ msgstr "" "per il parametro auth_type nella sezione $servers sono 'session', 'cookie' e " "'config'. Il valore inserito '%s' non è permesso." -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 +#: ../../htdocs/export_form.php:36 ../../htdocs/export_form.php:46 +#: ../../lib/EntryWriter1.php:733 msgid "Export" msgstr "Esporta" -#: ../../lib/HTMLTree.php:264 +#: ../../lib/HTMLTree.php:259 msgid "Export entries" msgstr "Esporta le voci" @@ -710,9 +700,9 @@ msgstr "Formato d'esportazione" msgid "Export subtree" msgstr "Esporta sottoalbero" -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 +#: ../../htdocs/ldif_import.php:103 ../../htdocs/ldif_import.php:116 +#: ../../htdocs/ldif_import.php:139 ../../htdocs/ldif_import.php:162 +#: ../../htdocs/mass_delete.php:73 msgid "Failed" msgstr "Fallito" @@ -729,8 +719,8 @@ msgstr "Impossibile copiare: " msgid "Failed to delete entry %s" msgstr "Impossibile eliminare la voce %s" -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 +#: ../../htdocs/ldif_import.php:54 ../../lib/functions.php:134 +#: ../../lib/functions.php:537 msgid "File" msgstr "File" @@ -742,15 +732,11 @@ msgstr "Filtro" msgid "Filter performed" msgstr "Filtro eseguito" -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - #: ../../htdocs/search.php:276 msgid "Format" msgstr "Formato" -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 +#: ../../lib/functions.php:540 msgid "Function" msgstr "Funzione" @@ -761,33 +747,33 @@ msgid "" msgstr "" "Generato da phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) su %s" -#: ../../lib/functions.php:61 ../../lib/functions.php:598 +#: ../../lib/functions.php:63 ../../lib/functions.php:594 msgid "Generic Error" msgstr "Errore Generico" -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 +#: ../../htdocs/schema.php:131 ../../htdocs/schema.php:311 +#: ../../htdocs/schema.php:357 ../../htdocs/schema.php:388 msgid "Go" msgstr "Vai" -#: ../../htdocs/update_confirm.php:330 +#: ../../htdocs/update_confirm.php:339 msgid "Go back" msgstr "Torna indietro" -#: ../../lib/EntryWriter1.php:1882 +#: ../../lib/EntryWriter1.php:1870 msgid "Go to" msgstr "Vai a" -#: ../../htdocs/compare.php:403 +#: ../../htdocs/compare.php:449 #, php-format msgid "Go to %s" msgstr "Vai a %s" -#: ../../htdocs/modify_member_form.php:115 +#: ../../htdocs/modify_member_form.php:114 msgid "Group members" msgstr "Membri del gruppo" -#: ../../lib/functions.php:359 +#: ../../lib/functions.php:375 msgid "Help" msgstr "Aiuto" @@ -830,7 +816,7 @@ msgstr "" "E' necessario scegliere esattamente un objectClass stutturale (mostrato " "sopra in grassetto)" -#: ../../lib/functions.php:347 +#: ../../lib/functions.php:363 msgid "Home" msgstr "Inizio" @@ -847,11 +833,11 @@ msgstr "" "Se si desidera aggiungere i propri criteri alla lista. Assicurarsi di " "modificare search.php per gestirli. Esco." -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 +#: ../../htdocs/ldif_import.php:51 ../../htdocs/ldif_import_form.php:21 msgid "Import LDIF File" msgstr "Importa file LDIF" -#: ../../lib/HTMLTree.php:256 +#: ../../lib/HTMLTree.php:251 msgid "Import entries from an LDIF file" msgstr "Importa voci da un file LDIF" @@ -859,7 +845,7 @@ msgstr "Importa voci da un file LDIF" msgid "In order to add these objectClass(es) to this entry, you must specify" msgstr "Per aggiungere questa/e objectClass a questa voce, devi specificare" -#: ../../lib/HTMLTree.php:161 +#: ../../lib/HTMLTree.php:156 #, php-format msgid "Inactivity will log you off at %s" msgstr "L'inattività ti disconnetterà alle %s" @@ -868,15 +854,11 @@ msgstr "L'inattività ti disconnetterà alle %s" msgid "Include system attributes" msgstr "Includi gli attributi di sistema" -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 +#: ../../htdocs/schema.php:462 ../../htdocs/schema.php:485 msgid "Inherited from" msgstr "Ereditato da" -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 +#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 msgid "Inherits from" msgstr "Eredita da" @@ -884,7 +866,7 @@ msgstr "Eredita da" msgid "Instructions" msgstr "Istruzioni" -#: ../../lib/server_functions.php:344 +#: ../../lib/server_functions.php:342 msgid "Insufficient access rights." msgstr "Permessi di accesso insufficienti." @@ -900,14 +882,14 @@ msgstr "Formato di esportazione non valido" msgid "Is this a phpLDAPadmin bug?" msgstr "E' un baco di phpLDAPadmin?" -#: ../../lib/HTMLTree.php:83 +#: ../../lib/HTMLTree.php:79 msgid "" "It appears that the LDAP server has been configured to not reveal its root." msgstr "" "Sembra che il server LDAP sia stato configurato per non rivelare la sua " "radice." -#: ../../lib/server_functions.php:312 +#: ../../lib/server_functions.php:310 #, php-format msgid "" "It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " @@ -916,23 +898,23 @@ msgstr "" "Sembra che sasl_authz_id_regex \"%s\".\" contenga un'espressione regolare " "PCRE non valida." -#: ../../htdocs/schema.php:302 +#: ../../htdocs/schema.php:295 msgid "Jump to a matching rule" msgstr "Vai alla regola di confronto" -#: ../../htdocs/schema.php:121 +#: ../../htdocs/schema.php:118 msgid "Jump to an attribute type" msgstr "Vai al tipo di attributo" -#: ../../htdocs/schema.php:381 +#: ../../htdocs/schema.php:374 msgid "Jump to an objectClass" msgstr "Vai alla objectClass" -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 +#: ../../htdocs/schema.php:419 ../../htdocs/schema.php:437 msgid "Jump to this objectClass definition" msgstr "Vai a questa definizione di objectClass" -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 +#: ../../htdocs/ldif_import.php:144 ../../lib/functions.php:1767 msgid "LDAP said" msgstr "LDAP dice" @@ -965,11 +947,11 @@ msgstr "Fine linea" msgid "List of entries to be deleted:" msgstr "Lista di voci da eliminare:" -#: ../../lib/HTMLTree.php:279 +#: ../../lib/HTMLTree.php:274 msgid "Logged in as" msgstr "Autenticato come" -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 +#: ../../htdocs/update.php:158 ../../lib/HTMLTree.php:472 msgid "Login" msgstr "Autenticati" @@ -985,7 +967,7 @@ msgstr "Accesso..." msgid "Logout" msgstr "Esci" -#: ../../lib/HTMLTree.php:272 +#: ../../lib/HTMLTree.php:267 msgid "Logout of this server" msgstr "Esci da questo Server" @@ -993,7 +975,7 @@ msgstr "Esci da questo Server" msgid "Looking in" msgstr "Ricerca in" -#: ../../lib/EntryWriter1.php:1891 +#: ../../lib/EntryWriter1.php:1879 msgid "Mail" msgstr "Posta" @@ -1017,23 +999,19 @@ msgstr "" "Eliminazone di Massa disabilitata. La si abiliti in config.php prima di " "continuare." -#: ../../htdocs/schema.php:323 +#: ../../htdocs/schema.php:316 msgid "Matching Rule OID" msgstr "Regola Corrispondente OID" -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 +#: ../../htdocs/add_value_form.php:237 ../../htdocs/schema.php:107 msgid "Maximum Length" msgstr "Massima Lunghezza" -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 +#: ../../htdocs/add_attr_form.php:154 ../../htdocs/ldif_import_form.php:35 msgid "Maximum file size" msgstr "Massima dimensione del file" -#: ../../lib/functions.php:329 +#: ../../lib/functions.php:345 msgid "Memory Limit low." msgstr "Limite di Memoria basso." @@ -1050,11 +1028,12 @@ msgstr "Attributi o attributo changetype mancante per la voce" msgid "Missing attributes for the entry" msgstr "Attributo mancante per la voce" -#: ../../lib/functions.php:311 +#: ../../lib/functions.php:327 msgid "Missing required configuration" msgstr "Configurazione richiesta mancante" -#: ../../lib/functions.php:233 ../../lib/functions.php:240 +#: ../../lib/functions.php:232 ../../lib/functions.php:239 +#: ../../lib/functions.php:246 msgid "Missing required extension" msgstr "Estensione richiesta mancante" @@ -1070,7 +1049,7 @@ msgstr "Modifica eseguita!" msgid "Modify group" msgstr "Modifica gruppo" -#: ../../lib/EntryWriter1.php:1860 +#: ../../lib/EntryWriter1.php:1848 #, php-format msgid "Modify members for '%s'" msgstr "Modifica i membri per '%s'" @@ -1079,7 +1058,7 @@ msgstr "Modifica i membri per '%s'" msgid "Modifying..." msgstr "Modifica..." -#: ../../htdocs/schema.php:323 +#: ../../htdocs/schema.php:316 msgid "Name" msgstr "Nome" @@ -1091,9 +1070,8 @@ msgstr "Nuovi Attributi Richiesti" msgid "New Value" msgstr "Nuovo Valore" -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 +#: ../../htdocs/schema.php:165 ../../htdocs/schema.php:222 +#: ../../htdocs/schema.php:226 ../../htdocs/schema.php:230 msgid "No" msgstr "No" @@ -1105,11 +1083,11 @@ msgstr "DN non specificato" msgid "No LDIF file specified. Please try again." msgstr "File LDIF non specificato. Riprovare." -#: ../../lib/Entry.php:282 +#: ../../lib/Entry.php:271 msgid "No Template" msgstr "Nessun modello" -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 +#: ../../htdocs/compare.php:204 ../../htdocs/compare.php:217 msgid "No Value" msgstr "Valore assente" @@ -1125,7 +1103,7 @@ msgstr "Nessun esportatore trovato." msgid "No cache to purge." msgstr "Nessuna cache da svuotare." -#: ../../htdocs/add_value_form.php:115 +#: ../../htdocs/add_value_form.php:107 msgid "No current value for attribute" msgstr "Nessun valore corrente per l'attributo" @@ -1137,14 +1115,13 @@ msgstr "Nessun attributo interno" msgid "No one is logged in to that server." msgstr "Nessuno è autenticato su quel server." -#: ../../lib/search_form_predefined.php:42 +#: ../../lib/search_form_predefined.php:41 msgid "No queries have been defined in config.php." msgstr "Nessuna interrogazione definita in config.php" -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 +#: ../../htdocs/compare.php:32 ../../htdocs/compare.php:34 +#: ../../htdocs/delete.php:29 ../../htdocs/download_binary_attr.php:26 +#: ../../htdocs/rdelete.php:28 ../../htdocs/template_engine.php:25 #, php-format msgid "No such entry: %s" msgstr "Voce non trovata: %s" @@ -1153,7 +1130,7 @@ msgstr "Voce non trovata: %s" msgid "No such file" msgstr "File non trovato" -#: ../../htdocs/schema.php:515 +#: ../../htdocs/schema.php:505 #, php-format msgid "No such schema item: \"%s\"" msgstr "Schema non trovato: \"%s\"" @@ -1162,21 +1139,21 @@ msgstr "Schema non trovato: \"%s\"" msgid "No version found. Assuming 1." msgstr "Nessuna versione trovata. Si ipotizza 1." -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 +#: ../../htdocs/compare.php:25 ../../htdocs/compare.php:29 +#: ../../htdocs/copy.php:32 ../../htdocs/download_binary_attr.php:17 +#: ../../htdocs/entry_chooser.php:41 ../../htdocs/modify_member_form.php:23 +#: ../../htdocs/rename_form.php:22 msgid "" "Not enough information to login to server. Please check your configuration." msgstr "" "Informazioni insufficienti per autenticarsi al server. Si controlli la " "configurazione." -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 +#: ../../htdocs/compare.php:121 ../../lib/EntryWriter1.php:1913 msgid "Note" msgstr "Nota" -#: ../../htdocs/add_value_form.php:160 +#: ../../htdocs/add_value_form.php:202 msgid "" "Note: You may be required to enter new attributes that these objectClass(es) " "require" @@ -1198,11 +1175,11 @@ msgstr "" msgid "Notice, search size limit exceeded." msgstr "Avviso, limite dimensione di ricerca superato." -#: ../../htdocs/schema.php:407 +#: ../../htdocs/schema.php:400 msgid "OID" msgstr "OID" -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 +#: ../../lib/EntryWriter1.php:340 msgid "ObjectClasses" msgstr "ObjectClass" @@ -1217,7 +1194,7 @@ msgstr "" msgid "ObjectClasses in XML dont exist in LDAP server." msgstr "Gli ObjectClass in XML non esistono nel server LDAP." -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 +#: ../../htdocs/schema.php:97 ../../htdocs/schema.php:334 msgid "Obsolete" msgstr "Obsoleto" @@ -1225,12 +1202,12 @@ msgstr "Obsoleto" msgid "Old Value" msgstr "Vecchio Valore" -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 +#: ../../htdocs/export_form.php:32 ../../lib/search_form_advanced.php:86 msgid "One (one level beneath base)" msgstr "Uno (un livello sotto la base)" -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 +#: ../../htdocs/schema.php:445 ../../lib/EntryWriter1.php:407 +#: ../../lib/EntryWriter1.php:417 msgid "Optional Attributes" msgstr "Attributi Opzionali" @@ -1238,28 +1215,20 @@ msgstr "Attributi Opzionali" msgid "Or lastly, your LDAP server doesnt provide this information." msgstr "O, per lo meno, il server LDAP non fornisce questa informazione." -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "" - -#: ../../lib/search_form_advanced.php:112 +#: ../../lib/search_form_advanced.php:111 msgid "Order by" msgstr "Ordina per" -#: ../../htdocs/schema.php:102 +#: ../../htdocs/schema.php:100 msgid "Ordering" msgstr "Ordinamento" -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "" - #: ../../htdocs/search.php:324 ../../htdocs/search.php:362 #, php-format msgid "Page %d" msgstr "Pagina %d" -#: ../../htdocs/schema.php:433 +#: ../../htdocs/schema.php:426 msgid "Parent to" msgstr "Padre di" @@ -1267,40 +1236,44 @@ msgstr "Padre di" msgid "Password" msgstr "Password" -#: ../../htdocs/password_checker.php:27 +#: ../../htdocs/password_checker.php:25 msgid "Password Checker Tool" msgstr "Strumento di Verifica Password" -#: ../../htdocs/password_checker.php:57 +#: ../../htdocs/password_checker.php:55 msgid "Passwords do not match!" msgstr "La password non corrisponde!" -#: ../../htdocs/password_checker.php:55 +#: ../../htdocs/password_checker.php:53 msgid "Passwords match!" msgstr "La password corrisponde!" +#: ../../htdocs/ldif_import_form.php:39 +msgid "Paste your LDIF here" +msgstr "Incolla il file LDIF qui" + #: ../../htdocs/delete_form.php:35 msgid "Permanently delete all children also?" msgstr "Eliminare permanentemente anche tutti i figli?" -#: ../../lib/functions.php:140 +#: ../../lib/functions.php:142 msgid "Please check and see if this bug has been reported" msgstr "Controlla e verifica se questo baco è stato segnalato" -#: ../../lib/functions.php:1855 +#: ../../lib/functions.php:1842 msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" +"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config." +"php" msgstr "" "Si imposti $jpeg_temp_dir ad una directory scrivibile in config.php di " "phpLDAPadmin" -#: ../../lib/HTMLTree.php:84 +#: ../../lib/HTMLTree.php:80 msgid "Please specify it in config.php" msgstr "Specificarlo nel config.php" -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 +#: ../../lib/search_form_advanced.php:51 +#: ../../lib/search_form_predefined.php:22 ../../lib/search_form_simple.php:42 msgid "Predefined Searches" msgstr "Ricerche Predefinite" @@ -1308,11 +1281,12 @@ msgstr "Ricerche Predefinite" msgid "Proceed >>" msgstr "Continuare >>" -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 +#: ../../htdocs/export_form.php:126 ../../htdocs/ldif_import_form.php:34 +#: ../../htdocs/ldif_import_form.php:45 msgid "Proceed >>" msgstr "Continuare >>" -#: ../../lib/functions.php:349 +#: ../../lib/functions.php:365 msgid "Purge all cached data in phpLDAPadmin, including server schemas." msgstr "" "Svuota tutti i dati nella cache di phpLDAPadmin, inclusi gli schemi del " @@ -1322,7 +1296,7 @@ msgstr "" msgid "Purge cache" msgstr "Svuota la cache" -#: ../../lib/functions.php:349 +#: ../../lib/functions.php:365 msgid "Purge caches" msgstr "Svuota le cache" @@ -1331,7 +1305,7 @@ msgstr "Svuota le cache" msgid "Purged %s bytes of cache." msgstr "Svuotati %s byte dalla cache." -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 +#: ../../htdocs/compare.php:564 ../../lib/EntryWriter1.php:2066 msgid "Really delete attribute" msgstr "Cancella definitivamente il valore" @@ -1355,7 +1329,7 @@ msgstr "Copia ricorsivamente anche tutti i figli di questo oggetto." msgid "Refresh" msgstr "Aggiorna" -#: ../../lib/HTMLTree.php:240 +#: ../../lib/HTMLTree.php:235 msgid "Refresh all expanded containers for" msgstr "Aggiorna tutti i contenitori aperti per" @@ -1363,15 +1337,15 @@ msgstr "Aggiorna tutti i contenitori aperti per" msgid "Refresh this entry" msgstr "Aggiorna questa voce" -#: ../../htdocs/modify_member_form.php:149 +#: ../../htdocs/modify_member_form.php:148 msgid "Remove selected" msgstr "Rimuovi selezionati" -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 +#: ../../htdocs/rename_form.php:35 ../../lib/EntryWriter1.php:769 msgid "Rename" msgstr "Rinomina" -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 +#: ../../htdocs/rename.php:71 ../../htdocs/rename_form.php:27 msgid "Rename Entry" msgstr "Rinomina la Voce" @@ -1383,20 +1357,20 @@ msgstr "Rinominazione eseguita!" msgid "Renaming..." msgstr "Rinominazione..." -#: ../../lib/functions.php:353 +#: ../../lib/functions.php:369 msgid "Report a bug" -msgstr "Segnala un bug" +msgstr "Riporta un baco" -#: ../../lib/functions.php:351 +#: ../../lib/functions.php:367 msgid "Request feature" msgstr "Richiedi una nuova funzionalità" -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 +#: ../../htdocs/schema.php:445 ../../lib/EntryWriter1.php:397 +#: ../../lib/EntryWriter1.php:404 msgid "Required Attributes" msgstr "Attributi Richiesti" -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 +#: ../../htdocs/compare.php:169 ../../lib/EntryWriter1.php:1949 #, php-format msgid "Required attribute for objectClass(es) %s" msgstr "Attributi richiesti per l'objectClass %s" @@ -1409,8 +1383,8 @@ msgstr "Recupero DN" msgid "Save" msgstr "Salva" -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 +#: ../../htdocs/compare.php:552 ../../lib/EntryWriter1.php:861 +#: ../../lib/EntryWriter2.php:117 msgid "Save Changes" msgstr "Salva i Cambiamenti" @@ -1426,7 +1400,7 @@ msgstr "Salva un'immagine di questo oggetto e tutti i suoi figli" msgid "Save as file" msgstr "Salva come file" -#: ../../htdocs/modify_member_form.php:177 +#: ../../htdocs/modify_member_form.php:176 msgid "Save changes" msgstr "Salva i cambiamenti" @@ -1434,26 +1408,29 @@ msgstr "Salva i cambiamenti" msgid "Schema for server" msgstr "Schema per il server" -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 +#: ../../htdocs/search.php:148 ../../lib/search_form_advanced.php:115 +#: ../../lib/search_form_predefined.php:63 ../../lib/search_form_simple.php:74 msgid "Search" msgstr "Cerca" -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 +#: ../../htdocs/export_form.php:72 ../../lib/export_functions.php:198 +#: ../../lib/search_form_advanced.php:97 msgid "Search Filter" msgstr "Filtro di Ricerca" -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 +#: ../../htdocs/export_form.php:59 ../../lib/export_functions.php:197 +#: ../../lib/search_form_advanced.php:79 msgid "Search Scope" msgstr "Campo di Ricerca" -#: ../../lib/search_form_simple.php:53 +#: ../../lib/search_form_simple.php:52 msgid "Search for entries whose" msgstr "Cerca per voci che" +#: ../../htdocs/search.php:392 +msgid "Search performed by phpLDAPadmin in" +msgstr "Ricerca eseguita da phpLDAPadmin in" + #: ../../htdocs/search.php:111 msgid "Searching is not permitted" msgstr "La ricerca non è permessa" @@ -1463,7 +1440,7 @@ msgstr "La ricerca non è permessa" msgid "Security error: The file being uploaded may be malicious." msgstr "Errore di sicurezza: if file da caricare potrebbe essere pericoloso." -#: ../../lib/search_form_predefined.php:46 +#: ../../lib/search_form_predefined.php:45 msgid "Select a predefined search" msgstr "Seleziona una ricerca predefinita" @@ -1471,25 +1448,25 @@ msgstr "Seleziona una ricerca predefinita" msgid "Select a template for the creation process" msgstr "Seleziona un modello per il processo di creazione" -#: ../../lib/EntryWriter1.php:1244 +#: ../../lib/EntryWriter1.php:1249 msgid "Select a template to edit the entry" msgstr "Seleziona un modello per modificare la voce" -#: ../../htdocs/ldif_import_form.php:32 +#: ../../htdocs/ldif_import_form.php:25 msgid "Select an LDIF file" msgstr "Seleziona un file LDIF" -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 +#: ../../htdocs/add_attr_form.php:25 ../../htdocs/add_value_form.php:100 +#: ../../htdocs/compare.php:56 ../../htdocs/compare.php:59 +#: ../../htdocs/compare_form.php:22 ../../htdocs/copy_form.php:46 #: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 #: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 +#: ../../htdocs/export_form.php:49 ../../htdocs/ldif_import.php:53 +#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/modify_member_form.php:72 +#: ../../htdocs/rename_form.php:29 ../../lib/EntryWriter1.php:247 +#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 +#: ../../lib/HTMLTree.php:151 ../../lib/export_functions.php:196 +#: ../../lib/search_form_advanced.php:60 ../../lib/search_form_simple.php:50 msgid "Server" msgstr "Server" @@ -1509,11 +1486,11 @@ msgstr "Il server dichiara le seguenti informazioni su di sè" msgid "Show" msgstr "Mostra" -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 +#: ../../htdocs/export_form.php:75 ../../lib/search_form_advanced.php:103 msgid "Show Attributtes" msgstr "Mostra gli Attributi" -#: ../../lib/functions.php:357 +#: ../../lib/functions.php:373 msgid "Show Cache" msgstr "Mostra la Cache" @@ -1526,8 +1503,8 @@ msgstr "Mostra gli attributi interni" msgid "Showing results %s through %s." msgstr "Mostra i risultati da %s a %s" -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 +#: ../../lib/search_form_advanced.php:43 +#: ../../lib/search_form_predefined.php:29 ../../lib/search_form_simple.php:23 msgid "Simple Search Form" msgstr "Modulo di Ricerca Semplice" @@ -1538,7 +1515,7 @@ msgid "" msgstr "" "Dato che hai cambiato password, devi reautenticarti con la nuova password." -#: ../../htdocs/schema.php:105 +#: ../../htdocs/schema.php:103 msgid "Single Valued" msgstr "Valore Singolo" @@ -1549,8 +1526,7 @@ msgstr "Salta" #: ../../lib/EntryWriter1.php:826 #, php-format msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "" -"Alcuni attributi (%s) sono stati modificati e sono evidenziati sotto." +msgstr "Alcuni attributi (%s) sono stati modificati e sono evidenziati sotto." #: ../../htdocs/login.php:117 msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." @@ -1565,7 +1541,7 @@ msgstr "DN sorgente" msgid "Specify attributes and values" msgstr "Specifica attributi e valori" -#: ../../lib/search_form_advanced.php:97 +#: ../../lib/search_form_advanced.php:96 msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" msgstr "" "Filtro standard di ricerca LDAP. Esempio (&(sn=Rossi)(givenname=Mario))" @@ -1575,16 +1551,16 @@ msgstr "" msgid "Step %s of %s" msgstr "Passo %s di %s" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 +#: ../../htdocs/export_form.php:33 ../../lib/search_form_advanced.php:83 msgid "Sub (entire subtree)" msgstr "Sub (intero sottoalbero)" -#: ../../htdocs/schema.php:103 +#: ../../htdocs/schema.php:101 msgid "Substring Rule" msgstr "Regola di Substring" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 +#: ../../htdocs/copy.php:64 ../../htdocs/ldif_import.php:114 +#: ../../htdocs/ldif_import.php:136 ../../htdocs/mass_delete.php:69 #: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 msgid "Success" msgstr "Successo" @@ -1597,31 +1573,23 @@ msgstr "Correttamente eliminata DN " msgid "Successfully logged into server." msgstr "Autenticazione al server eseguita." -#: ../../htdocs/compare.php:64 +#: ../../htdocs/compare.php:70 msgid "Switch Entry" msgstr "Scambia Voce" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 +#: ../../htdocs/add_value_form.php:233 ../../htdocs/schema.php:102 msgid "Syntax" msgstr "Sintassi" -#: ../../htdocs/schema.php:70 +#: ../../htdocs/schema.php:69 msgid "Syntax OID" msgstr "Sintassi OID" -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "" - #: ../../lib/EntryWriter1.php:519 msgid "Template" msgstr "Modello" -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" - -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 +#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1260 msgid "Templates" msgstr "Modelli" @@ -1630,8 +1598,8 @@ msgstr "Modelli" msgid "The Rdn attribute (%s) does not exist." msgstr "L'attributo Rdn (%s) non esiste." -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 +#: ../../htdocs/add_value.php:37 ../../htdocs/delete_attr.php:34 +#: ../../htdocs/update.php:103 #, php-format msgid "" "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " @@ -1677,7 +1645,7 @@ msgstr "Il contenitore specificato (%s) non esiste." msgid "The container you specified (%s) does not exist. Please try again." msgstr "Il contenitore specificato (%s) non esiste. Riprovare." -#: ../../htdocs/update_confirm.php:309 +#: ../../htdocs/update_confirm.php:315 msgid "The deletion of objectClass(es)" msgstr "L'eliminazione di objectClass" @@ -1691,12 +1659,12 @@ msgstr "Il container di destinazione (%s) non esiste." msgid "The destination entry (%s) already exists." msgstr "La voce di destinazione (%s) esiste già." -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 +#: ../../htdocs/add_value_form.php:37 ../../htdocs/update_confirm.php:29 #, php-format msgid "The entry (%s) does not exist." msgstr "La voce (%s) non esiste." -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 +#: ../../htdocs/add_value_form.php:55 ../../htdocs/update_confirm.php:43 #, php-format msgid "The entry (%s) is in readonly mode." msgstr "La voce (%s) è in modalità sola lettura." @@ -1730,10 +1698,9 @@ msgstr "" #: ../../htdocs/copy_form.php:64 msgid "" "The full DN of the new entry to be created when copying the source entry" -msgstr "" -"Il DN completo della voce da creare quando si copia la voce di origine" +msgstr "Il DN completo della voce da creare quando si copia la voce di origine" -#: ../../lib/search_form_advanced.php:80 +#: ../../lib/search_form_advanced.php:79 msgid "The scope in which to search" msgstr "Dove cercare" @@ -1757,7 +1724,7 @@ msgstr "Il valore dell'attributo url dovrebbe cominciare con file:///" msgid "There are" msgstr "Ci sono" -#: ../../lib/functions.php:1267 +#: ../../lib/functions.php:1262 msgid "There is more than one dn for uidpool,please change filter parameter" msgstr "C'è più di un dn per uidpool, si cambino i parametri del filtro" @@ -1765,8 +1732,8 @@ msgstr "C'è più di un dn per uidpool, si cambino i parametri del filtro" msgid "This action requires you to add" msgstr "Questa azione richiede che tu aggiunga" -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 +#: ../../htdocs/compare.php:179 ../../lib/EntryWriter1.php:1514 +#: ../../lib/EntryWriter2.php:210 msgid "" "This attribute has been flagged as read only by the phpLDAPadmin " "administrator" @@ -1774,33 +1741,27 @@ msgstr "" "Questo attributo è stato etichettato in sola lettura dall'amministratore di " "phpLDAPadmin." -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 +#: ../../lib/EntryWriter1.php:1429 msgid "This attribute is required" msgstr "Questo attributo è richiesto" -#: ../../lib/EntryWriter1.php:1971 +#: ../../lib/EntryWriter1.php:1958 msgid "This attribute is required for the RDN." msgstr "Questo attributo è richiesto per l'RDN." -#: ../../lib/HTMLTree.php:70 +#: ../../lib/HTMLTree.php:66 msgid "This base entry does not exist." msgstr "Questa voce base non esiste." #: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" +msgid "This could happen for several reasons, the most probable of which are:" msgstr "Questo potrebbe accadere per vari motivi, i cui più probabili sono:" -#: ../../lib/search_form_advanced.php:74 +#: ../../lib/search_form_advanced.php:73 msgid "This entry does not exist." msgstr "Questa voce non esiste." -#: ../../htdocs/compare.php:70 +#: ../../htdocs/compare.php:77 msgid "This entry has no attributes" msgstr "Questa voce non ha attributi." @@ -1809,30 +1770,31 @@ msgstr "Questa voce non ha attributi." msgid "This entry is the root of a sub-tree containing %s entries." msgstr "Questa voce è la radice di un sotto albero contenente %s voci." -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 +#: ../../htdocs/compare.php:436 ../../lib/EntryWriter1.php:2296 +#, php-format msgid "This is a structural ObjectClass and cannot be removed." msgstr "Questo è un ObjectClass strutturale e non può essere rimosso." -#: ../../lib/search_form_advanced.php:71 +#: ../../lib/search_form_advanced.php:70 msgid "This is not a valid DN." msgstr "Questo non è un RDN valido." -#: ../../htdocs/schema.php:415 +#: ../../htdocs/schema.php:408 msgid "This objectClass is obsolete." msgstr "Questa objectClass è obsoleta." -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 +#: ../../htdocs/add_attr.php:25 ../../htdocs/add_value.php:24 +#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value_form.php:78 +#: ../../htdocs/copy.php:20 ../../htdocs/create.php:25 +#: ../../htdocs/delete.php:21 ../../htdocs/delete_attr.php:21 #: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 +#: ../../htdocs/mass_delete.php:26 ../../htdocs/purge_cache.php:13 +#: ../../htdocs/rdelete.php:21 ../../htdocs/refresh.php:17 +#: ../../htdocs/rename.php:24 ../../htdocs/schema.php:20 +#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 +#: ../../htdocs/search.php:128 ../../htdocs/server_info.php:16 +#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 +#: ../../htdocs/update.php:80 msgid "This operation is not permitted by the configuration" msgstr "Questa operazione non è consentita dalla configurazione" @@ -1840,7 +1802,7 @@ msgstr "Questa operazione non è consentita dalla configurazione" msgid "This server has nothing to report." msgstr "Questo server non ha niente da dichiarare." -#: ../../lib/EntryWriter1.php:1073 +#: ../../lib/EntryWriter1.php:1074 msgid "This template is not allowed in this container." msgstr "Questo modello non è permesso in questo contenitore." @@ -1848,7 +1810,7 @@ msgstr "Questo modello non è permesso in questo contenitore." msgid "This web connection is unencrypted" msgstr "Questa connessione web non è crittografata" -#: ../../htdocs/password_checker.php:41 +#: ../../htdocs/password_checker.php:39 msgid "To" msgstr "A" @@ -1864,19 +1826,19 @@ msgstr "Voci Totali" msgid "Trash" msgstr "Cestino" -#: ../../htdocs/schema.php:412 +#: ../../htdocs/schema.php:405 msgid "Type" msgstr "Tipo" -#: ../../lib/EntryWriter1.php:1898 +#: ../../lib/EntryWriter1.php:1886 msgid "URL" msgstr "URL" -#: ../../lib/functions.php:1264 +#: ../../lib/functions.php:1259 msgid "Uidpool dn not found, please change filter parameter" msgstr "dn uidpool non trovato, si cambino i parametri del filtro" -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 +#: ../../lib/functions.php:1180 ../../lib/functions.php:1244 #, php-format msgid "" "Unable to bind to %s with your with auto_uid credentials. Please " @@ -1885,7 +1847,7 @@ msgstr "" "Impossibile fare il bind su %s con le credenziali auto_uid. Si " "controlli il file di configurazione." -#: ../../lib/server_functions.php:2852 +#: ../../lib/server_functions.php:2734 #, php-format msgid "" "Unable to bind to %s with your with unique_attrs credentials. Please " @@ -1906,22 +1868,18 @@ msgstr "Impossibile aprire il file" msgid "Unable to read file" msgstr "Impossibile apire il file" -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 +#: ../../htdocs/login_form.php:17 ../../htdocs/logout.php:30 +#: ../../lib/server_functions.php:1973 ../../lib/server_functions.php:2045 +#: ../../lib/server_functions.php:2339 ../../lib/server_functions.php:2450 #, php-format msgid "Unknown auth_type: %s" msgstr "auth_type sconosciuto: %s" -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "" - #: ../../htdocs/search.php:214 msgid "Unrecognized criteria option: " msgstr "Opzione del criterio non riconosciuta: " -#: ../../lib/functions.php:122 +#: ../../lib/functions.php:124 msgid "Unrecognized error number" msgstr "Numero d'errore non riconosciuto" @@ -1938,7 +1896,7 @@ msgstr "Nome del file non sicuro" msgid "Uploaded LDIF file is empty." msgstr "Il file LDIF caricato è vuoto." -#: ../../htdocs/schema.php:108 +#: ../../htdocs/schema.php:106 msgid "Usage" msgstr "Utilizzo" @@ -1946,15 +1904,15 @@ msgstr "Utilizzo" msgid "Use the menu to the left to navigate" msgstr "Usa il menù sulla sinistra per spostarti" -#: ../../htdocs/schema.php:323 +#: ../../htdocs/schema.php:316 msgid "Used by Attributes" msgstr "Usato dagli Attributi" -#: ../../htdocs/schema.php:111 +#: ../../htdocs/schema.php:109 msgid "Used by objectClasses" msgstr "Usato da objectClass" -#: ../../htdocs/schema.php:107 +#: ../../htdocs/schema.php:105 msgid "User Modification" msgstr "Modifica Utente" @@ -1967,15 +1925,15 @@ msgstr "Visualizza %s come figlio" msgid "View 1 child" msgstr "Visualizza 1 figlio" -#: ../../lib/HTMLTree.php:224 +#: ../../lib/HTMLTree.php:219 msgid "View schema for" msgstr "Visualizza lo schema per" -#: ../../lib/HTMLTree.php:248 +#: ../../lib/HTMLTree.php:243 msgid "View server-supplied information" msgstr "Visualizza le informazioni fornite dal server" -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 +#: ../../htdocs/compare.php:431 ../../lib/EntryWriter1.php:2308 msgid "View the schema description for this objectClass" msgstr "Visualizza la descrizione dello schema per questa objectClass" @@ -1993,7 +1951,7 @@ msgstr "" "che a livello di phpLDAPadmin. Si disabiliti zlib.output_compression o si " "abiliti $config->custom->appearance['compress']=false" -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 +#: ../../htdocs/login_form.php:28 ../../lib/page.php:62 msgid "Warning" msgstr "Attenzione" @@ -2005,9 +1963,8 @@ msgstr "" "Quando si esegue una copia ricorsiva, copia solo le voci che corrispondono a " "questo filtro" -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 +#: ../../htdocs/schema.php:165 ../../htdocs/schema.php:222 +#: ../../htdocs/schema.php:226 ../../htdocs/schema.php:230 msgid "Yes" msgstr "Sì" @@ -2023,16 +1980,16 @@ msgstr "" "Non si sta usando 'https'. Il browser web trasmetterà le informazioni in " "chiaro." -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 #: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 +#: ../../htdocs/add_oclass.php:23 ../../htdocs/add_oclass_form.php:27 +#: ../../htdocs/add_value.php:21 ../../htdocs/add_value_form.php:16 +#: ../../htdocs/copy_form.php:18 ../../htdocs/create.php:22 +#: ../../htdocs/delete.php:18 ../../htdocs/delete_attr.php:18 +#: ../../htdocs/delete_form.php:19 ../../htdocs/download_binary_attr.php:15 +#: ../../htdocs/ldif_import_form.php:19 ../../htdocs/modify_member_form.php:21 +#: ../../htdocs/rdelete.php:18 ../../htdocs/rename.php:21 +#: ../../htdocs/rename_form.php:20 ../../htdocs/template_engine.php:54 +#: ../../htdocs/update.php:39 ../../htdocs/update_confirm.php:19 msgid "You cannot perform updates while server is in read-only mode" msgstr "" "Non è possibile eseguire aggiornamenti quando il server è in modalità sola " @@ -2066,15 +2023,10 @@ msgstr "Non è stata selezionata nessuna voce da eliminare." msgid "You did not select any objectClasses for this object." msgstr "Non è stata selezionata nessuna objectClass per questo oggetto." -#: ../../lib/functions.php:144 +#: ../../lib/functions.php:146 msgid "You found a non-fatal phpLDAPadmin bug!" msgstr "Hai trovato un baco non grave di phpLDAPadmin!" -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - #: ../../htdocs/search.php:149 msgid "" "You have not logged into the selected server yet, so you cannot perform " @@ -2083,7 +2035,7 @@ msgstr "" "Non ci si è ancora autenticati sul server selezionato, quindi non è " "possibile eseguirvi ricerche." -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 +#: ../../lib/EntryReader.php:360 ../../lib/EntryReader.php:382 msgid "You have specified two different passwords" msgstr "Sono state specificate due password diverse" @@ -2110,7 +2062,7 @@ msgstr "La password è stata lasciata vuota." msgid "You left the value blank for required attribute (%s)." msgstr "Il valore è stato lasciato vuoto per l'attributo richiesto (%s)." -#: ../../htdocs/update_confirm.php:326 +#: ../../htdocs/update_confirm.php:335 msgid "You made no changes" msgstr "Non sono state fatte modifiche" @@ -2126,14 +2078,13 @@ msgstr "Si deve caricare un file o fornire un LDIF nel campo testuale." msgid "You must specify a DN" msgstr "Si deve specificare un DN" -#: ../../htdocs/compare.php:469 +#: ../../htdocs/compare.php:528 #, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." +msgid "You need one of the following ObjectClass(es) to add this attribute %s." msgstr "" "Serve una della/e seguente/i ObjectClass per aggiungere questo attributo: %s." -#: ../../htdocs/index.php:82 +#: ../../htdocs/index.php:88 #, php-format msgid "" "You need to configure %s. Edit the file \"%s\" to do so. An example config " @@ -2142,19 +2093,19 @@ msgstr "" "Bisogna configurare %s. Si editi il file \"%s\" per farlo. Un file di " "configurazione di esempio è fornito in \"%s.example\"." -#: ../../lib/functions.php:1305 +#: ../../lib/functions.php:1292 #, php-format msgid "" "You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" "\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" "\t\t\t\tPlease correct this problem." msgstr "" -"E' stato specificato un valore non valido per auto_uid_number_mechanism " -"(\"%s\")\n" +"E' stato specificato un valore non valido per auto_uid_number_mechanism (\"%s" +"\")\n" "\t\t\t\tnella configurazione. Solo \"uidpool\" e \"search\" sono ammessi.\n" "\t\t\t\tSi corregga questo problema." -#: ../../lib/functions.php:1163 +#: ../../lib/functions.php:1159 #, php-format msgid "" "You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" @@ -2172,7 +2123,7 @@ msgstr "" msgid "You will be prompted to confirm this decision" msgstr "Ti sarà richiesto di confermare questa decisione" -#: ../../htdocs/add_attr_form.php:152 +#: ../../htdocs/add_attr_form.php:151 msgid "" "Your PHP configuration has disabled file uploads. Please check php.ini " "before proceeding." @@ -2180,20 +2131,20 @@ msgstr "" "Nella configurazione di PHP è disabilitato il caricamento di file. Si " "controlli il file php.ini prima di continuare." -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 +#: ../../lib/functions.php:1975 ../../lib/functions.php:1986 +#: ../../lib/functions.php:1997 ../../lib/functions.php:2045 +#: ../../lib/functions.php:2063 msgid "" "Your PHP install does not have the mhash() function. Cannot do SHA hashes." msgstr "" "L'installazione di PHP non dispone della funzione mhash(). Non è possibile " "eseguire hash SHA." -#: ../../lib/server_functions.php:264 +#: ../../lib/server_functions.php:262 msgid "Your PHP install does not support TLS." msgstr "L'installazione di PHP non supporta TLS." -#: ../../lib/server_functions.php:279 +#: ../../lib/server_functions.php:277 msgid "" "Your PHP installation does not support ldap_sasl_bind() function. This " "function is present in PHP 5.x when compiled with --with-ldap-sasl." @@ -2224,8 +2175,8 @@ msgstr "" "consentito. Quell'attributo/valore appartiene ad un'altra voce.

Si " "dovrebbe cercare per quella voce." -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 +#: ../../htdocs/add_attr.php:51 ../../htdocs/add_oclass.php:45 +#: ../../htdocs/add_value.php:59 ../../htdocs/create.php:86 #, php-format msgid "" "Your attempt to add %s (%s) to
%s
is NOT " @@ -2240,7 +2191,7 @@ msgstr "" msgid "Your configuration has been automatically refreshed." msgstr "La configurazione è stata automaticamente aggiornata." -#: ../../lib/functions.php:1172 +#: ../../lib/functions.php:1168 #, php-format msgid "" "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " @@ -2249,16 +2200,15 @@ msgstr "" "La configurazione di phpLDAPadmin specifica un valore non valido di " "auto_uid_search_base per il server %s" -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 +#: ../../lib/functions.php:1956 ../../lib/functions.php:2090 msgid "Your system crypt library does not support blowfish encryption." msgstr "La tua libreria crypt di sistema non supporta la codifica blowfish." -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 +#: ../../lib/functions.php:1942 ../../lib/functions.php:2120 msgid "Your system crypt library does not support extended DES encryption." -msgstr "" -"La tua libreria crypt di sistema non supporta la codifica DES estesa." +msgstr "La tua libreria crypt di sistema non supporta la codifica DES estesa." -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 +#: ../../lib/functions.php:1949 ../../lib/functions.php:2105 msgid "Your system crypt library does not support md5crypt encryption." msgstr "La tua libreria crypt di sistema non supporta la codifica md5crypt." @@ -2273,12 +2223,12 @@ msgstr "" "disponibile nelle variabili POST FORM. Le seguenti variabili sono " "disponibili [%s]." -#: ../../lib/EntryReader.php:262 +#: ../../lib/EntryReader.php:274 #, php-format msgid "Your template has an unknown post function (%s)." msgstr "Il modello ha una funzione post sconosciuta (%s)." -#: ../../lib/EntryReader.php:212 +#: ../../lib/EntryReader.php:210 #, php-format msgid "Your template is missing variable (%s)" msgstr "Nel modello manca la variabile (%s)" @@ -2291,20 +2241,20 @@ msgstr "La versione di PHP non ha eseguito correttamente l'interrogazione." msgid "[attribute deleted]" msgstr "[attributo rimosso]" -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 +#: ../../lib/EntryWriter1.php:2013 ../../lib/EntryWriter1.php:2222 msgid "[no value]" msgstr "[nessun valore]" -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 +#: ../../htdocs/add_attr.php:25 ../../htdocs/add_value_form.php:78 msgid "add attribute" msgstr "aggiungi attributo" -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 +#: ../../htdocs/add_value.php:24 ../../htdocs/add_value_form.php:76 msgid "add attribute value" msgstr "aggiungi valore di attributo" -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 +#: ../../htdocs/compare.php:526 ../../htdocs/compare.php:537 +#: ../../lib/EntryWriter1.php:1836 msgid "add value" msgstr "aggiungi un valore" @@ -2312,35 +2262,35 @@ msgstr "aggiungi un valore" msgid "advanced search" msgstr "ricerca avanzata" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 +#: ../../htdocs/compare.php:121 ../../lib/EntryWriter1.php:1913 msgid "alias" msgstr "alias" -#: ../../lib/functions.php:2243 +#: ../../lib/functions.php:2230 msgid "browse" msgstr "sfoglia" -#: ../../lib/functions.php:353 +#: ../../lib/functions.php:369 msgid "bug" msgstr "baco" -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 +#: ../../htdocs/ldif_import.php:54 ../../lib/functions.php:1888 msgid "bytes" msgstr "byte" -#: ../../lib/functions.php:132 +#: ../../lib/functions.php:134 msgid "caller" msgstr "chiamante" -#: ../../htdocs/schema.php:248 +#: ../../htdocs/schema.php:245 msgid "character" msgstr "carattere" -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 +#: ../../htdocs/add_value_form.php:237 ../../htdocs/schema.php:245 msgid "characters" msgstr "caratteri" -#: ../../lib/EntryWriter1.php:2404 +#: ../../lib/EntryWriter1.php:2393 msgid "confirm" msgstr "conferma" @@ -2352,8 +2302,8 @@ msgstr "copia voce" msgid "create entry" msgstr "crea voce" -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 +#: ../../htdocs/compare.php:287 ../../htdocs/delete_attr.php:21 +#: ../../htdocs/update.php:61 ../../lib/EntryWriter1.php:2009 msgid "delete attribute" msgstr "cancella attributo" @@ -2365,12 +2315,12 @@ msgstr "cancella voce" msgid "delete mass entries" msgstr "cancella voci in massa" -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 +#: ../../htdocs/compare.php:278 ../../htdocs/compare.php:281 +#: ../../lib/EntryWriter1.php:1998 ../../lib/EntryWriter1.php:2002 msgid "download value" msgstr "valore del download" -#: ../../htdocs/compare.php:280 +#: ../../htdocs/compare.php:310 msgid "empty" msgstr "vuoto" @@ -2382,7 +2332,7 @@ msgstr "voci" msgid "entry" msgstr "voce" -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 +#: ../../htdocs/export.php:18 ../../lib/HTMLTree.php:259 msgid "export" msgstr "esporta" @@ -2390,48 +2340,44 @@ msgstr "esporta" msgid "export results" msgstr "risultati dell'esportazione" -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 +#: ../../htdocs/compare.php:400 ../../lib/AttributeFactory.php:39 msgid "false" msgstr "falso" -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 +#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 +#: ../../htdocs/create.php:114 msgid "has been created." msgstr "è stato creato." -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "" - -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 +#: ../../htdocs/ldif_import.php:19 ../../lib/HTMLTree.php:251 msgid "import" msgstr "importa" -#: ../../lib/HTMLTree.php:248 +#: ../../lib/HTMLTree.php:243 msgid "info" msgstr "info" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 +#: ../../htdocs/compare.php:121 ../../lib/EntryWriter1.php:1913 msgid "is an alias for" msgstr "è un alias per" -#: ../../lib/functions.php:1870 +#: ../../lib/functions.php:1857 msgid "jpegPhoto contains errors
" msgstr "jpegPhoto contiene errori
" -#: ../../lib/functions.php:351 +#: ../../lib/functions.php:367 msgid "light" msgstr "leggero" -#: ../../lib/functions.php:132 +#: ../../lib/functions.php:134 msgid "line" msgstr "linea" -#: ../../lib/HTMLTree.php:476 +#: ../../lib/HTMLTree.php:471 msgid "login" msgstr "autentica" -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 +#: ../../lib/HTMLTree.php:267 ../../lib/HTMLTree.php:489 msgid "logout" msgstr "esci" @@ -2451,11 +2397,11 @@ msgstr "min. di inattività. Sei stato scollegato automaticamente." msgid "modify attribute values" msgstr "modifica valori degli attributi" -#: ../../lib/EntryWriter1.php:1860 +#: ../../lib/EntryWriter1.php:1848 msgid "modify group members" msgstr "modifica membri del gruppo" -#: ../../lib/HTMLTree.php:461 +#: ../../lib/HTMLTree.php:456 msgid "new" msgstr "nuovo" @@ -2463,11 +2409,11 @@ msgstr "nuovo" msgid "new attributes" msgstr "nuovi attributi" -#: ../../htdocs/schema.php:158 +#: ../../htdocs/schema.php:155 msgid "no description" msgstr "nessuna descrizione" -#: ../../lib/functions.php:1793 +#: ../../lib/functions.php:1780 msgid "no description available" msgstr "descrizione non disponibile" @@ -2475,33 +2421,33 @@ msgstr "descrizione non disponibile" msgid "no entries" msgstr "nessuna voce" -#: ../../htdocs/add_attr_form.php:109 +#: ../../htdocs/add_attr_form.php:108 msgid "no new attributes available for this entry" msgstr "nessun nuovo attributo disponibile per questa voce" -#: ../../htdocs/add_attr_form.php:161 +#: ../../htdocs/add_attr_form.php:160 msgid "no new binary attributes available for this entry" msgstr "nessun nuovo attributo binario disponibile per questa voce" +#: ../../htdocs/schema.php:172 ../../htdocs/schema.php:254 +#: ../../htdocs/schema.php:269 ../../htdocs/schema.php:343 +#: ../../htdocs/schema.php:412 ../../htdocs/schema.php:432 +#: ../../htdocs/schema.php:469 ../../htdocs/schema.php:492 #: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 +#: ../../lib/functions.php:2775 msgid "none" msgstr "nessuno" -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 +#: ../../htdocs/compare.php:401 ../../lib/EntryWriter1.php:2570 msgid "none, remove value" msgstr "nessuno, rimuovi il valore" -#: ../../htdocs/schema.php:244 +#: ../../htdocs/schema.php:241 msgid "not applicable" msgstr "non appicabile" -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 +#: ../../htdocs/schema.php:186 ../../htdocs/schema.php:198 +#: ../../htdocs/schema.php:203 ../../htdocs/schema.php:234 msgid "not specified" msgstr "non specificato" @@ -2532,12 +2478,12 @@ msgstr "ricerca predefinita" msgid "purge" msgstr "svuota" -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 +#: ../../htdocs/compare.php:179 ../../lib/EntryWriter1.php:1515 +#: ../../lib/EntryWriter2.php:211 ../../lib/HTMLTree.php:41 msgid "read only" msgstr "sola lettura" -#: ../../lib/HTMLTree.php:240 +#: ../../lib/HTMLTree.php:235 msgid "refresh" msgstr "aggiorna" @@ -2545,7 +2491,7 @@ msgstr "aggiorna" msgid "refresh server" msgstr "aggiorna server" -#: ../../lib/EntryWriter1.php:1829 +#: ../../lib/EntryWriter1.php:1817 msgid "rename" msgstr "rinomina" @@ -2553,19 +2499,19 @@ msgstr "rinomina" msgid "rename entry" msgstr "rinomina voce" -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 +#: ../../htdocs/compare.php:169 ../../lib/EntryWriter1.php:1949 msgid "required" msgstr "richiesto" -#: ../../lib/HTMLTree.php:224 +#: ../../lib/HTMLTree.php:219 msgid "schema" msgstr "schema" -#: ../../lib/HTMLTree.php:232 +#: ../../lib/HTMLTree.php:227 msgid "search" msgstr "cerca" -#: ../../htdocs/search.php:266 +#: ../../htdocs/search.php:266 ../../htdocs/search.php:392 msgid "seconds" msgstr "secondi" @@ -2582,7 +2528,7 @@ msgstr "ricerca semplice" msgid "step %s of %s" msgstr "passo %s di %s" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 +#: ../../htdocs/compare.php:436 ../../lib/EntryWriter1.php:2297 msgid "structural" msgstr "strutturale" @@ -2602,11 +2548,11 @@ msgstr "questo" msgid "to a new object" msgstr "ad un nuovo oggetto" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 +#: ../../htdocs/compare.php:399 ../../lib/AttributeFactory.php:38 msgid "true" msgstr "vero" -#: ../../lib/functions.php:1277 +#: ../../lib/functions.php:1271 msgid "" "uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " "config file" @@ -2622,11 +2568,11 @@ msgstr "" "update_array è malformato. Potrebbe essere un baco di phpLDAPadmin. Lo si " "segnali per cortesia." -#: ../../htdocs/add_value_form.php:93 +#: ../../htdocs/add_value_form.php:98 msgid "value to" msgstr "valore a" -#: ../../htdocs/add_value_form.php:112 +#: ../../htdocs/add_value_form.php:104 msgid "values for attribute" msgstr "valori per l'attributo" @@ -2642,16 +2588,10 @@ msgstr "visualizza schema" msgid "view server informations" msgstr "visualizza le informazioni del server" -#: ../../htdocs/update_confirm.php:312 +#: ../../htdocs/update_confirm.php:320 msgid "will delete the attribute(s)" msgstr "cancellerà il/gli attributo/i?" #: ../../htdocs/compare_form.php:29 msgid "with " -msgstr "con " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "Ricerca eseguita da phpLDAPadmin in" - -#~ msgid "Paste your LDIF here" -#~ msgstr "Incolla il file LDIF qui" +msgstr "con" diff --git a/locale/ja_JP/LC_MESSAGES/messages.mo b/locale/ja_JP/LC_MESSAGES/messages.mo index 1331f22acf7f64e171a3b45d89e64c73d3033255..c1de95d21a4ae78d1e2b0d766290645274a2dc8c 100644 GIT binary patch delta 13433 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, 2004. # Tadashi Jokagi , 2005. @@ -6,2169 +6,2147 @@ msgid "" msgstr "" "Project-Id-Version: phpLDAPadmin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2004-01-14 17:45+0200\n" -"PO-Revision-Date: 2008-03-24 16:27+0000\n" -"Last-Translator: Tadashi Jokagi \n" +"POT-Creation-Date: 2005-12-15 19:00+0900\n" +"PO-Revision-Date: 2005-12-15 19:25+0900\n" +"Last-Translator: Tadashi Jokagi \n" "Language-Team: phpLDAPadmin \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-19 00:52+0000\n" -"X-Generator: Launchpad (build Unknown)\n" - -#: ../../htdocs/mass_delete.php:86 -#, php-format -msgid "%s of %s entries failed to be deleted." -msgstr "%s 個のエントリが %s 個のエントリ中で削除できませんでした。" - -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "" - -#: ../../lib/HTMLTree.php:486 -msgid "(Session timed out. Automatically logged out.)" -msgstr "(セッションはタイムアウトです。自動でログアウトしました)" - -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr "" - -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" -msgstr "" - -#: ../../lib/search_form_advanced.php:103 -msgid "A list of attributes to display in the results (comma-separated)" -msgstr "結果から属性の一覧を表示 (カンマ区切り)" - -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 -msgid "A random password was generated for you" -msgstr "ランダムなパスワードが生成されました。" - -#: ../../lib/ldif_functions.php:532 -msgid "A valid deleteoldrdn attribute should be specified" -msgstr "" - -#: ../../lib/ldif_functions.php:243 -msgid "A valid dn line is required." -msgstr "有効な dn 行が必要です。" - -#: ../../lib/ldif_functions.php:538 -msgid "A valid newrdn attribute should be specified" -msgstr "" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 -msgid "Add" -msgstr "追加" - -#: ../../htdocs/add_value_form.php:182 -msgid "Add New Value" -msgstr "新規値を追加する" - -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 -msgid "Add ObjectClass and Attributes" -msgstr "ObjectClass と属性を追加" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 -#, php-format -msgid "Add an additional value to attribute '%s'" -msgstr "追加値を属性「%s」に追加する" - -#: ../../htdocs/add_value_form.php:93 -msgid "Add new" -msgstr "新規追加" - -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 -msgid "Add new ObjectClass" -msgstr "新規 ObjectClass を追加する" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 -msgid "Add new attribute" -msgstr "新規属性を追加" - -#: ../../htdocs/add_attr_form.php:114 -msgid "Add new binary attribute" -msgstr "新規バイナリ属性を追加" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "" - -#: ../../htdocs/ldif_import.php:62 -msgid "Adding..." -msgstr "追加中..." - -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 -msgid "Advanced Search Form" -msgstr "高度な検索フォーム" - -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "" - -#: ../../htdocs/schema.php:110 -msgid "Aliases" -msgstr "別名" - -#: ../../htdocs/mass_delete.php:88 -msgid "All entries deleted successfully." -msgstr "すべてのエントリの削除に成功しました。" - -#: ../../lib/EntryWriter1.php:825 -#, php-format -msgid "An attribute (%s) was modified and is highlighted below." -msgstr "ひとつの属性 (%s) は修正され、下記でハイライトされました。" - -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "" - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "" - -#: ../../htdocs/login.php:164 -msgid "Anonymous Bind" -msgstr "匿名接続" - -#: ../../htdocs/delete_form.php:102 -msgid "Are you sure you want to permanently delete this object?" -msgstr "本当にこのオブジェクトを永続的に削除しますか?" - -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 -msgid "Attribute" -msgstr "属性" - -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "属性タイプ" - -#: ../../lib/ldif_functions.php:455 -msgid "Attribute is not valid" -msgstr "有効な DN ではありません。" - -#: ../../lib/ldif_functions.php:375 -msgid "Attribute not well formed" -msgstr "属性は整形されていません" - -#: ../../htdocs/login_form.php:63 -msgid "Authenticate" -msgstr "認証" - -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "" - -#: ../../htdocs/entry_chooser.php:65 -msgid "Back Up..." -msgstr "バックアップ..." - -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 -msgid "Bad username or password. Please try again." -msgstr "ユーザー名かパスワードがおかしいです。もう一度行ってください。" - -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 -msgid "Base (base dn only)" -msgstr "ベース (ベース dn のみ)" - -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 -msgid "Base DN" -msgstr "ベース DN" - -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 -msgid "Binary value" -msgstr "バイナリ値" - -#: ../../htdocs/copy.php:61 -msgid "Building snapshot of tree to copy... " -msgstr "コピーするツリーのスナップショットを構築中... " - -#: ../../lib/export_functions.php:38 -msgid "CSV (Spreadsheet)" -msgstr "CSV (スプレッドシート)" - -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 -msgid "Cancel" -msgstr "取り消し" - -#: ../../htdocs/compare.php:343 -msgid "Check password" -msgstr "パスワード確認" - -#: ../../lib/EntryWriter1.php:2427 -msgid "Check password..." -msgstr "パスワード検査..." - -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "" - -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "" - -#: ../../lib/functions.php:3223 -msgid "Click to popup a dialog to select a date graphically" -msgstr "" - -#: ../../lib/functions.php:2239 -msgid "Click to popup a dialog to select an entry (DN) graphically" -msgstr "" - -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 -#, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "" - -#: ../../htdocs/schema.php:106 -msgid "Collective" -msgstr "集合" - -#: ../../htdocs/update_confirm.php:303 -msgid "Commit" -msgstr "コミット" - -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 -msgid "Compare" -msgstr "比較" - -#: ../../htdocs/compare_form.php:21 -msgid "Compare another DN with" -msgstr "次の DN と別の DN を比較:" - -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 -msgid "Compare this DN with another" -msgstr "この DN と別のものを比較" - -#: ../../lib/EntryWriter1.php:776 -msgid "Compare with another entry" -msgstr "別のエントリと比較" - -#: ../../htdocs/compare.php:42 -msgid "Comparing the following DNs" -msgstr "次の DN と比較中" - -#: ../../htdocs/export_form.php:84 -msgid "Compress" -msgstr "圧縮" - -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "" - -#: ../../htdocs/mass_delete.php:92 -#, php-format -msgid "Confirm mass delete of %s entries on server %s" -msgstr "%s エントリをサーバー %s から一括削除の確認" - -#: ../../lib/EntryWriter1.php:327 -msgid "Container" -msgstr "コンテナー" - -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "" - -#: ../../lib/ldif_functions.php:525 -msgid "Container is null" -msgstr "コンテナーが NULL です。" - -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 -msgid "Copy" -msgstr "" - -#: ../../htdocs/copy_form.php:96 -msgid "Copy " -msgstr "コピー " - -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:741 -msgid "Copy or move this entry" -msgstr "このエントリをコピー" - -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "" - -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "" - -#: ../../htdocs/copy.php:57 -msgid "Copying " -msgstr "Copying " - -#: ../../htdocs/ldif_import.php:70 -msgid "Could not add object:" -msgstr "オブジェクトを追加できませんでした:" - -#: ../../htdocs/create.php:133 -msgid "Could not add the object to the LDAP server." -msgstr "LDAP サーバーにオブジェクトを追加できませんでした。" - -#: ../../htdocs/login.php:137 -msgid "Could not bind anonymously to server." -msgstr "サーバーに匿名接続できませんでした。" - -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "" - -#: ../../lib/server_functions.php:347 -#, php-format -msgid "Could not connect to \"%s\" on port \"%s\"" -msgstr "\"%s\" のポート \"%s\" に接続できませんでした" - -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "" - -#: ../../htdocs/ldif_import.php:71 -msgid "Could not delete object:" -msgstr "オブジェクトを削除できませんでした:" - -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 -#, php-format -msgid "Could not delete the entry: %s" -msgstr "エントリを削除できませんでした: %s" - -#: ../../htdocs/entry_chooser.php:101 -msgid "Could not determine base DN" -msgstr "ベース DN を決定することが出来ませんでした" - -#: ../../lib/HTMLTree.php:82 -msgid "Could not determine the root of your LDAP tree." -msgstr "LDAP ツリーのルートが決定できません。" - -#: ../../lib/functions.php:1849 -#, php-format -msgid "Could not fetch jpeg data from LDAP server for attribute %s." -msgstr "属性 %s 用に LDAP サーバーから jpeg データを取得できませんでした。" - -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 -msgid "Could not logout." -msgstr "ログアウトできませんでした。" - -#: ../../htdocs/ldif_import.php:74 -msgid "Could not modify object:" -msgstr "オブジェクトを修正できませんでした:" - -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 -msgid "Could not perform ldap_mod_add operation." -msgstr "ldap_mod_add 操作を実行できませんでした。" - -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 -msgid "Could not perform ldap_modify operation." -msgstr "ldap_modify 操作が実行できませんでした。" - -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 -msgid "Could not rename object:" -msgstr "オブジェクトを名称変更できませんでした:" - -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 -msgid "Could not rename the entry" -msgstr "エントリの名称変更が出来ませんでした" - -#: ../../htdocs/schema.php:31 -msgid "Could not retrieve schema from" -msgstr "次のスキーマを取得できません:" - -#: ../../htdocs/login.php:152 -msgid "Could not set cookie." -msgstr "Cookie を設定できませんでした。" - -#: ../../lib/server_functions.php:265 -msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "TLS を開始できません。LDAP サーバーの設定を確認してください。" - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "" -"$jpeg_temp_dir で指定したディレクトリ %s に書き込みできません。ウェブサーバーがそこにファイルを書き込みできることを確認してください。" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "オブジェクト作成" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "子エントリ作成" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "作成しますか?" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "ここに新規エントリを追加" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "クレジット" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "現在の一覧:" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "DN" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "DSLM エクスポート: %s" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "削除" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "%s 削除" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "チェックされたエントリを削除する" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "写真削除" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "コピーの後に削除 (移動):" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "%s オブジェクトをすべて削除" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "写真を削除する" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "このエントリを削除" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "%s 削除中" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "削除中..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "サーバー \"%s\" から削除中" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "説明" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "対象 DN" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "対象サーバー" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "対象サーバーは現在読み込み専用です。" - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "関連名" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "本当に%s %s %sを削除しますか" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "変更をしたいですか?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "ドキュメント" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "エラーで停止しない" - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "寄附" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "検索実行中にエラーに遭遇しました。" - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "追加したい値を入力する:" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "エントリ" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "エントリ %s とサブツリーの削除に成功しました。" - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "エントリ選択" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "等価" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "エラー" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "mass_delete.php 呼び出し中のエラーです。POST 値から mass_delete が見かりません。" - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "エラーコード" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "エクスポート" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "エクスポート書式" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "サブツリーをエクスポート" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "失敗しました" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "属性の追加に失敗しました。" - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "DN のコピーに失敗しました: " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "エントリ %s の削除に失敗しました" - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "ファイル" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "フィルター" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "書式" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "%s に phpLDAPadmin ( http://www.phpldapadmin.com/ ) で生成しました。" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "Go" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "戻る" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "%s に移動" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "ヘルプ" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "内部属性を隠す" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "Hint: スキーマ違反がなければ、異なるサーバー間のコピー処理のみ行います。" - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "ヒント: 属性を削除するにはテキストフィールドを空にして保存をクリックします。" - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "ヒント: 属性のスキーマを閲覧するには、属性名をクリックします。" - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "ヒント: ひとつの構造 objectClass を選択しなければなりません (上で強調表示されています)" - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "ホーム" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please report it." -msgstr "もしそうなら、それを報告してください。" - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "LDIF ファイルインポート" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "LDIF ファイルからのインポートエントリ" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "%s は活動的でなかったのでログアウトしました。" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "システム属性を含む" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "派生元" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "継承元" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "不適当なアクセス権限です。" - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "無効な RDN 値" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "無効なエクスポート書式" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "これは phpLDAPadmin のバグですか?" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "LDAP サーバーが root を見えないように設定しているように見えます。" - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "一致ルールにジャンプ" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "属性タイプに移動" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "objectClass に移動" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "この objectClass 定義に移動" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "LDIF エクスポート: %s" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "LDIF 解析エラー" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "行" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "行番号" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "行末" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "エントリの一覧を削除しました:" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "ログイン DN" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "ログイン..." - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "このサーバーのログアウト" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "" - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "おかしい mass_delete 配列です。" - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "一括削除中" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "一括削除が有効ではありません。次に進む前に config.php でそれを有効にしてください。" - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "適用ルール OID" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "一致ルール" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "最大長" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "最大ファイルサイズ" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "" - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "" - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "" - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "エントリの属性が見当たりません" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "アップロードファイルが見当たりません。" - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "修正に成功しました!" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "修正中..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "名前" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "新規必須属性" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "新しい値" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "いいえ" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "DN が指定されていません" - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "LDIF ファイルが指定されていません。もう一度行ってください。" - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "値がありません" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "属性名が指定されていません。" - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "利用できるエクスポートツールが見つかりません" - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "破棄するキャッシュはありませんでした。" - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "内部属性がありません" - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "誰もそのサーバーにログインしていません。" - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "config.php で定義された照会はありません。" - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "エントリがありません: %s" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "スキーマ項目がありません: \"%s\"" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "バージョンが見つかりません。1 と仮定します。" - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: templates/creation/custom.php:9 htdocs/add_attr.php:26 +#: htdocs/add_attr_form.php:22 htdocs/add_oclass.php:27 +#: htdocs/add_oclass_form.php:28 htdocs/add_value.php:27 +#: htdocs/add_value_form.php:24 htdocs/compare.php:24 htdocs/compare.php:28 +#: htdocs/compare_form.php:18 htdocs/copy.php:29 htdocs/copy_form.php:22 +#: htdocs/create.php:28 htdocs/create_form.php:23 htdocs/delete.php:22 +#: htdocs/delete_attr.php:23 htdocs/delete_form.php:23 +#: htdocs/download_binary_attr.php:17 htdocs/entry_chooser.php:43 +#: htdocs/expand.php:24 htdocs/export.php:17 htdocs/ldif_import.php:19 +#: htdocs/ldif_import_form.php:24 htdocs/mass_delete.php:26 +#: htdocs/rdelete.php:22 htdocs/rename.php:23 htdocs/rename_form.php:22 +#: htdocs/schema.php:22 htdocs/search.php:25 htdocs/server_info.php:50 +#: htdocs/template_engine.php:19 htdocs/template_engine.php:39 +#: htdocs/update.php:33 msgid "" "Not enough information to login to server. Please check your configuration." msgstr "サーバーにログインする情報が不足しています。設定を確認してください。" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "" +#: templates/creation/custom.php:17 +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "ステップ 1/2: 名前と ObjectClass" -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "注: この objectClass が要求する新しい属性を入力することが要求かもしれません" +#: templates/creation/custom.php:25 +msgid "Relative Distinguished Name" +msgstr "関連識別名" -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" -"注: " -"これは潜在的に非常に危険です。また、自己責任でこれをします。このオペレーションは取り消せません。エイリアス・referralとその他の問題を考察を持ってく" -"ださい。" +#: templates/creation/custom.php:25 +msgid "RDN" +msgstr "RDN" -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "通知です。検索サイズが制限を越えました。" +#: templates/creation/custom.php:26 +msgid "(example: cn=MyNewPerson)" +msgstr "(例: cn=MyNewPerson)" -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" +#: templates/creation/custom.php:29 +msgid "Container" +msgstr "コンテナー" -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 +#: templates/creation/custom.php:35 htdocs/schema.php:50 htdocs/schema.php:52 msgid "ObjectClasses" msgstr "ObjectClass 一覧" -#: ../../htdocs/add_oclass.php:26 +#: templates/creation/custom.php:53 msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." +"Hint: You must choose exactly one structural objectClass (shown in bold " +"above)" msgstr "" +"ヒント: ひとつの構造 objectClass を選択しなければなりません (上で強調表示され" +"ています)" -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "" - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "旧式" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "古い値" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "ひとつ (基準の下の 1 レベル)" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "オプション属性" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "Or lastly, LDAP サーバーはこの情報を提供していません。" - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "Ordering" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "ページ %d" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "派生先" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "パスワード" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "パスワードチェックツール" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "パスワードが一致しません!" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "パスワードが一致しました!" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "さらに永久にすべての子を削除しますか?" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" -"phpLDAPadmin の設定ファイル config.php で、書き込み可能なディレクトリを $jpeg_temp_dir に設定してください。" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "config.php でそれを指定してください。" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "事前定義検索" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 +#: templates/creation/custom.php:55 msgid "Proceed >>" msgstr "進む >>" -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "進む >>" +#: templates/creation/custom.php:61 +msgid "You left the RDN field blank." +msgstr "RDN フィールドが空です。" -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "サーバースキーマを含む、phpLDAPadmin のすべてのキャッシュを破棄しました。" - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "キャッシュ破棄" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "%s バイトのキャッシュを破棄しました。" - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "本当に属性を削除する" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "再帰コピー" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "再帰コピー進行" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "再帰削除進行" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "同様にこのオブジェクトのすべての子を再帰コピーします。" - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "展開済みの内容を再描画 対象:" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "このエントリを再描画する" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "名称変更" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "エントリ名称変更" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "名称変更中..." - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "不都合報告" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "機能リクエスト" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "必須属性" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "objectClass %s の必須属性" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "変更を保存" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "このオブジェクトのダンプ保存" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "このオブジェクトと子の全てをダンプ保存する" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "ファイルに保存" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "サーバーのスキーマ" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "検索" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "検索フィルター" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "検索スコープ" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "どのエントリを検索" - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "セキュリティエラー: アップロードされたファイルは悪意のあるものかもしれません。" - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "事前定義された検索を選択" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "作成処理のテンプレートを選択" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "LDIF ファイルを選択する" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "サーバー" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "サーバー情報: " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "サーバーは自分自身で次の情報を報告しました。" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "属性表示" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "内部属性を表示" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "" - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 -msgid "Simple Search Form" -msgstr "簡易検索フォーム" - -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "パスワードを変更したので、今から新しいパスワードで再ログインしなければなりません。" - -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "単一の値" - -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "飛ばす" - -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "いくつかの属性 (%s) は修正され、下記でハイライトされました。" - -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "すみません、この LDAP サーバーと phpLDAPadmin を使用することを許可していません。" - -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "元の DN" - -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "" - -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "標準 LDAP 検索フィルター。例: (&(sn=Smith)(givenname=David))" - -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "" - -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "サブ (入力されたサブツリー)" - -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "副文字列ルール" - -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "成功" - -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "" - -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "" - -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "エントリの切り替え" - -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "文法" - -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "文法 OID" - -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "文法一覧" - -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "テンプレート" - -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" - -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "" - -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "" - -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "phpLDAPadmin の設定で属性 \"%s\" は読み込み専用に設定されています。" - -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "" - -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "追加、削除もしくは置換には属性名がなければなりません。" - -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "" - -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "" - -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "" - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "" - -#: ../../htdocs/create.php:39 +#: templates/creation/custom.php:65 #, php-format msgid "The container you specified (%s) does not exist. Please try again." msgstr "指定したコンテナー(%s)が存在しません。もう一度行ってください。" -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "対象先コンテナー (%s) は存在しません。" - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "対象エントリ (%s) は既に存在します。" - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "" - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "" - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "エントリは有効ではありません。" - -#: ../../htdocs/add_attr.php:56 +#: templates/creation/custom.php:70 htdocs/add_oclass_form.php:31 msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "あなたの選んだファイルは空か存在しないかのいずれかです。戻ってからもう一度試してください。" - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "選択したファイルは、部分的なアップロードでした。likley due to a network error." - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "アップロードされたファイルが大きすぎます。php.ini の upload_max_size 設定を確認してください。" - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" +"You did not select any ObjectClasses for this object. Please go back and do " +"so." msgstr "" +"このオブジェクトのためのいくつかの ObjectClass を選択しませんでした。戻ってそ" +"のように実行してください。" -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" -msgstr "" +#: templates/creation/custom.php:128 +msgid "Step 2 of 2: Specify attributes and values" +msgstr "Step 2 of 2: 属性と値を指定" -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "検索結果がありませんでした。" +#: templates/creation/custom.php:139 htdocs/schema.php:480 +msgid "Required Attributes" +msgstr "必須属性" -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "このサーバーはすべての LDAP プロトコルをサポートしていません。" +#: templates/creation/custom.php:142 templates/creation/custom.php:166 +#: htdocs/schema.php:178 htdocs/schema.php:264 htdocs/schema.php:279 +#: htdocs/schema.php:354 htdocs/schema.php:440 htdocs/schema.php:463 +#: htdocs/schema.php:508 htdocs/schema.php:537 +msgid "none" +msgstr "なし" -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "対象元と対象先 DN が同じです。" - -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "URL 属性値は file:/// で始まっていなければなりません。" - -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "" - -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "この属性は phpLDAP 管理者により、読み込み専用で設定されています。" - -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "" - -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "この属性は RDN に必要です。" - -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "ベースエントリが存在しません。" - -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "" - -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "このエントリは存在しません。" - -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "このエントリは属性を持っていません" - -#: ../../htdocs/delete_form.php:46 +#: templates/creation/custom.php:149 htdocs/compare.php:126 +#: htdocs/template_engine.php:621 #, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "このエントリは %s エントリを含むサブツリーのルートです。" +msgid "Note: '%s' is an alias for '%s'" +msgstr "注: '%s' は '%s' のエイリアスです。" -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "これは構造 ObjectClass なので削除できませんでした。" +#: templates/creation/custom.php:163 htdocs/schema.php:481 +msgid "Optional Attributes" +msgstr "オプション属性" -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "これは有効な DN ではありません。" +#: templates/creation/custom.php:178 +msgid "Optional Binary Attributes" +msgstr "オプションバイナリ属性" -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "この objectClass は旧式です。" +#: templates/creation/custom.php:189 templates/template_header.php:171 +#: htdocs/create_form.php:34 htdocs/template_engine.php:454 +#: htdocs/template_engine.php:510 +msgid "Create Object" +msgstr "オブジェクト作成" -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" +#: templates/template_header.php:35 templates/template_header.php:173 +#: htdocs/add_attr_form.php:35 htdocs/add_value_form.php:63 +#: htdocs/compare.php:61 htdocs/compare.php:64 htdocs/compare_form.php:34 +#: htdocs/copy_form.php:57 htdocs/create_form.php:42 htdocs/delete_form.php:34 +#: htdocs/delete_form.php:112 htdocs/export_form.php:51 +#: htdocs/ldif_import.php:46 htdocs/ldif_import_form.php:31 +#: htdocs/rename_form.php:32 lib/export_functions.php:198 +#: lib/search_form_advanced.php:36 lib/search_form_simple.php:30 +#: lib/tree_functions.php:40 +msgid "Server" +msgstr "サーバー" + +#: templates/template_header.php:35 htdocs/add_attr_form.php:35 +#: htdocs/add_value_form.php:65 htdocs/compare.php:61 htdocs/compare.php:64 +#: htdocs/compare_form.php:36 htdocs/copy_form.php:57 +#: htdocs/delete_form.php:34 htdocs/delete_form.php:111 +#: htdocs/rename_form.php:32 htdocs/update_confirm.php:32 +msgid "Distinguished Name" +msgstr "関連名" + +#: templates/template_header.php:40 +msgid "Refresh this entry" +msgstr "このエントリを再描画する" + +#: templates/template_header.php:40 +#, fuzzy +msgid "Refresh" +msgstr "再描画" + +#: templates/template_header.php:41 +msgid "Save a dump of this object" +msgstr "このオブジェクトのダンプ保存" + +#: templates/template_header.php:41 htdocs/export_form.php:39 +#: htdocs/export_form.php:48 +msgid "Export" +msgstr "エクスポート" + +#: templates/template_header.php:44 +msgid "Copy this object to another location, a new DN, or another server" msgstr "" +"このオブジェクトを異なるロケーション、新しい DNもしくは別のサーバーにコピーす" +"る" -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "このサーバーはなにも報告するものはありません。" +#: templates/template_header.php:44 +msgid "Copy or move this entry" +msgstr "このエントリをコピー" -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "個のテンプレートはこのコンテナーを許可していません。" +#: templates/template_header.php:47 +msgid "Hide internal attributes" +msgstr "内部属性を隠す" -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" +#: templates/template_header.php:50 +msgid "Show internal attributes" +msgstr "内部属性を表示" + +#: templates/template_header.php:56 +msgid "You will be prompted to confirm this decision" +msgstr "この判断を確認するように促されるでしょう。" + +#: templates/template_header.php:56 +msgid "Delete this entry" +msgstr "このエントリを削除" + +#: templates/template_header.php:57 htdocs/rename_form.php:38 +msgid "Rename" +msgstr "名称変更" + +#: templates/template_header.php:62 +msgid "Hint: To delete an attribute, empty the text field and click save." msgstr "" +"ヒント: 属性を削除するにはテキストフィールドを空にして保存をクリックします。" -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "" +#: templates/template_header.php:67 +msgid "Compare with another entry" +msgstr "別のエントリと比較" -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "再ログインするには次のリンクをクリックしてください:" +#: templates/template_header.php:71 +msgid "Create a child entry" +msgstr "子エントリ作成" -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "総エントリ" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "種類" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 +#: templates/template_header.php:72 htdocs/add_attr_form.php:34 +#: htdocs/add_attr_form.php:73 #, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "" -"Unable to bind to %s with your with auto_uid credentials. " -"設定ファイルを確認してください。" +msgid "Add new attribute" +msgstr "新規属性を追加" -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "" -"Unable to bind to %s with your with unique_attrs credentials. " -"設定ファイルを確認してください。" +#: templates/template_header.php:87 +msgid "View 1 child" +msgstr "ひとつの子を閲覧" -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "削除できません。サーバーは読み込み専用モードです。" - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "ファイルを開けません" - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "ファイルを読み込めません" - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "未知の auth_type: %s" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "" - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "未承認の基準オプション: " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "認識できない書式の検索結果です: %s" - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "アップロードされた LDIF ファイルが空です。" - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "使用法" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "左へのメニューを使用して操作します" - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "属性で使する" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "objectClass を使する" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "ユーザー修正" - -#: ../../lib/EntryWriter1.php:797 +#: templates/template_header.php:87 #, php-format msgid "View %s children" msgstr "%s 個の子を閲覧" -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "ひとつの子を閲覧" +#: templates/template_header.php:88 +msgid "Save a dump of this object and all of its children" +msgstr "このオブジェクトと子の全てをダンプ保存する" -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "スキーマを閲覧 対象:" +#: templates/template_header.php:88 +msgid "Export subtree" +msgstr "サブツリーをエクスポート" -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "サーバーが提供する情報を閲覧" +#: templates/template_header.php:94 +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "ヒント: 属性のスキーマを閲覧するには、属性名をクリックします。" -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "この objectClass のスキーマ説明を閲覧" - -#: ../../lib/EntryWriter1.php:819 +#: templates/template_header.php:100 msgid "Viewing entry in read-only mode." msgstr "読み込みモードでエントリを閲覧中。" -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" +#: templates/template_header.php:107 +#, php-format +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "ひとつの属性 (%s) は修正され、下記でハイライトされました。" -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "" +#: templates/template_header.php:108 +#, php-format +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "いくつかの属性 (%s) は修正され、下記でハイライトされました。" -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "再帰的なコピーを行なう場合、このフィルタと一致するエントリのみコピーしてください。" +#: templates/template_header.php:133 htdocs/compare.php:165 +#: htdocs/server_info.php:85 htdocs/template_engine.php:672 +#, php-format +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "属性タイプ '%s' のためのスキーマ定義を見るためにクリックしてください。" -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "はい" +#: templates/template_header.php:141 htdocs/compare.php:277 +#: htdocs/template_engine.php:721 +msgid "Binary value" +msgstr "バイナリ値" -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "はい、削除します!" +#: templates/template_header.php:147 templates/template_header.php:151 +#: htdocs/add_value_form.php:93 htdocs/add_value_form.php:98 +#: htdocs/compare.php:281 htdocs/compare.php:284 +#: htdocs/template_engine.php:731 htdocs/template_engine.php:734 +msgid "download value" +msgstr "ダウンロード値" -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "あなたは 'https' を使っていません。ログイン情報はブラウザからクリアテキストで送信されます、" +#: templates/template_header.php:163 +msgid "No internal attributes" +msgstr "内部属性がありません" -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 +#: templates/template_header.php:173 +msgid "using template" +msgstr "使用中のテンプレート" + +#: htdocs/add_attr.php:24 htdocs/add_attr_form.php:20 htdocs/add_oclass.php:25 +#: htdocs/add_oclass_form.php:26 htdocs/add_value.php:25 +#: htdocs/add_value_form.php:22 htdocs/copy_form.php:20 htdocs/create.php:26 +#: htdocs/create_form.php:21 htdocs/delete.php:20 htdocs/delete_attr.php:21 +#: htdocs/delete_form.php:21 htdocs/download_binary_attr.php:15 +#: htdocs/ldif_import_form.php:22 htdocs/rdelete.php:20 htdocs/rename.php:21 +#: htdocs/rename_form.php:20 htdocs/update.php:31 htdocs/update_confirm.php:20 msgid "You cannot perform updates while server is in read-only mode" msgstr "サーバーは読み込みモードなので、更新を実行できません。" -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "" -"子エントリを持つエントリは名称変更できません (eg, the rename operation is not allowed on non-leaf " -"entries)" - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "RDN を変更しませんでした" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "このオブジェクトのためのいくつかの ObjectClass を選択しませんでした。戻ってそのように実行してください。" - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "削除するエントリが選択されていません。" - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "" - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "" - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "" - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "RDN フィールドが空です。" - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 +#: htdocs/add_attr.php:37 htdocs/add_attr.php:77 msgid "You left the attribute value blank. Please go back and try again." msgstr "属性値が空です。戻ってからもう一度試してください。" -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "対象 DN がブランクで残されました。" - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "パスワードが空です。" - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "要求された属性(%s)には空の値を残しました。" - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "変更はありません" - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "エクスポート書式を選ばなければなりません。" - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "ファイルをアップロードするか、テキストボックスに LDIF を提供しなければなりません。" - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "DN を指定しなければなりません" - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "この属性 %s を追加するには次の ObjectClass のうちひとつを必要とします。" - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "この判断を確認するように促されるでしょう。" - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "PHP の設定でファイルのアップロードが無効です。続行する前に、php.ini を確認してください。" - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "インストールされた PHP は mhash() をサポートしていません。SHA ハッシュをすることができません。" - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "インストールされている PHP は TLS をサポートしていません。" - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "PHP.INI は「file_uploads = ON」ではありません。PHP のファイルアップロードを有効にしてください。" - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "セッションは" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 +#: htdocs/add_attr.php:48 htdocs/add_oclass.php:51 htdocs/add_value.php:57 +#: htdocs/create.php:114 htdocs/update.php:75 #, php-format msgid "" "Your attempt to add %s (%s) to
%s
is NOT " "allowed. That attribute/value belongs to another entry.

You might like to " "search for that entry." msgstr "" -"%s (%s) の %s への追加の試みは許可されていません
その属性/値は別のエントリが所有しています。

そのエントリを検索などするしょう。" +"%s (%s) の %s への追加の試みは許可されていません
その属性/値は別のエントリが所有しています。

そのエントリを検索などするしょう。" -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." +#: htdocs/add_attr.php:53 +msgid "" +"The file you chose is either empty or does not exist. Please go back and try " +"again." +msgstr "" +"あなたの選んだファイルは空か存在しないかのいずれかです。戻ってからもう一度試" +"してください。" + +#: htdocs/add_attr.php:61 htdocs/add_attr.php:81 htdocs/add_attr.php:86 +msgid "Security error: The file being uploaded may be malicious." +msgstr "" +"セキュリティエラー: アップロードされたファイルは悪意のあるものかもしれませ" +"ん。" + +#: htdocs/add_attr.php:65 htdocs/add_attr.php:69 +msgid "" +"The file you uploaded is too large. Please check php.ini, upload_max_size " +"setting" +msgstr "" +"アップロードされたファイルが大きすぎます。php.ini の upload_max_size 設定を確" +"認してください。" + +#: htdocs/add_attr.php:73 +msgid "" +"The file you selected was only partially uploaded, likley due to a network " +"error." +msgstr "" +"選択したファイルは、部分的なアップロードでした。likley due to a network " +"error." + +#: htdocs/add_attr.php:127 +msgid "Failed to add the attribute." +msgstr "属性の追加に失敗しました。" + +#: htdocs/add_attr_form.php:107 htdocs/add_attr_form.php:155 +msgid "Add" +msgstr "追加" + +#: htdocs/add_attr_form.php:114 +msgid "no new attributes available for this entry" +msgstr "このエントリに利用可能な新規属性はありません。" + +#: htdocs/add_attr_form.php:120 +msgid "Add new binary attribute" +msgstr "新規バイナリ属性を追加" + +#: htdocs/add_attr_form.php:158 +msgid "" +"Your PHP configuration has disabled file uploads. Please check php.ini " +"before proceeding." +msgstr "" +"PHP の設定でファイルのアップロードが無効です。続行する前に、php.ini を確認し" +"てください。" + +#: htdocs/add_attr_form.php:161 +#, php-format +msgid "Maximum file size: %s" +msgstr "最大ファイルサイズ: %s" + +#: htdocs/add_attr_form.php:170 +msgid "no new binary attributes available for this entry" +msgstr "このエントリに利用可能な新規バイナリ属性はありません。" + +#: htdocs/add_oclass.php:60 htdocs/add_value.php:68 +msgid "Could not perform ldap_mod_add operation." +msgstr "ldap_mod_add 操作を実行できませんでした。" + +#: htdocs/add_oclass_form.php:88 htdocs/add_oclass_form.php:109 +msgid "New Required Attributes" +msgstr "新規必須属性" + +#: htdocs/add_oclass_form.php:89 +msgid "This action requires you to add" msgstr "" -#: ../../lib/functions.php:1172 +#: htdocs/add_oclass_form.php:90 htdocs/add_oclass_form.php:95 +msgid "new attributes" +msgstr "新規属性" + +#: htdocs/add_oclass_form.php:94 +msgid "" +"Instructions: In order to add these objectClass(es) to this entry, you must " +"specify" +msgstr "" + +#: htdocs/add_oclass_form.php:96 +msgid "that this objectClass requires. You can do so in this form." +msgstr "それは objectClass に必要です。このフォームでそうすることができます。" + +#: htdocs/add_oclass_form.php:120 htdocs/compare.php:529 +msgid "Add ObjectClass and Attributes" +msgstr "ObjectClass と属性を追加" + +#: htdocs/add_value.php:38 htdocs/delete_attr.php:37 htdocs/update.php:86 +#, php-format +msgid "" +"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " +"configuration." +msgstr "phpLDAPadmin の設定で属性 \"%s\" は読み込み専用に設定されています。" + +#: htdocs/add_value_form.php:57 +msgid "Add new" +msgstr "新規追加" + +#: htdocs/add_value_form.php:59 +msgid "value to" +msgstr "" + +#: htdocs/add_value_form.php:67 +msgid "Current list of" +msgstr "現在の一覧:" + +#: htdocs/add_value_form.php:68 +msgid "values for attribute" +msgstr "属性の値" + +#: htdocs/add_value_form.php:79 htdocs/add_value_form.php:104 +msgid "" +"Note: You will get an \"inappropriate matching\" error if you have not setup " +"an EQUALITY rule on your LDAP server for this attribute." +msgstr "" +"注: LDAP サーバーでこの属性の EQUALITY ルールをセットアップしていなかった場" +"合、\"inappropriate matching\" エラーを取得するでしょう。" + +#: htdocs/add_value_form.php:130 +msgid "Enter the value you would like to add:" +msgstr "追加したい値を入力する:" + +#: htdocs/add_value_form.php:152 htdocs/compare.php:531 +msgid "Add new ObjectClass" +msgstr "新規 ObjectClass を追加する" + +#: htdocs/add_value_form.php:158 +msgid "" +"Note: You may be required to enter new attributes that these objectClass(es) " +"require" +msgstr "" +"注: この objectClass が要求する新しい属性を入力することが要求かもしれません" + +#: htdocs/add_value_form.php:190 +msgid "Add New Value" +msgstr "新規値を追加する" + +#: htdocs/add_value_form.php:194 htdocs/ldif_import.php:103 +#: htdocs/ldif_import.php:113 htdocs/ldif_import.php:189 htdocs/schema.php:79 +#: htdocs/schema.php:156 htdocs/schema.php:426 +msgid "Description" +msgstr "説明" + +#: htdocs/add_value_form.php:198 htdocs/schema.php:209 +msgid "Syntax" +msgstr "文法" + +#: htdocs/add_value_form.php:202 htdocs/schema.php:246 +msgid "Maximum Length" +msgstr "最大長" + +#: htdocs/add_value_form.php:202 htdocs/schema.php:254 +msgid "characters" +msgstr "文字" + +#: htdocs/compare.php:31 htdocs/compare.php:33 htdocs/delete.php:30 +#: htdocs/download_binary_attr.php:26 htdocs/rdelete.php:29 +#: htdocs/template_engine.php:42 +#, php-format +msgid "No such entry: %s" +msgstr "エントリがありません: %s" + +#: htdocs/compare.php:53 +msgid "Comparing the following DNs" +msgstr "次の DN と比較中" + +#: htdocs/compare.php:58 htdocs/update_confirm.php:121 +msgid "Attribute" +msgstr "属性" + +#: htdocs/compare.php:74 +msgid "Switch Entry" +msgstr "エントリの切り替え" + +#: htdocs/compare.php:81 +msgid "This entry has no attributes" +msgstr "このエントリは属性を持っていません" + +#: htdocs/compare.php:174 htdocs/template_engine.php:646 +#, php-format +msgid "Required attribute for objectClass(es) %s" +msgstr "objectClass %s の必須属性" + +#: htdocs/compare.php:174 htdocs/template_engine.php:646 +msgid "required" +msgstr "必須" + +#: htdocs/compare.php:184 htdocs/template_engine.php:680 +msgid "" +"This attribute has been flagged as read only by the phpLDAPadmin " +"administrator" +msgstr "この属性は phpLDAP 管理者により、読み込み専用で設定されています。" + +#: htdocs/compare.php:184 htdocs/template_engine.php:680 +#: lib/tree_functions.php:115 +msgid "read only" +msgstr "読み込み専用" + +#: htdocs/compare.php:209 htdocs/compare.php:222 +msgid "No Value" +msgstr "値がありません" + +#: htdocs/compare.php:290 htdocs/template_engine.php:739 +msgid "delete attribute" +msgstr "属性削除" + +#: htdocs/compare.php:313 htdocs/template_engine.php:780 +msgid "empty" +msgstr "空" + +#: htdocs/compare.php:383 +msgid "Check password" +msgstr "パスワード確認" + +#: htdocs/compare.php:401 htdocs/template_engine.php:875 +msgid "true" +msgstr "true" + +#: htdocs/compare.php:402 htdocs/template_engine.php:876 +msgid "false" +msgstr "false" + +#: htdocs/compare.php:403 htdocs/template_engine.php:877 +msgid "none, remove value" +msgstr "いいえ、値を削除します" + +#: htdocs/compare.php:433 htdocs/template_engine.php:932 +msgid "View the schema description for this objectClass" +msgstr "この objectClass のスキーマ説明を閲覧" + +#: htdocs/compare.php:438 htdocs/template_engine.php:938 +#, php-format +msgid "This is a structural ObjectClass and cannot be removed." +msgstr "これは構造 ObjectClass なので削除できませんでした。" + +#: htdocs/compare.php:438 htdocs/template_engine.php:938 +msgid "structural" +msgstr "構造" + +#: htdocs/compare.php:451 htdocs/template_engine.php:947 +#, php-format +msgid "Go to %s" +msgstr "%s に移動" + +#: htdocs/compare.php:529 htdocs/compare.php:540 +#: htdocs/template_engine.php:1025 +msgid "add value" +msgstr "値追加" + +#: htdocs/compare.php:531 +#, php-format +msgid "You need one of the following ObjectClass(es) to add this attribute %s." +msgstr "" +"この属性 %s を追加するには次の ObjectClass のうちひとつを必要とします。" + +#: htdocs/compare.php:540 htdocs/template_engine.php:1025 +#, php-format +msgid "Add an additional value to attribute '%s'" +msgstr "追加値を属性「%s」に追加する" + +#: htdocs/compare.php:557 htdocs/template_engine.php:1041 +msgid "Save Changes" +msgstr "変更を保存" + +#: htdocs/compare.php:568 htdocs/template_engine.php:1064 +msgid "Really delete attribute" +msgstr "本当に属性を削除する" + +#: htdocs/compare_form.php:33 +msgid "Compare another DN with" +msgstr "次の DN と別の DN を比較:" + +#: htdocs/compare_form.php:41 htdocs/compare_form.php:73 +#: htdocs/password_checker.php:32 +msgid "Compare" +msgstr "比較" + +#: htdocs/compare_form.php:41 +msgid "with " +msgstr "と" + +#: htdocs/compare_form.php:50 htdocs/compare_form.php:60 +msgid "Compare this DN with another" +msgstr "この DN と別のものを比較" + +#: htdocs/compare_form.php:50 +msgid "Source DN" +msgstr "元の DN" + +#: htdocs/compare_form.php:60 htdocs/copy_form.php:68 +msgid "Destination DN" +msgstr "対象 DN" + +#: htdocs/compare_form.php:68 htdocs/copy_form.php:73 +msgid "Destination Server" +msgstr "対象サーバー" + +#: htdocs/copy.php:26 +msgid "Destination server is currently READ-ONLY." +msgstr "対象サーバーは現在読み込み専用です。" + +#: htdocs/copy.php:40 +msgid "You left the destination DN blank." +msgstr "対象 DN がブランクで残されました。" + +#: htdocs/copy.php:43 +msgid "The source and destination DN are the same." +msgstr "対象元と対象先 DN が同じです。" + +#: htdocs/copy.php:46 +#, php-format +msgid "The destination entry (%s) already exists." +msgstr "対象エントリ (%s) は既に存在します。" + +#: htdocs/copy.php:49 +#, php-format +msgid "The destination container (%s) does not exist." +msgstr "対象先コンテナー (%s) は存在しません。" + +#: htdocs/copy.php:57 htdocs/copy.php:103 +msgid "Copying " +msgstr "Copying " + +#: htdocs/copy.php:58 +msgid "Recursive copy progress" +msgstr "再帰コピー進行" + +#: htdocs/copy.php:61 +msgid "Building snapshot of tree to copy... " +msgstr "コピーするツリーのスナップショットを構築中... " + +#: htdocs/copy.php:66 htdocs/copy.php:111 htdocs/ldif_import.php:107 +#: htdocs/ldif_import.php:132 htdocs/mass_delete.php:73 htdocs/rdelete.php:66 +#: htdocs/rdelete.php:83 +msgid "Success" +msgstr "成功" + +#: htdocs/copy.php:84 +msgid "Copy successful! Would you like to " +msgstr "コピー成功! Would you like to " + +#: htdocs/copy.php:84 +msgid "view the new entry" +msgstr "新規エントリ閲覧" + +#: htdocs/copy.php:155 +msgid "Failed to copy DN: " +msgstr "DN のコピーに失敗しました: " + +#: htdocs/copy_form.php:56 htdocs/copy_form.php:60 htdocs/copy_form.php:93 +msgid "Copy " +msgstr "コピー " + +#: htdocs/copy_form.php:60 +msgid "to a new object" +msgstr "" + +#: htdocs/copy_form.php:68 +msgid "" +"The full DN of the new entry to be created when copying the source entry" +msgstr "" + +#: htdocs/copy_form.php:77 +msgid "Recursive copy" +msgstr "再帰コピー" + +#: htdocs/copy_form.php:79 +msgid "Recursively copy all children of this object as well." +msgstr "同様にこのオブジェクトのすべての子を再帰コピーします。" + +#: htdocs/copy_form.php:81 +msgid "" +"When performing a recursive copy, only copy those entries which match this " +"filter" +msgstr "" +"再帰的なコピーを行なう場合、このフィルタと一致するエントリのみコピーしてくだ" +"さい。" + +#: htdocs/copy_form.php:81 +msgid "Filter" +msgstr "フィルター" + +#: htdocs/copy_form.php:84 htdocs/copy_form.php:90 +msgid "Delete after copy (move):" +msgstr "コピーの後に削除 (移動):" + +#: htdocs/copy_form.php:86 +msgid "Make sure your filter (above) will select all child records." +msgstr "" + +#: htdocs/copy_form.php:104 +msgid "" +"Hint: Copying between different servers only works if there are no schema " +"violations" +msgstr "" +"Hint: スキーマ違反がなければ、異なるサーバー間のコピー処理のみ行います。" + +#: htdocs/create.php:64 +#, php-format +msgid "You left the value blank for required attribute (%s)." +msgstr "要求された属性(%s)には空の値を残しました。" + +#: htdocs/create.php:150 htdocs/rename.php:74 +msgid "Redirecting..." +msgstr "リダイレクト中..." + +#: htdocs/create.php:150 htdocs/rename.php:74 +msgid "here" +msgstr "ここ" + +#: htdocs/create.php:154 +msgid "Could not add the object to the LDAP server." +msgstr "LDAP サーバーにオブジェクトを追加できませんでした。" + +#: htdocs/create_form.php:35 +msgid "Choose a template" +msgstr "テンプレート選択" + +#: htdocs/create_form.php:36 +msgid "Select a template for the creation process" +msgstr "作成処理のテンプレートを選択" + +#: htdocs/create_form.php:47 +msgid "Template" +msgstr "テンプレート" + +#: htdocs/create_form.php:136 +msgid "" +"This template has been disabled, possibly due to missing schema or missing " +"template XML fields." +msgstr "" +"このテンプレートは、恐らくスキーマか見当たらないか、" +"テンプレート XML 項目が見当たらないため、無効になりました。" + +#: htdocs/create_form.php:138 +msgid "This template is not allowed in this container." +msgstr "個のテンプレートはこのコンテナーを許可していません。" + +#: htdocs/create_form.php:159 htdocs/export_form.php:128 +#: htdocs/ldif_import_form.php:41 htdocs/ldif_import_form.php:51 +#: htdocs/template_engine.php:518 +msgid "Proceed >>" +msgstr "進む >>" + +#: htdocs/delete.php:27 htdocs/rdelete.php:26 +msgid "You must specify a DN" +msgstr "DN を指定しなければなりません" + +#: htdocs/delete.php:36 htdocs/delete.php:49 htdocs/rdelete.php:52 +#, php-format +msgid "Could not delete the entry: %s" +msgstr "エントリを削除できませんでした: %s" + +#: htdocs/delete.php:46 +#, php-format +msgid "Entry %s deleted successfully." +msgstr "%s エントリを削除しました。" + +#: htdocs/delete_attr.php:29 +msgid "No DN specified" +msgstr "DN が指定されていません" + +#: htdocs/delete_attr.php:32 +msgid "No attribute name specified." +msgstr "属性名が指定されていません。" + +#: htdocs/delete_attr.php:52 htdocs/update.php:141 +msgid "Could not perform ldap_modify operation." +msgstr "ldap_modify 操作が実行できませんでした。" + +#: htdocs/delete_form.php:32 +#, php-format +msgid "Delete %s" +msgstr "%s 削除" + +#: htdocs/delete_form.php:37 +msgid "Permanently delete all children also?" +msgstr "さらに永久にすべての子を削除しますか?" + +#: htdocs/delete_form.php:49 +#, php-format +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "このエントリは %s エントリを含むサブツリーのルートです。" + +#: htdocs/delete_form.php:50 +msgid "view entries" +msgstr "エントリ閲覧" + +#: htdocs/delete_form.php:54 +#, php-format +msgid "" +"phpLDAPadmin can recursively delete this entry and all %s of its children. " +"See below for a list of all the entries that this action will delete. Do you " +"want to do this?" +msgstr "" +"phpLDAPadmin は再帰的に、このエントリとその子のすべての %s を削除できます。こ" +"のアクションが削除するすべてのエントリの一覧は、下記を参照してください。本当" +"に本当に削除しますか?" + +#: htdocs/delete_form.php:56 +msgid "" +"Note: this is potentially very dangerous and you do this at your own risk. " +"This operation cannot be undone. Take into consideration aliases, referrals, " +"and other things that may cause problems." +msgstr "" +"注: これは潜在的に非常に危険です。また、自己責任でこれをします。このオペレー" +"ションは取り消せません。エイリアス・referralとその他の問題を考察を持ってくだ" +"さい。" + +#: htdocs/delete_form.php:67 +#, php-format +msgid "Delete all %s objects" +msgstr "%s オブジェクトをすべて削除" + +#: htdocs/delete_form.php:77 htdocs/delete_form.php:132 +#: htdocs/update_confirm.php:233 +msgid "Cancel" +msgstr "取り消し" + +#: htdocs/delete_form.php:90 +msgid "List of entries to be deleted:" +msgstr "エントリの一覧を削除しました:" + +#: htdocs/delete_form.php:109 +msgid "Are you sure you want to permanently delete this object?" +msgstr "本当にこのオブジェクトを永続的に削除しますか?" + +#: htdocs/delete_form.php:111 +msgid "DN" +msgstr "DN" + +#: htdocs/delete_form.php:122 +msgid "Delete" +msgstr "削除" + +#: htdocs/entry_chooser.php:20 +msgid "Entry Chooser" +msgstr "エントリ選択" + +#: htdocs/entry_chooser.php:33 +msgid "Server: " +msgstr "サーバー: " + +#: htdocs/entry_chooser.php:35 +msgid "Looking in: " +msgstr "Looking in: " + +#: htdocs/entry_chooser.php:65 +msgid "Back Up..." +msgstr "バックアップ..." + +#: htdocs/entry_chooser.php:69 +msgid "no entries" +msgstr "エントリがありません" + +#: htdocs/entry_chooser.php:98 +msgid "Could not determine base DN" +msgstr "ベース DN を決定することが出来ませんでした" + +#: htdocs/export.php:40 +msgid "You must choose an export format." +msgstr "エクスポート書式を選ばなければなりません。" + +#: htdocs/export.php:42 +msgid "Invalid export format" +msgstr "無効なエクスポート書式" + +#: htdocs/export.php:86 +msgid "No available exporter found." +msgstr "利用できるエクスポートツールが見つかりません" + +#: htdocs/export_form.php:30 lib/search_form_advanced.php:66 +msgid "Base (base dn only)" +msgstr "ベース (ベース dn のみ)" + +#: htdocs/export_form.php:31 lib/search_form_advanced.php:63 +msgid "One (one level beneath base)" +msgstr "ひとつ (基準の下の 1 レベル)" + +#: htdocs/export_form.php:32 lib/search_form_advanced.php:60 +msgid "Sub (entire subtree)" +msgstr "サブ (入力されたサブツリー)" + +#: htdocs/export_form.php:54 lib/search_form_advanced.php:41 +msgid "Base DN" +msgstr "ベース DN" + +#: htdocs/export_form.php:61 lib/export_functions.php:199 +#: lib/search_form_advanced.php:56 +msgid "Search Scope" +msgstr "検索スコープ" + +#: htdocs/export_form.php:74 lib/export_functions.php:200 +#: lib/search_form_advanced.php:75 +msgid "Search Filter" +msgstr "検索フィルター" + +#: htdocs/export_form.php:77 lib/search_form_advanced.php:82 +msgid "Show Attributtes" +msgstr "属性表示" + +#: htdocs/export_form.php:80 +msgid "Include system attributes" +msgstr "システム属性を含む" + +#: htdocs/export_form.php:83 +msgid "Save as file" +msgstr "ファイルに保存" + +#: htdocs/export_form.php:86 +msgid "Compress" +msgstr "圧縮" + +#: htdocs/export_form.php:99 +msgid "Export format" +msgstr "エクスポート書式" + +#: htdocs/export_form.php:113 +msgid "Line ends" +msgstr "行末" + +#: htdocs/index.php:71 +msgid "" +"You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do " +"so. An example config file is provided in 'config/config.php.example'" +msgstr "" +"phpLDAPadmin の設定をする必要があります。" +"ファイル「config/config.php」の変更をしてください。" +"サンプル設定ファイルとして「config.php.example」を提供しています。" + +#: htdocs/ldif_import.php:33 +msgid "Missing uploaded file." +msgstr "アップロードファイルが見当たりません。" + +#: htdocs/ldif_import.php:34 +msgid "No LDIF file specified. Please try again." +msgstr "LDIF ファイルが指定されていません。もう一度行ってください。" + +#: htdocs/ldif_import.php:35 +msgid "Uploaded LDIF file is empty." +msgstr "アップロードされた LDIF ファイルが空です。" + +#: htdocs/ldif_import.php:38 +msgid "You must either upload a file or provide an LDIF in the text box." +msgstr "" +"ファイルをアップロードするか、" +"テキストボックスに LDIF を提供しなければなりません。" + +#: htdocs/ldif_import.php:44 htdocs/ldif_import_form.php:30 +msgid "Import LDIF File" +msgstr "LDIF ファイルインポート" + +#: htdocs/ldif_import.php:47 +msgid "File" +msgstr "ファイル" + +#: htdocs/ldif_import.php:47 +msgid "bytes" +msgstr "バイト" + +#: htdocs/ldif_import.php:55 +msgid "Adding..." +msgstr "追加中..." + +#: htdocs/ldif_import.php:56 +msgid "Deleting..." +msgstr "削除中..." + +#: htdocs/ldif_import.php:57 htdocs/ldif_import.php:58 +msgid "Renaming..." +msgstr "名称変更中..." + +#: htdocs/ldif_import.php:59 +msgid "Modifying..." +msgstr "修正中..." + +#: htdocs/ldif_import.php:63 +msgid "Could not add object:" +msgstr "オブジェクトを追加できませんでした:" + +#: htdocs/ldif_import.php:64 +msgid "Could not delete object:" +msgstr "オブジェクトを削除できませんでした:" + +#: htdocs/ldif_import.php:65 htdocs/ldif_import.php:66 +msgid "Could not rename object:" +msgstr "オブジェクトを名称変更できませんでした:" + +#: htdocs/ldif_import.php:67 +msgid "Could not modify object:" +msgstr "オブジェクトを修正できませんでした:" + +#: htdocs/ldif_import.php:96 htdocs/ldif_import.php:109 +#: htdocs/ldif_import.php:138 htdocs/ldif_import.php:152 +#: htdocs/mass_delete.php:77 +msgid "Failed" +msgstr "失敗しました" + +#: htdocs/ldif_import.php:99 htdocs/ldif_import.php:191 +msgid "Line Number" +msgstr "行番号" + +#: htdocs/ldif_import.php:101 htdocs/ldif_import.php:190 +msgid "Line" +msgstr "行" + +#: htdocs/ldif_import.php:111 +msgid "Error code" +msgstr "エラーコード" + +#: htdocs/ldif_import.php:186 +msgid "LDIF Parse Error" +msgstr "LDIF 解析エラー" + +#: htdocs/ldif_import.php:194 +msgid "Is this a phpLDAPadmin bug?" +msgstr "これは phpLDAPadmin のバグですか?" + +#: htdocs/ldif_import.php:194 +#, php-format +msgid "If so, please report it." +msgstr "もしそうなら、それを報告してください。" + +#: htdocs/ldif_import_form.php:19 +msgid "" +"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " +"PHP." +msgstr "" +"PHP.INI は「file_uploads = ON」ではありません。PHP のファイルアップロードを有" +"効にしてください。" + +#: htdocs/ldif_import_form.php:34 +msgid "Select an LDIF file" +msgstr "LDIF ファイルを選択する" + +#: htdocs/ldif_import_form.php:40 htdocs/ldif_import_form.php:50 +msgid "Don't stop on errors" +msgstr "エラーで停止しない" + +#: htdocs/ldif_import_form.php:42 +msgid "Maximum file size" +msgstr "最大ファイルサイズ" + +#: htdocs/ldif_import_form.php:46 +msgid "Paste your LDIF here" +msgstr "ここに LDIF を貼り付ける" + +#: htdocs/login.php:36 +msgid "You left the password blank." +msgstr "パスワードが空です。" + +#: htdocs/login.php:97 htdocs/login.php:133 lib/server_functions.php:347 +msgid "Bad username or password. Please try again." +msgstr "ユーザー名かパスワードがおかしいです。もう一度行ってください。" + +#: htdocs/login.php:115 +msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." +msgstr "" +"すみません、この LDAP サーバーと phpLDAPadmin を使用することを許可していませ" +"ん。" + +#: htdocs/login.php:131 +msgid "Could not bind anonymously to server." +msgstr "サーバーに匿名接続できませんでした。" + +#: htdocs/login.php:139 +msgid "Could not set cookie." +msgstr "Cookie を設定できませんでした。" + +#: htdocs/login.php:159 +#, php-format +msgid "Successfully logged into server %s" +msgstr "サーバー %s へのログインに成功しました" + +#: htdocs/login.php:162 htdocs/login_form.php:74 +msgid "Anonymous Bind" +msgstr "匿名接続" + +#: htdocs/login.php:174 lib/tree_functions.php:263 +msgid "Could not connect to LDAP server." +msgstr "LDAP サーバーに接続できませんでした。" + +#: htdocs/login_form.php:20 +#, fuzzy, php-format +msgid "" +"Error: You have an error in your config file. The only three allowed values\n" +" for auth_type in the $servers section " +"are 'session', 'cookie', and 'config'. You entered '%s',\n" +" which is not allowed. " +msgstr "" +"エラー: 設定ファイルのにエラーがあります。$servers セクションの auth_type " +"は 「session」「cookie」「config」のみっつ" +"の値のみ許可されていますが、 許可されない" +"「%s」が入力されました。" + +#: htdocs/login_form.php:24 htdocs/logout.php:27 lib/server_functions.php:1993 +#: lib/server_functions.php:2066 lib/server_functions.php:2348 +#: lib/server_functions.php:2396 +#, php-format +msgid "Unknown auth_type: %s" +msgstr "未知の auth_type: %s" + +#: htdocs/login_form.php:46 +#, php-format +msgid "Authenticate to server %s" +msgstr "サーバー %s へ認証" + +#: htdocs/login_form.php:52 +msgid "" +"You are not using 'https'. Web browser will transmit login information in " +"clear text." +msgstr "" +"あなたは 'https' を使っていません。ログイン情報はブラウザからクリアテキストで" +"送信されます、" + +#: htdocs/login_form.php:53 +msgid "Warning: This web connection is unencrypted." +msgstr "警告: このウェブ接続は暗号化されていません。" + +#: htdocs/login_form.php:82 +msgid "User name" +msgstr "ユーザー名" + +#: htdocs/login_form.php:84 +msgid "Login DN" +msgstr "ログイン DN" + +#: htdocs/login_form.php:92 +msgid "Password" +msgstr "パスワード" + +#: htdocs/login_form.php:97 +msgid "Authenticate" +msgstr "認証" + +#: htdocs/logout.php:19 +msgid "No one is logged in to that server." +msgstr "誰もそのサーバーにログインしていません。" + +#: htdocs/logout.php:23 lib/timeout_functions.php:77 +msgid "Could not logout." +msgstr "ログアウトできませんでした。" + +#: htdocs/logout.php:39 +#, php-format +msgid "Logged out successfully from server %s" +msgstr "サーバー %s からログアウトに成功しました" + +#: htdocs/mass_delete.php:24 +msgid "Unable to delete, server is in READY-ONLY mode." +msgstr "削除できません。サーバーは読み込み専用モードです。" + +#: htdocs/mass_delete.php:30 +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "" +"mass_delete.php 呼び出し中のエラーです。POST 値から mass_delete が見かりませ" +"ん。" + +#: htdocs/mass_delete.php:35 +msgid "mass_delete POST var is not an array." +msgstr "mass_delete POST 辺りが配列ではありません。" + +#: htdocs/mass_delete.php:38 +msgid "" +"Mass deletion is not enabled. Please enable it in config.php before " +"proceeding." +msgstr "" +"一括削除が有効ではありません。次に進む前に config.php でそれを有効にしてくだ" +"さい。" + +#: htdocs/mass_delete.php:43 +msgid "Mass Deleting" +msgstr "一括削除中" + +#: htdocs/mass_delete.php:46 +#, php-format +msgid "Deletion progress on server \"%s\"" +msgstr "サーバー \"%s\" から削除中" + +#: htdocs/mass_delete.php:54 +msgid "Malformed mass_delete array." +msgstr "おかしい mass_delete 配列です。" + +#: htdocs/mass_delete.php:58 +msgid "You did not select any entries to delete." +msgstr "削除するエントリが選択されていません。" + +#: htdocs/mass_delete.php:64 htdocs/rdelete.php:34 htdocs/rdelete.php:60 +#: htdocs/rdelete.php:77 +#, php-format +msgid "Deleting %s" +msgstr "%s 削除中" + +#: htdocs/mass_delete.php:92 +#, php-format +msgid "%s of %s entries failed to be deleted." +msgstr "%s 個のエントリが %s 個のエントリ中で削除できませんでした。" + +#: htdocs/mass_delete.php:94 +msgid "All entries deleted successfully." +msgstr "すべてのエントリの削除に成功しました。" + +#: htdocs/mass_delete.php:100 +#, php-format +msgid "Confirm mass delete of %s entries on server %s" +msgstr "%s エントリをサーバー %s から一括削除の確認" + +#: htdocs/mass_delete.php:103 +#, php-format +msgid "Do you really want to delete %s %s %s" +msgstr "本当に%s %s %sを削除しますか" + +#: htdocs/mass_delete.php:114 +msgid "Yes, delete!" +msgstr "はい、削除します!" + +#: htdocs/password_checker.php:26 +msgid "Password Checker Tool" +msgstr "パスワードチェックツール" + +#: htdocs/password_checker.php:36 +msgid "To" +msgstr "" + +#: htdocs/password_checker.php:45 +msgid "Passwords match!" +msgstr "パスワードが一致しました!" + +#: htdocs/password_checker.php:47 +msgid "Passwords do not match!" +msgstr "パスワードが一致しません!" + +#: htdocs/purge_cache.php:29 +msgid "No cache to purge." +msgstr "破棄するキャッシュはありませんでした。" + +#: htdocs/purge_cache.php:31 +#, php-format +msgid "Purged %s bytes of cache." +msgstr "%s バイトのキャッシュを破棄しました。" + +#: htdocs/rdelete.php:35 +msgid "Recursive delete progress" +msgstr "再帰削除進行" + +#: htdocs/rdelete.php:49 +#, php-format +msgid "Entry %s and sub-tree deleted successfully." +msgstr "エントリ %s とサブツリーの削除に成功しました。" + +#: htdocs/rdelete.php:70 htdocs/rdelete.php:87 +#, php-format +msgid "Failed to delete entry %s" +msgstr "エントリ %s の削除に失敗しました" + +#: htdocs/rename.php:29 +msgid "" +"You cannot rename an entry which has children entries (eg, the rename " +"operation is not allowed on non-leaf entries)" +msgstr "" +"子エントリを持つエントリは名称変更できません (eg, the rename operation is " +"not allowed on non-leaf entries)" + +#: htdocs/rename.php:37 +msgid "You did not change the RDN" +msgstr "RDN を変更しませんでした" + +#: htdocs/rename.php:45 +msgid "Invalid RDN value" +msgstr "無効な RDN 値" + +#: htdocs/rename.php:59 lib/server_functions.php:1529 +msgid "Could not rename the entry" +msgstr "エントリの名称変更が出来ませんでした" + +#: htdocs/rename_form.php:30 +msgid "Rename Entry" +msgstr "エントリ名称変更" + +#: htdocs/schema.php:35 +msgid "Could not retrieve schema from" +msgstr "次のスキーマを取得できません:" + +#: htdocs/schema.php:36 +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "" + +#: htdocs/schema.php:36 +msgid "The server does not fully support the LDAP protocol." +msgstr "このサーバーはすべての LDAP プロトコルをサポートしていません。" + +#: htdocs/schema.php:37 +msgid "Your version of PHP does not correctly perform the query." +msgstr "この PHP のバージョンは正確に照会を行えません。" + +#: htdocs/schema.php:37 +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "" +"あるいは、phpLDAPadmin は、あなたのサーバーからスキーマを取得する方法を知りま" +"せん。" + +#: htdocs/schema.php:38 +msgid "Or lastly, your LDAP server doesnt provide this information." +msgstr "Or lastly, LDAP サーバーはこの情報を提供していません。" + +#: htdocs/schema.php:43 +msgid "Schema for server" +msgstr "サーバーのスキーマ" + +#: htdocs/schema.php:55 htdocs/schema.php:57 +msgid "Attribute Types" +msgstr "属性タイプ" + +#: htdocs/schema.php:60 htdocs/schema.php:62 +msgid "Syntaxes" +msgstr "文法一覧" + +#: htdocs/schema.php:65 htdocs/schema.php:67 +msgid "Matching Rules" +msgstr "一致ルール" + +#: htdocs/schema.php:79 +msgid "Syntax OID" +msgstr "文法 OID" + +#: htdocs/schema.php:112 +msgid "Jump to an attribute type" +msgstr "属性タイプに移動" + +#: htdocs/schema.php:128 htdocs/schema.php:322 htdocs/schema.php:367 +#: htdocs/schema.php:403 +msgid "Go" +msgstr "Go" + +#: htdocs/schema.php:159 +msgid "no description" +msgstr "説明がありません" + +#: htdocs/schema.php:169 htdocs/schema.php:345 +msgid "Obsolete" +msgstr "旧式" + +#: htdocs/schema.php:170 htdocs/schema.php:227 htdocs/schema.php:232 +#: htdocs/schema.php:237 +msgid "Yes" +msgstr "はい" + +#: htdocs/schema.php:170 htdocs/schema.php:227 htdocs/schema.php:232 +#: htdocs/schema.php:237 +msgid "No" +msgstr "いいえ" + +#: htdocs/schema.php:174 htdocs/schema.php:435 +msgid "Inherits from" +msgstr "継承元" + +#: htdocs/schema.php:189 +msgid "Equality" +msgstr "等価" + +#: htdocs/schema.php:191 htdocs/schema.php:199 htdocs/schema.php:205 +#: htdocs/schema.php:242 +msgid "not specified" +msgstr "指定されていません" + +#: htdocs/schema.php:197 +msgid "Ordering" +msgstr "Ordering" + +#: htdocs/schema.php:203 +msgid "Substring Rule" +msgstr "副文字列ルール" + +#: htdocs/schema.php:226 +msgid "Single Valued" +msgstr "単一の値" + +#: htdocs/schema.php:231 +msgid "Collective" +msgstr "集合" + +#: htdocs/schema.php:236 +msgid "User Modification" +msgstr "ユーザー修正" + +#: htdocs/schema.php:241 +msgid "Usage" +msgstr "使用法" + +#: htdocs/schema.php:250 +msgid "not applicable" +msgstr "適用可能ではありません" + +#: htdocs/schema.php:254 +msgid "character" +msgstr "文字" + +#: htdocs/schema.php:260 +msgid "Aliases" +msgstr "別名" + +#: htdocs/schema.php:275 +msgid "Used by objectClasses" +msgstr "objectClass を使する" + +#: htdocs/schema.php:305 +msgid "Jump to a matching rule" +msgstr "一致ルールにジャンプ" + +#: htdocs/schema.php:327 +msgid "Matching Rule OID" +msgstr "適用ルール OID" + +#: htdocs/schema.php:327 +msgid "Name" +msgstr "名前" + +#: htdocs/schema.php:327 +msgid "Used by Attributes" +msgstr "属性で使する" + +#: htdocs/schema.php:385 +msgid "Jump to an objectClass" +msgstr "objectClass に移動" + +#: htdocs/schema.php:423 +msgid "OID" +msgstr "OID" + +#: htdocs/schema.php:429 +msgid "Type" +msgstr "種類" + +#: htdocs/schema.php:432 +msgid "This objectClass is obsolete." +msgstr "この objectClass は旧式です。" + +#: htdocs/schema.php:445 htdocs/schema.php:468 +msgid "Jump to this objectClass definition" +msgstr "この objectClass 定義に移動" + +#: htdocs/schema.php:455 +msgid "Parent to" +msgstr "派生先" + +#: htdocs/schema.php:496 htdocs/schema.php:525 +msgid "Inherited from" +msgstr "派生元" + +#: htdocs/schema.php:552 +#, php-format +msgid "No such schema item: \"%s\"" +msgstr "スキーマ項目がありません: \"%s\"" + +#: htdocs/search.php:109 +msgid "" +"You have not logged into the selected server yet, so you cannot perform " +"searches on it." +msgstr "" + +#: htdocs/search.php:109 +msgid "Click here to go to the login form" +msgstr "ここをクリックするとログインフォームに移動します" + +#: htdocs/search.php:176 +msgid "Unrecognized criteria option: " +msgstr "未承認の基準オプション: " + +#: htdocs/search.php:176 +msgid "" +"If you want to add your own criteria to the list. Be sure to edit search.php " +"to handle them. Quitting." +msgstr "" + +#: htdocs/search.php:180 +msgid "Searching..." +msgstr "検索中..." + +#: htdocs/search.php:213 lib/export_functions.php:256 +msgid "Encountered an error while performing search." +msgstr "検索実行中にエラーに遭遇しました。" + +#: htdocs/search.php:228 +msgid "Entries found: " +msgstr "エントリ発見: " + +#: htdocs/search.php:229 htdocs/search.php:357 +msgid "seconds" +msgstr "秒" + +#: htdocs/search.php:238 +msgid "export results" +msgstr "結果エクスポート" + +#: htdocs/search.php:240 +msgid "Format" +msgstr "書式" + +#: htdocs/search.php:260 +msgid "Base DN: " +msgstr "ベース DN: " + +#: htdocs/search.php:262 +msgid "Filter performed: " +msgstr "検索実行: " + +#: htdocs/search.php:274 +msgid "Notice, search size limit exceeded." +msgstr "通知です。検索サイズが制限を越えました。" + +#: htdocs/search.php:282 +#, php-format +msgid "Showing results %s through %s." +msgstr "" + +#: htdocs/search.php:288 htdocs/search.php:326 htdocs/template_engine.php:527 +#, php-format +msgid "Page %d" +msgstr "ページ %d" + +#: htdocs/search.php:335 +msgid "The search found no results." +msgstr "検索結果がありませんでした。" + +#: htdocs/search.php:348 +#, php-format +msgid "Unrecognized search result format: %s" +msgstr "認識できない書式の検索結果です: %s" + +#: htdocs/search.php:357 +msgid "Search performed by phpLDAPadmin in" +msgstr "phpLDadmin で検索を実行" + +#: htdocs/server_info.php:68 +msgid "Server info for: " +msgstr "サーバー情報: " + +#: htdocs/server_info.php:69 +msgid "Server reports the following information about itself" +msgstr "サーバーは自分自身で次の情報を報告しました。" + +#: htdocs/server_info.php:73 +msgid "This server has nothing to report." +msgstr "このサーバーはなにも報告するものはありません。" + +#: htdocs/template_engine.php:150 +#, fuzzy, php-format +msgid "Your template is missing variable (%s)" +msgstr "テンプレートは値(%s)が見つかりません" + +#: htdocs/template_engine.php:158 +#, php-format +msgid "Your template has an unknown post function (%s)." +msgstr "" + +#: htdocs/template_engine.php:241 +#, php-format +msgid "Attribute [%s] is a MUST attribute, so it cannot be disabled." +msgstr "" + +#: htdocs/template_engine.php:381 htdocs/template_engine.php:383 +msgid "Verify" +msgstr "確認" + +#: htdocs/template_engine.php:449 +#, php-format +msgid "We are missing a page for [%s] attributes." +msgstr "" + +#: htdocs/template_engine.php:504 +msgid "(Auto evaluated on submission.)" +msgstr "" + +#: htdocs/template_engine.php:514 +msgid "Next Page" +msgstr "次のページ" + +#: htdocs/template_engine.php:654 +msgid "This attribute is required for the RDN." +msgstr "この属性は RDN に必要です。" + +#: htdocs/template_engine.php:814 htdocs/template_engine.php:856 +msgid "Check password..." +msgstr "パスワード検査..." + +#: htdocs/template_engine.php:817 +msgid "rename" +msgstr "名称変更" + +#: htdocs/timeout.php:29 +msgid "Your Session timed out after" +msgstr "セッションは" + +#: htdocs/timeout.php:29 +msgid "min. of inactivity. You have been automatically logged out." +msgstr "分活動しなかったのでタイムアウトです。自動でログアウトしました。" + +#: htdocs/timeout.php:32 +msgid "To log back in please click on the following link:" +msgstr "再ログインするには次のリンクをクリックしてください:" + +#: htdocs/timeout.php:33 htdocs/update.php:117 lib/tree_functions.php:281 +msgid "Login..." +msgstr "ログイン..." + +#: htdocs/tree.php:72 htdocs/tree.php:73 +msgid "Home" +msgstr "ホーム" + +#: htdocs/tree.php:74 htdocs/tree.php:75 +msgid "Purge caches" +msgstr "キャッシュ破棄" + +#: htdocs/tree.php:75 +msgid "Purge all cached data in phpLDAPadmin, including server schemas." +msgstr "" +"サーバースキーマを含む、phpLDAPadmin のすべてのキャッシュを破棄しました。" + +#: htdocs/tree.php:79 +msgid "light" +msgstr "" + +#: htdocs/tree.php:80 +msgid "Request feature" +msgstr "機能リクエスト" + +#: htdocs/tree.php:81 +msgid "bug" +msgstr "不都合" + +#: htdocs/tree.php:82 +msgid "Report a bug" +msgstr "不都合報告" + +#: htdocs/tree.php:85 htdocs/tree.php:86 htdocs/welcome.php:33 +msgid "Donate" +msgstr "寄附" + +#: htdocs/tree.php:89 htdocs/tree.php:90 +msgid "Help" +msgstr "ヘルプ" + +#: htdocs/update.php:38 +msgid "" +"update_array is malformed. This might be a phpLDAPadmin bug. Please report " +"it." +msgstr "" +"update_array がおかしいです。これは phpLDAPadmin のバグかもしれませんので、報" +"告してください。" + +#: htdocs/update.php:114 +msgid "Modification successful!" +msgstr "修正に成功しました!" + +#: htdocs/update.php:116 +msgid "" +"Since you changed your password, you must now login again with your new " +"password." +msgstr "" +"パスワードを変更したので、今から新しいパスワードで再ログインしなければなりま" +"せん。" + +#: htdocs/update_confirm.php:112 +msgid "Do you want to make these changes?" +msgstr "変更をしたいですか?" + +#: htdocs/update_confirm.php:122 +msgid "Old Value" +msgstr "古い値" + +#: htdocs/update_confirm.php:123 +msgid "New Value" +msgstr "新しい値" + +#: htdocs/update_confirm.php:124 +msgid "Skip" +msgstr "飛ばす" + +#: htdocs/update_confirm.php:177 htdocs/update_confirm.php:191 +msgid "[attribute deleted]" +msgstr "[属性を削除しました]" + +#: htdocs/update_confirm.php:225 +msgid "Commit" +msgstr "コミット" + +#: htdocs/update_confirm.php:246 +msgid "You made no changes" +msgstr "変更はありません" + +#: htdocs/update_confirm.php:247 +msgid "Go back" +msgstr "戻る" + +#: htdocs/view_jpeg_photo.php:17 +msgid "Unsafe file name: " +msgstr "安全でないファイル名: " + +#: htdocs/view_jpeg_photo.php:24 +msgid "No such file: " +msgstr "ファイルがありません: " + +#: htdocs/welcome.php:21 +msgid "phpLDAPadmin logo" +msgstr "phpLDAPadmin ロゴ" + +#: htdocs/welcome.php:24 +msgid "Use the menu to the left to navigate" +msgstr "左へのメニューを使用して操作します" + +#: htdocs/welcome.php:31 +msgid "Credits" +msgstr "クレジット" + +#: htdocs/welcome.php:32 +msgid "Documentation" +msgstr "ドキュメント" + +#: lib/export_functions.php:38 +msgid "CSV (Spreadsheet)" +msgstr "CSV (スプレッドシート)" + +#: lib/export_functions.php:197 +#, php-format +msgid "" +"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "%s に phpLDAPadmin ( http://www.phpldapadmin.com/ ) で生成しました。" + +#: lib/export_functions.php:201 +msgid "Total Entries" +msgstr "総エントリ" + +#: lib/export_functions.php:312 +#, php-format +msgid "LDIF Export for: %s" +msgstr "LDIF エクスポート: %s" + +#: lib/export_functions.php:319 +msgid "Entry" +msgstr "エントリ" + +#: lib/export_functions.php:414 +#, php-format +msgid "DSLM Export for: %s" +msgstr "DSLM エクスポート: %s" + +#: lib/functions.php:412 +#, fuzzy, php-format +msgid "" +"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" +" configuration for server %s, but you " +"did not specify the\n" +" \"auto_uid_number_search_base\". Please " +"specify it before proceeding." +msgstr "" +"サーバー %s の設定で「search」に「auto_uid_number_mechanism」を指定し" +"ました。 しかし「auto_uid_number_search_base」が" +"指定されていません。 これを実行前に指定してくだ" +"さい。" + +#: lib/functions.php:421 #, php-format msgid "" "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " "for server %s" -msgstr "phpLDAPadmin の設定で、サーバー %s に無効な auto_uid_search_base が指定されました" +msgstr "" +"phpLDAPadmin の設定で、サーバー %s に無効な auto_uid_search_base が指定されま" +"した" -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "システムの暗号化ライブラリは blowfish 暗号化をサポートしていません。" +#: lib/functions.php:432 +#, php-format +msgid "" +"Unable to bind to %s with your with auto_uid credentials. Please " +"check your configuration file." +msgstr "" +"Unable to bind to %s with your with auto_uid credentials. 設定ファイル" +"を確認してください。" -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 +#: lib/functions.php:492 +#, fuzzy, php-format +msgid "" +"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" +" in your configration. Only \"uidpool\" " +"and \"search\" are valid.\n" +" Please correct this problem." +msgstr "" +"設定ファイルの auto_uid_number_mechanism の指定が間違った値(\"%s\")で" +"す。 \"uidpool\" と \"search\" のみ有効で" +"す。 この問題を修正してください。" + +#: lib/functions.php:1007 +msgid "Error" +msgstr "エラー" + +#: lib/functions.php:1017 +#, php-format +msgid "LDAP said: %s" +msgstr "LDAP の回答: %s" + +#: lib/functions.php:1026 +#, php-format +msgid "Error number: %s (%s)" +msgstr "エラー番号: %s (%s)" + +#: lib/functions.php:1028 +#, php-format +msgid "Description: %s

" +msgstr "説明: %s

" + +#: lib/functions.php:1030 lib/functions.php:1036 +#, php-format +msgid "Error number: %s

" +msgstr "エラー番号: %s

" + +#: lib/functions.php:1032 +msgid "Description: (no description available)
" +msgstr "説明: (利用可能な説明がありませんでした)
" + +#: lib/functions.php:1044 +#, php-format +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "" +"これは phpLDAPadmin の不都合ですか? もしそうなら 報告 してく" +"ださい。" + +#: lib/functions.php:1107 +msgid "Unrecognized error number: " +msgstr "未承認のエラー番号: " + +#: lib/functions.php:1112 +#, fuzzy, php-format +msgid "" +"

\n" +" \n" +"\t\n" +"\t\n" +"\t
\n" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s\n" +"
Web server:%s
Please check and see " +"if this bug has been reported here.
If it hasnt been " +"reported, you may report this bug by clicking here.

" +msgstr "" +"
\t\t
致命的でない " +"phpLDAPadmin の不都合を発見しました!
エラー:" +"%s (%s)
ファイル: %s " +"行 %s, caller %s
バージョン:PLA: %" +"s, PHP: %s, SAPI: %s
ウェブ" +"サーバー:%s
\t
Please check and see if this bug has been reported here.
If it hasnt " +"been reported, you may report this bug by clicking here.

" + +#: lib/functions.php:1126 +#, fuzzy, php-format +msgid "" +"Congratulations! You found a bug in phpLDAPadmin.

\n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
\n" +"\t
\n" +"\t Please report this bug by clicking below!" +msgstr "" +"おめでとうございます! phpLDAPadmin で不都合を発見しました。

" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t \n" +"\t
エラー:%s
レベル:%s
ファイル:%s
行:%s
Caller:%s
PLA バージョン:%s
PHP バージョン:%s
PHP SAPI:%s
ウェブサーバー:%s
\n" +"\t
\n" +"\t 下記をクリックしてこの不都合を報告してください!" + +#: lib/functions.php:1209 +#, php-format +msgid "Could not fetch jpeg data from LDAP server for attribute %s." +msgstr "属性 %s 用に LDAP サーバーから jpeg データを取得できませんでした。" + +#: lib/functions.php:1215 +msgid "" +"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config." +"php" +msgstr "" +"phpLDAPadmin の設定ファイル config.php で、書き込み可能なディレクトリを " +"$jpeg_temp_dir に設定してください。" + +#: lib/functions.php:1224 +#, php-format +msgid "" +"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " +"web server can write files there." +msgstr "" +"$jpeg_temp_dir で指定したディレクトリ %s に書き込みできません。ウェブサーバー" +"がそこにファイルを書き込みできることを確認してください。" + +#: lib/functions.php:1230 +msgid "jpegPhoto contains errors
" +msgstr "エラーを含む jpeg 写真
" + +#: lib/functions.php:1232 +msgid "Delete Photo" +msgstr "写真削除" + +#: lib/functions.php:1267 +msgid "Delete photo" +msgstr "写真を削除する" + +#: lib/functions.php:1308 lib/functions.php:1486 msgid "Your system crypt library does not support extended DES encryption." msgstr "システムの暗号化ライブラリは拡張 DES 暗号化をサポートしていません。" -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 +#: lib/functions.php:1315 lib/functions.php:1471 msgid "Your system crypt library does not support md5crypt encryption." msgstr "システムの暗号化ライブラリは md5crypt 暗号化をサポートしていません。" -#: ../../lib/template_functions.php:984 +#: lib/functions.php:1322 lib/functions.php:1456 +msgid "Your system crypt library does not support blowfish encryption." +msgstr "システムの暗号化ライブラリは blowfish 暗号化をサポートしていません。" + +#: lib/functions.php:1341 lib/functions.php:1352 lib/functions.php:1363 +#: lib/functions.php:1411 lib/functions.php:1429 +msgid "" +"Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "" +"インストールされた PHP は mhash() をサポートしていません。SHA ハッシュをする" +"ことができません。" + +#: lib/functions.php:1629 +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "" + +#: lib/functions.php:1633 +msgid "browse" +msgstr "閲覧" + +#: lib/functions.php:2026 +#, php-format +msgid "" +"Your config.php specifies an invalid value for $default_search_display: %s. " +"Please fix it" +msgstr "" +"config.php にて $default_search_display: %s の無効な値が指定されています。そ" +"れを修正してください。" + +#: lib/functions.php:2752 +msgid "Click to popup a dialog to select a date graphically" +msgstr "" + +#: lib/ldif_functions.php:169 +msgid "Missing attibutes or changetype attribute for entry" +msgstr "" + +#: lib/ldif_functions.php:243 +msgid "A valid dn line is required." +msgstr "有効な dn 行が必要です。" + +#: lib/ldif_functions.php:320 +msgid "Unable to read file" +msgstr "ファイルを読み込めません" + +#: lib/ldif_functions.php:327 +msgid "Unable to open file" +msgstr "ファイルを開けません" + +#: lib/ldif_functions.php:333 +msgid "The url attribute value should begin with file:///" +msgstr "URL 属性値は file:/// で始まっていなければなりません。" + +#: lib/ldif_functions.php:352 lib/ldif_functions.php:390 +msgid "Missing attributes for the entry" +msgstr "エントリの属性が見当たりません" + +#: lib/ldif_functions.php:375 +msgid "Attribute not well formed" +msgstr "属性は整形されていません" + +#: lib/ldif_functions.php:410 +msgid "The attribute name should be add, delete or replace" +msgstr "追加、削除もしくは置換には属性名がなければなりません。" + +#: lib/ldif_functions.php:448 +#, php-format +msgid "" +"The attribute to modify doesnt match the one specified by the %s attribute." +msgstr "" + +#: lib/ldif_functions.php:455 +msgid "Attribute is not valid" +msgstr "有効な DN ではありません。" + +#: lib/ldif_functions.php:483 +msgid "The entry is not valid" +msgstr "エントリは有効ではありません。" + +#: lib/ldif_functions.php:514 +msgid "The attribute name should be newsuperior" +msgstr "" + +#: lib/ldif_functions.php:525 +msgid "Container is null" +msgstr "コンテナーが NULL です。" + +#: lib/ldif_functions.php:532 +msgid "A valid deleteoldrdn attribute should be specified" +msgstr "" + +#: lib/ldif_functions.php:538 +#, fuzzy +msgid "A valid newrdn attribute should be specified" +msgstr "属性名が指定されていません。" + +#: lib/ldif_functions.php:621 +msgid "No version found. Assuming 1." +msgstr "バージョンが見つかりません。1 と仮定します。" + +#: lib/search_form_advanced.php:29 lib/search_form_predefined.php:23 +#: lib/search_form_simple.php:25 +msgid "Advanced Search Form" +msgstr "高度な検索フォーム" + +#: lib/search_form_advanced.php:30 lib/search_form_predefined.php:22 +#: lib/search_form_simple.php:24 +msgid "Simple Search Form" +msgstr "簡易検索フォーム" + +#: lib/search_form_advanced.php:31 lib/search_form_predefined.php:20 +#: lib/search_form_simple.php:26 +msgid "Predefined Searches" +msgstr "事前定義検索" + +#: lib/search_form_advanced.php:47 +msgid "This is not a valid DN." +msgstr "これは有効な DN ではありません。" + +#: lib/search_form_advanced.php:50 +msgid "This entry does not exist." +msgstr "このエントリは存在しません。" + +#: lib/search_form_advanced.php:56 +msgid "The scope in which to search" +msgstr "" + +#: lib/search_form_advanced.php:74 +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "標準 LDAP 検索フィルター。例: (&(sn=Smith)(givenname=David))" + +#: lib/search_form_advanced.php:81 +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "結果から属性の一覧を表示 (カンマ区切り)" + +#: lib/search_form_advanced.php:91 lib/search_form_predefined.php:57 +#: lib/search_form_simple.php:57 +msgid "Search" +msgstr "検索" + +#: lib/search_form_predefined.php:29 +msgid "No queries have been defined in config.php." +msgstr "config.php で定義された照会はありません。" + +#: lib/search_form_predefined.php:38 +msgid "Select a predefined search" +msgstr "事前定義された検索を選択" + +#: lib/search_form_simple.php:32 +msgid "Search for entries whose" +msgstr "どのエントリを検索" + +#: lib/server_functions.php:121 +#, fuzzy, php-format +msgid "" +"Error: You have an error in your config file. The only three allowed values " +"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " +"You entered '%s', which is not allowed." +msgstr "" +"エラー: 設定ファイルのにエラーがあります。$servers セクションの auth_type " +"は 「session」「cookie」「config」のみっつ" +"の値のみ許可されていますが、 許可されない" +"「%s」が入力されました。" + +#: lib/server_functions.php:270 +msgid "Your PHP install does not support TLS." +msgstr "インストールされている PHP は TLS をサポートしていません。" + +#: lib/server_functions.php:271 +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "TLS を開始できません。LDAP サーバーの設定を確認してください。" + +#: lib/server_functions.php:285 +msgid "" +"Your PHP installation does not support ldap_sasl_bind() function. This " +"function is present in PHP 5.x when compiled with --with-ldap-sasl." +msgstr "" + +#: lib/server_functions.php:318 +#, php-format +msgid "" +"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " +"expression." +msgstr "" + +#: lib/server_functions.php:350 +msgid "Insufficient access rights." +msgstr "不適当なアクセス権限です。" + +#: lib/server_functions.php:353 +#, php-format +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "\"%s\" のポート \"%s\" に接続できませんでした" + +#: lib/server_functions.php:356 +msgid "Could not bind to the LDAP server." +msgstr "LDAP サーバーに接続できませんでした。" + +#: lib/server_functions.php:2683 +#, php-format +msgid "" +"Unable to bind to %s with your with unique_attrs credentials. Please " +"check your configuration file." +msgstr "" +"Unable to bind to %s with your with unique_attrs credentials. 設定ファ" +"イルを確認してください。" + +#: lib/template_functions.php:541 +msgid "A random password was generated for you" +msgstr "ランダムなパスワードが生成されました。" + +#: lib/template_functions.php:562 #, php-format msgid "" "Your template calls php.Function for a default value, however (%s) is NOT " @@ -2176,383 +2154,121 @@ msgid "" "[%s]." msgstr "" -#: ../../lib/EntryReader.php:262 +#: lib/tree_functions.php:46 #, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "" +msgid "Inactivity will log you off at %s" +msgstr "%s は活動的でなかったのでログアウトしました。" -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "" +#: lib/tree_functions.php:67 +msgid "View schema for" +msgstr "スキーマを閲覧 対象:" -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "この PHP のバージョンは正確に照会を行えません。" - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[属性を削除しました]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "値追加" - -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "" - -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "閲覧" - -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "不都合" - -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "バイト" - -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "" - -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "文字" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "文字" - -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "属性削除" - -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "ダウンロード値" - -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "空" - -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "" - -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "" - -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "エクスポート" - -#: ../../htdocs/search.php:273 -msgid "export results" -msgstr "結果エクスポート" - -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "false" - -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "" - -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "ヒント" - -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "インポート" - -#: ../../lib/HTMLTree.php:248 -msgid "info" -msgstr "情報" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "" - -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "エラーを含む jpeg 写真
" - -#: ../../lib/functions.php:351 -msgid "light" -msgstr "" - -#: ../../lib/functions.php:132 -msgid "line" -msgstr "" - -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "ログイン" - -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "ログアウト" - -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "mass_delete POST 辺りが配列ではありません。" - -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "分活動しなかったのでタイムアウトです。自動でログアウトしました。" - -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "" - -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "新規" - -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "新規属性" - -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "説明がありません" - -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "" - -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "エントリがありません" - -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "このエントリに利用可能な新規属性はありません。" - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "このエントリに利用可能な新規バイナリ属性はありません。" - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "なし" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "いいえ、値を削除します" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "適用可能ではありません" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "指定されていません" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" -"phpLDAPadmin は再帰的に、このエントリとその子のすべての %s " -"を削除できます。このアクションが削除するすべてのエントリの一覧は、下記を参照してください。本当に本当に削除しますか?" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "あるいは、phpLDAPadmin は、あなたのサーバーからスキーマを取得する方法を知りません。" - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "phpLDAPadmin ロゴ" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "読み込み専用" - -#: ../../lib/HTMLTree.php:240 -msgid "refresh" -msgstr "再描画" - -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "" - -#: ../../lib/EntryWriter1.php:1829 -msgid "rename" -msgstr "名称変更" - -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "必須" - -#: ../../lib/HTMLTree.php:224 +#: lib/tree_functions.php:67 msgid "schema" msgstr "スキーマ" -#: ../../lib/HTMLTree.php:232 +#: lib/tree_functions.php:68 msgid "search" msgstr "検索" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "秒" +#: lib/tree_functions.php:69 +msgid "Refresh all expanded containers for" +msgstr "展開済みの内容を再描画 対象:" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "" +#: lib/tree_functions.php:69 +msgid "refresh" +msgstr "再描画" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "" +#: lib/tree_functions.php:70 +msgid "View server-supplied information" +msgstr "サーバーが提供する情報を閲覧" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "" +#: lib/tree_functions.php:70 +msgid "info" +msgstr "情報" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "構造" +#: lib/tree_functions.php:71 +msgid "Import entries from an LDIF file" +msgstr "LDIF ファイルからのインポートエントリ" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "" +#: lib/tree_functions.php:71 +msgid "import" +msgstr "インポート" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "" +#: lib/tree_functions.php:72 +msgid "export" +msgstr "エクスポート" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "" +#: lib/tree_functions.php:75 +msgid "Logout of this server" +msgstr "このサーバーのログアウト" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "" +#: lib/tree_functions.php:75 lib/tree_functions.php:269 +msgid "logout" +msgstr "ログアウト" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 -msgid "true" -msgstr "true" +#: lib/tree_functions.php:81 +msgid "Logged in as: " +msgstr "次のコンテナでログイン: " -#: ../../lib/functions.php:1277 +#: lib/tree_functions.php:163 +msgid "This base entry does not exist." +msgstr "ベースエントリが存在しません。" + +#: lib/tree_functions.php:163 +msgid "Create it?" +msgstr "作成しますか?" + +#: lib/tree_functions.php:219 +msgid "Could not determine the root of your LDAP tree." +msgstr "LDAP ツリーのルートが決定できません。" + +#: lib/tree_functions.php:219 msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" +"It appears that the LDAP server has been configured to not reveal its root." +msgstr "LDAP サーバーが root を見えないように設定しているように見えます。" + +#: lib/tree_functions.php:219 +msgid "Please specify it in config.php" +msgstr "config.php でそれを指定してください。" + +#: lib/tree_functions.php:263 +msgid "warning" +msgstr "警告" + +#: lib/tree_functions.php:281 +msgid "login" +msgstr "ログイン" + +#: lib/tree_functions.php:285 +msgid "(Session timed out. Automatically logged out.)" +msgstr "(セッションはタイムアウトです。自動でログアウトしました)" + +#: lib/tree_functions.php:289 +msgid "Delete Checked Entries" +msgstr "チェックされたエントリを削除する" + +#: lib/tree_functions.php:429 +msgid "Click to expand this branch." +msgstr "クリックするとこの枝を展開します。" + +#: lib/tree_functions.php:463 +msgid "new" +msgstr "新規" + +#: lib/tree_functions.php:465 +msgid "Create a new entry in" msgstr "" -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "update_array がおかしいです。これは phpLDAPadmin のバグかもしれませんので、報告してください。" +#: lib/tree_functions.php:465 +msgid "Create new entry here" +msgstr "ここに新規エントリを追加" -#: ../../htdocs/add_value_form.php:93 -msgid "value to" -msgstr "" +#~ msgid "list" +#~ msgstr "一覧" -#: ../../htdocs/add_value_form.php:112 -msgid "values for attribute" -msgstr "属性の値" - -#: ../../htdocs/delete_form.php:48 -msgid "view entries" -msgstr "エントリ閲覧" - -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "" - -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "" - -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "" - -#: ../../htdocs/compare_form.php:29 -msgid "with " -msgstr "と " - -#~ msgid "equals" -#~ msgstr "に一致" - -#~ msgid "contains" -#~ msgstr "を含む" +#~ msgid "table" +#~ msgstr "テーブル" #~ msgid "create" #~ msgstr "作成" @@ -2560,145 +2276,15 @@ msgstr "と " #~ msgid "Create a new entry on" #~ msgstr "エントリを新規作成 対象:" -#~ msgid "Logged in as: " -#~ msgstr "次のコンテナでログイン: " - -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "このオブジェクトを異なるロケーション、新しい DNもしくは別のサーバーにコピーする" - #~ msgid "View" #~ msgstr "閲覧" -#~ msgid "Click to view the schema defintion for attribute type '%s'" -#~ msgstr "属性タイプ '%s' のためのスキーマ定義を見るためにクリックしてください。" - -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "注: '%s' は '%s' のエイリアスです。" - -#~ msgid "Entry %s deleted successfully." -#~ msgstr "%s エントリを削除しました。" - -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "それは objectClass に必要です。このフォームでそうすることができます。" - #~ msgid "Bad server id" #~ msgstr "間違ったサーバー ID" -#~ msgid "Could not connect to LDAP server." -#~ msgstr "LDAP サーバーに接続できませんでした。" - -#~ msgid "Server: " -#~ msgstr "サーバー: " - -#~ msgid "Looking in: " -#~ msgstr "Looking in: " - #~ msgid "No DN specified in query string!" #~ msgstr "照会文字列に DN が指定されていません!" -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "注: LDAP サーバーでこの属性の EQUALITY ルールをセットアップしていなかった場合、\"inappropriate matching\" " -#~ "エラーを取得するでしょう。" - -#~ msgid "Copy successful! Would you like to " -#~ msgstr "コピー成功! Would you like to " - -#~ msgid "view the new entry" -#~ msgstr "新規エントリ閲覧" - -#~ msgid "Choose a template" -#~ msgstr "テンプレート選択" - -#~ msgid "Click here to go to the login form" -#~ msgstr "ここをクリックするとログインフォームに移動します" - -#~ msgid "Entries found: " -#~ msgstr "エントリ発見: " - -#~ msgid "Filter performed: " -#~ msgstr "検索実行: " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "phpLDadmin で検索を実行" - -#~ msgid "starts with" -#~ msgstr "で始まる" - -#~ msgid "ends with" -#~ msgstr "で終わる" - -#~ msgid "sounds like" -#~ msgstr "に近い" - -#~ msgid "" -#~ "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP " -#~ "or perhaps your LDAP server has access control specified that prevents LDAP " -#~ "clients from accessing the RootDSE." -#~ msgstr "" -#~ "サーバーから LDAP 情報を取得できませんでした。これはあなたの PHP バージョンの不都合によるかもしれません。あるいは、あなたの " -#~ "LDAP サーバーは、LDAP クライアントが RootDSE にアクセスするのを防ぐアクセス制御指定をしています。" - -#~ msgid "ChangeLog" -#~ msgstr "変更履歴" - -#~ msgid "Unsafe file name: " -#~ msgstr "安全でないファイル名: " - -#~ msgid "No such file: " -#~ msgstr "ファイルがありません: " - -#~ msgid "" -#~ "You have enabled auto_uid_numbers for %s in your configuration, " -#~ " but you have not specified the " -#~ "auto_uid_number_mechanism. Please correct " -#~ "this problem." -#~ msgstr "" -#~ "設定ファイルの %sYou の auto_uid_numbers が有効ですが、 " -#~ " auto_uid_number_mechanism が指定されていません。 " -#~ "この問題を修正してください。." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool\" " -#~ " in your configuration for server %s, but you did not " -#~ "specify the audo_uid_number_uid_pool_dn. Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "サーバー %s の設定で、\"auto_uid_number_mechanism\" を \"uidpool\" に指定していますが、 " -#~ " audo_uid_number_uid_pool_dn を指定していません。 " -#~ " 続行する前にそれを指定してください" - -#~ msgid "LDAP said: %s" -#~ msgstr "LDAP の回答: %s" - -#~ msgid "Error number: %s (%s)" -#~ msgstr "エラー番号: %s (%s)" - -#~ msgid "Description: %s

" -#~ msgstr "説明: %s

" - -#~ msgid "Error number: %s

" -#~ msgstr "エラー番号: %s

" - -#~ msgid "Description: (no description available)
" -#~ msgstr "説明: (利用可能な説明がありませんでした)
" - -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "これは phpLDAPadmin の不都合ですか? もしそうなら 報告 してください。" - -#~ msgid "Unrecognized error number: " -#~ msgstr "未承認のエラー番号: " - -#~ msgid "Optional Binary Attributes" -#~ msgstr "オプションバイナリ属性" - -#~ msgid "Maximum file size: %s" -#~ msgstr "最大ファイルサイズ: %s" - #~ msgid "Back" #~ msgstr "戻る" @@ -2708,77 +2294,85 @@ msgstr "と " #~ msgid "Delete all" #~ msgstr "すべて削除" -#~ msgid "warning" -#~ msgstr "警告" +#~ msgid "hint" +#~ msgstr "ヒント" -#~ msgid "using template" -#~ msgstr "使用中のテンプレート" +#~ msgid "Warning: missing template file, " +#~ msgstr "警告: テンプレートファイルがありません。 " -#~ msgid "Redirecting..." -#~ msgstr "リダイレクト中..." +#~ msgid "Using default." +#~ msgstr "デフォルトを使います。" -#~ msgid "here" -#~ msgstr "ここ" +#~ msgid "You must choose a template" +#~ msgstr "テンプレートを選ばなければなりません" -#~ msgid "Step 1 of 2: Name and ObjectClass(es)" -#~ msgstr "ステップ 1/2: 名前と ObjectClass" +#~ msgid "%s is an invalid template" +#~ msgstr "%s は無効なテンプレート" -#~ msgid "Step 2 of 2: Specify attributes and values" -#~ msgstr "Step 2 of 2: 属性と値を指定" +#~ msgid "equals" +#~ msgstr "に一致" -#~ msgid "Relative Distinguished Name" -#~ msgstr "関連識別名" +#~ msgid "starts with" +#~ msgstr "で始まる" -#~ msgid "RDN" -#~ msgstr "RDN" +#~ msgid "contains" +#~ msgstr "を含む" -#~ msgid "(example: cn=MyNewPerson)" -#~ msgstr "(例: cn=MyNewPerson)" +#~ msgid "ends with" +#~ msgstr "で終わる" -#~ msgid "Could not bind to the LDAP server." -#~ msgstr "LDAP サーバーに接続できませんでした。" - -#~ msgid "Successfully logged into server %s" -#~ msgstr "サーバー %s へのログインに成功しました" - -#~ msgid "Searching..." -#~ msgstr "検索中..." - -#~ msgid "Logged out successfully from server %s" -#~ msgstr "サーバー %s からログアウトに成功しました" - -#~ msgid "Authenticate to server %s" -#~ msgstr "サーバー %s へ認証" - -#~ msgid "Warning: This web connection is unencrypted." -#~ msgstr "警告: このウェブ接続は暗号化されていません。" - -#~ msgid "User name" -#~ msgstr "ユーザー名" +#~ msgid "sounds like" +#~ msgstr "に近い" #~ msgid "" -#~ "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do " -#~ "so. An example config file is provided in 'config/config.php.example'" +#~ "Could not retrieve LDAP information from the server. This may be due to a " +#~ "bug in your version " +#~ "of PHP or perhaps your LDAP server has access control specified that " +#~ "prevents LDAP clients from accessing the RootDSE." #~ msgstr "" -#~ "phpLDAPadmin " -#~ "の設定をする必要があります。ファイル「config/config.php」の変更をしてください。サンプル設定ファイルとして「config.php.exam" -#~ "ple」を提供しています。" +#~ "サーバーから LDAP 情報を取得できませんでした。これはあなたの PHP バージョ" +#~ "ンの不都合によるかも" +#~ "しれません。あるいは、あなたの LDAP サーバーは、LDAP クライアントが " +#~ "RootDSE にアクセスするのを防ぐアクセス制御指定をしています。" + +#~ msgid "ChangeLog" +#~ msgstr "変更履歴" + +#~ msgid "" +#~ "To donate funds to the phpLDAPadmin project, use one of the PayPal " +#~ "buttons below." +#~ msgstr "" +#~ "phpLDAPadmin プロジェクトに資金を寄贈するためには、PayPal ボタンのうちの " +#~ "1 つを下に使用してください。" + +#~ msgid "Donate %s" +#~ msgstr "%s を寄贈" + +#~ msgid "" +#~ "You have enabled auto_uid_numbers for %s in your " +#~ "configuration, but you have not " +#~ "specified the auto_uid_number_mechanism. Please " +#~ "correct this problem." +#~ msgstr "" +#~ "設定ファイルの %sYou の auto_uid_numbers が有効です" +#~ "が、 auto_uid_number_mechanism が指定され" +#~ "ていません。 この問題を修正してくださ" +#~ "い。." + +#~ msgid "" +#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool" +#~ "\" in your configuration for server %s, " +#~ "but you did not specify the " +#~ "audo_uid_number_uid_pool_dn. Please specify it before proceeding." +#~ msgstr "" +#~ "サーバー %s の設定で、\"auto_uid_number_mechanism\" を \"uidpool\" " +#~ "に指定していますが、 " +#~ "audo_uid_number_uid_pool_dn を指定していませ" +#~ "ん。 続行する前にそれを指定してください" #~ msgid "Deletes not allowed in read only mode." #~ msgstr "読み込み専用モードでは削除は許可されていません。" -#~ msgid "list" -#~ msgstr "一覧" - -#~ msgid "table" -#~ msgstr "テーブル" - -#~ msgid "" -#~ "Your config.php specifies an invalid value for $default_search_display: %s. " -#~ "Please fix it" -#~ msgstr "" -#~ "config.php にて $default_search_display: %s の無効な値が指定されています。それを修正してください。" - #~ msgid "default template" #~ msgstr "デフォルトテンプレート" @@ -2797,6 +2391,9 @@ msgstr "と " #~ msgid "Organisational Unit" #~ msgstr "所属組織" +#~ msgid "New Organisational Unit" +#~ msgstr "新規所属組織" + #~ msgid "Organisational Role" #~ msgstr "所属職務" @@ -2887,7 +2484,9 @@ msgstr "と " #~ msgid "" #~ " Unable to create the Samba passwords. Please, check the configuration in " #~ "template_config.php" -#~ msgstr " Samba のパスワードを作成できませんでした。template_config.php の設定を確認してください。" +#~ msgstr "" +#~ " Samba のパスワードを作成できませんでした。template_config.php の設定を確" +#~ "認してください。" #~ msgid "Error: You have an error in your samba confguration." #~ msgstr "エラー: samba の設定にエラーがあります。" @@ -2911,15 +2510,18 @@ msgstr "と " #~ msgstr "新規ユーザーアカウント" #~ msgid "" -#~ "Hint: To customize this template, edit the file " -#~ "templates/creation/new_user_template.php" +#~ "Hint: To customize this template, edit the file templates/creation/" +#~ "new_user_template.php" #~ msgstr "" -#~ "ヒント: このテンプレートをカスタマイズする場合、ファイル templates/creation/new_user_template.php " -#~ "を編集します。" +#~ "ヒント: このテンプレートをカスタマイズする場合、ファイル templates/" +#~ "creation/new_user_template.php を編集します。" #~ msgid "Last name" #~ msgstr "苗字" +#~ msgid "State" +#~ msgstr "地域" + #~ msgid "Common name" #~ msgstr "共通名" @@ -2944,16 +2546,21 @@ msgstr "と " #~ msgid "GID Number" #~ msgstr "GID 番号" +#~ msgid "User ID" +#~ msgstr "ユーザー ID" + #~ msgid "Your passwords don't match. Please go back and try again." #~ msgstr "パスワードが一致しません。戻ってからもう一度試してください。" #~ msgid "You cannot leave the %s blank. Please go back and try again." -#~ msgstr "%s ブランクを残すことはできません。戻ってからもう一度試してください。" +#~ msgstr "" +#~ "%s ブランクを残すことはできません。戻ってからもう一度試してください。" #~ msgid "" -#~ "You can only enter numeric values for the %s field. Please go back and try " -#~ "again." -#~ msgstr "フィールド %s は数値のみ入力で出来ます。戻ってからもう一度試してください。" +#~ "You can only enter numeric values for the %s field. Please go back and " +#~ "try again." +#~ msgstr "" +#~ "フィールド %s は数値のみ入力で出来ます。戻ってからもう一度試してください。" #~ msgid "" #~ "The container you specified (%s) does not exist. Please go back and try " @@ -2966,6 +2573,9 @@ msgstr "と " #~ msgid "Create Account" #~ msgstr "アカウント作成" +#~ msgid "New Posix Group" +#~ msgstr "新規 Posix グループ" + #~ msgid "New Address Book Entry" #~ msgstr "新規アドレス帳エントリ" @@ -2996,63 +2606,13 @@ msgstr "と " #~ msgid "Email" #~ msgstr "電子メール" -#~ msgid "You cannot leave the Common Name blank. Please go back and try again." -#~ msgstr "一般名を空にすることは出来ません。戻ってからもう一度試してください。" +#~ msgid "" +#~ "You cannot leave the Common Name blank. Please go back and try again." +#~ msgstr "" +#~ "一般名を空にすることは出来ません。戻ってからもう一度試してください。" #~ msgid "Confirm entry creation:" #~ msgstr "エントリ作成の確認:" #~ msgid "Create Address" #~ msgstr "アドレス作成" - -#~ msgid "Paste your LDIF here" -#~ msgstr "ここに LDIF を貼り付ける" - -#~ msgid "" -#~ "This template has been disabled, possibly due to missing schema or missing " -#~ "template XML fields." -#~ msgstr "このテンプレートは、恐らくスキーマか見当たらないか、テンプレート XML 項目が見当たらないため、無効になりました。" - -#~ msgid "Base DN: " -#~ msgstr "ベース DN: " - -#~ msgid "Verify" -#~ msgstr "確認" - -#~ msgid "Next Page" -#~ msgstr "次のページ" - -#~ msgid "Click to expand this branch." -#~ msgstr "クリックするとこの枝を展開します。" - -#~ msgid "Warning: missing template file, " -#~ msgstr "警告: テンプレートファイルがありません。 " - -#~ msgid "Using default." -#~ msgstr "デフォルトを使います。" - -#~ msgid "You must choose a template" -#~ msgstr "テンプレートを選ばなければなりません" - -#~ msgid "%s is an invalid template" -#~ msgstr "%s は無効なテンプレート" - -#~ msgid "" -#~ "To donate funds to the phpLDAPadmin project, use one of the PayPal buttons " -#~ "below." -#~ msgstr "phpLDAPadmin プロジェクトに資金を寄贈するためには、PayPal ボタンのうちの 1 つを下に使用してください。" - -#~ msgid "Donate %s" -#~ msgstr "%s を寄贈" - -#~ msgid "New Organisational Unit" -#~ msgstr "新規所属組織" - -#~ msgid "State" -#~ msgstr "地域" - -#~ msgid "User ID" -#~ msgstr "ユーザー ID" - -#~ msgid "New Posix Group" -#~ msgstr "新規 Posix グループ" diff --git a/locale/pl_PL/LC_MESSAGES/messages.mo b/locale/pl_PL/LC_MESSAGES/messages.mo index 482078ca74528a497ddb8abfeac909fb79fd5b50..58700d3fecfc3a142656373ce131ce26ebf78768 100644 GIT binary patch delta 12283 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 R4&Avf&~x;_a6d2Se*uRNUjzUE delta 13134 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\n" +"PO-Revision-Date: 2008-01-28 14:08:00+0100\n" +"Last-Translator: Piotr (DrFugazi) Tarnowski\n" "Language-Team: phpLDAPadmin \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-19 00:52+0000\n" -"X-Generator: Launchpad (build Unknown)\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../../htdocs/mass_delete.php:86 #, php-format msgid "%s of %s entries failed to be deleted." msgstr "%s z %s wpisów nie zostało usuniętych." -#: ../../lib/EntryWriter1.php:960 +#: ../../lib/EntryWriter1.php:946 msgid "(" msgstr "(" -#: ../../lib/HTMLTree.php:486 +#: ../../lib/HTMLTree.php:481 msgid "(Session timed out. Automatically logged out.)" msgstr "(Sesja wygasła. Automatycznie wylogowano.)" -#: ../../lib/EntryWriter1.php:962 +#: ../../lib/EntryWriter1.php:948 msgid ")" msgstr ")" -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 +#: ../../htdocs/update_confirm.php:316 ../../htdocs/update_confirm.php:321 +#: ../../htdocs/purge_cache.php:13 ../../htdocs/add_value_form.php:76 +#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:104 +#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/rename.php:24 +#: ../../htdocs/export.php:18 ../../htdocs/rdelete.php:21 +#: ../../htdocs/add_attr.php:25 ../../htdocs/copy.php:20 +#: ../../htdocs/copy.php:76 ../../htdocs/mass_delete.php:26 +#: ../../htdocs/delete.php:21 ../../htdocs/schema.php:20 #: ../../htdocs/search.php:120 ../../htdocs/search.php:124 #: ../../htdocs/search.php:128 ../../htdocs/search.php:265 #: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 +#: ../../htdocs/search.php:299 ../../htdocs/delete_attr.php:21 +#: ../../htdocs/add_value.php:24 ../../htdocs/ldif_import.php:19 +#: ../../htdocs/create.php:25 ../../htdocs/create.php:114 +#: ../../htdocs/refresh.php:17 ../../htdocs/server_info.php:16 +#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 +#: ../../htdocs/update.php:80 ../../lib/EntryWriter2.php:21 +#: ../../lib/EntryWriter2.php:175 ../../lib/HTMLTree.php:274 +#: ../../lib/page.php:199 ../../lib/EntryWriter1.php:247 +#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 +#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:512 +#: ../../lib/EntryWriter1.php:1019 ../../lib/EntryWriter1.php:1022 +#: ../../lib/EntryWriter1.php:1246 ../../lib/EntryWriter1.php:1415 +#: ../../lib/EntryWriter1.php:2438 msgid ":" msgstr ":" -#: ../../lib/search_form_advanced.php:103 +#: ../../lib/search_form_advanced.php:102 msgid "A list of attributes to display in the results (comma-separated)" msgstr "Lista atrybutów do wyświetlenia w wynikach (rozdzielona przecinkami)" -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "Zapytanie na uidpool_dn nie zwróciło prawidłowego uidNumber" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 +#: ../../lib/template_functions.php:958 ../../lib/EntryWriter1.php:2438 msgid "A random password was generated for you" msgstr "Zostało wygenerowane losowe hasło" @@ -81,46 +76,46 @@ msgstr "Wymagana jest poprawna linia DN." msgid "A valid newrdn attribute should be specified" msgstr "Powinien zostać podany poprawny atrybut newrdn" -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 +#: ../../htdocs/add_attr_form.php:103 ../../htdocs/add_attr_form.php:147 +#: ../../lib/EntryWriter1.php:775 msgid "Add" msgstr "Dodaj" -#: ../../htdocs/add_value_form.php:182 +#: ../../htdocs/add_value_form.php:240 msgid "Add New Value" msgstr "Dodaj nową wartość" -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 +#: ../../htdocs/add_oclass_form.php:104 ../../htdocs/compare.php:526 msgid "Add ObjectClass and Attributes" msgstr "Dodaj klasę obiektu i atrybuty" -#: ../../htdocs/modify_member_form.php:145 +#: ../../htdocs/modify_member_form.php:144 msgid "Add all" msgstr "Dodaj wszystko" -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 +#: ../../htdocs/compare.php:537 ../../lib/EntryWriter1.php:1821 #, php-format msgid "Add an additional value to attribute '%s'" msgstr "Dodaj dodatkową wartość do atrybutu '%s'" -#: ../../htdocs/add_value_form.php:93 +#: ../../htdocs/add_value_form.php:98 msgid "Add new" msgstr "Dodaj nowy" -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 +#: ../../htdocs/add_value_form.php:196 ../../htdocs/compare.php:528 msgid "Add new ObjectClass" msgstr "Dodaj nową klasę obiektu" -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 +#: ../../htdocs/add_attr_form.php:23 ../../htdocs/add_attr_form.php:71 +#: ../../lib/EntryWriter1.php:775 msgid "Add new attribute" msgstr "Dodaj nowy atrybut" -#: ../../htdocs/add_attr_form.php:114 +#: ../../htdocs/add_attr_form.php:113 msgid "Add new binary attribute" msgstr "Dodaj nowy atrybut binarny" -#: ../../htdocs/modify_member_form.php:145 +#: ../../htdocs/modify_member_form.php:144 msgid "Add selected" msgstr "Dodaj wybrane" @@ -128,16 +123,16 @@ msgstr "Dodaj wybrane" msgid "Adding..." msgstr "Dodawanie..." -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 +#: ../../lib/search_form_advanced.php:32 ../../lib/search_form_simple.php:34 +#: ../../lib/search_form_predefined.php:33 msgid "Advanced Search Form" msgstr "Wyszukiwanie zaawansowane" -#: ../../lib/config_default.php:646 +#: ../../lib/config_default.php:630 msgid "Alias for" msgstr "Alias dla" -#: ../../htdocs/schema.php:110 +#: ../../htdocs/schema.php:108 msgid "Aliases" msgstr "Aliasy" @@ -145,15 +140,14 @@ msgstr "Aliasy" msgid "All entries deleted successfully." msgstr "Wszystkie wpisy pomyślnie usunieto." -#: ../../lib/EntryWriter1.php:825 +#: ../../lib/EntryWriter1.php:811 #, php-format msgid "An attribute (%s) was modified and is highlighted below." msgstr "Atrybut (%s) został zmodyfikowany i jest wyróżniony poniżej." #: ../../htdocs/update_confirm.php:100 msgid "An entry should have one structural objectClass." -msgstr "" -"Wpis powinien posiadać jedną strukturalną klasę obiektu (objectClass)." +msgstr "Wpis powinien posiadać jedną strukturalną klasę obiektu (objectClass)." #: ../../htdocs/login_form.php:60 msgid "Anonymous" @@ -167,7 +161,7 @@ msgstr "Podłączenie anonimowe" msgid "Are you sure you want to permanently delete this object?" msgstr "Czy na pewno trwale usunąć ten obiekt ?" -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 +#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:53 msgid "Attribute" msgstr "Atrybut" @@ -187,15 +181,15 @@ msgstr "Atrybut ma niewłaściwą postać" msgid "Authenticate" msgstr "Zaloguj" -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 #: ../../htdocs/login.php:26 ../../htdocs/login.php:91 #: ../../htdocs/login.php:116 ../../htdocs/login.php:136 #: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 +#: ../../htdocs/login_form.php:19 ../../lib/HTMLTree.php:90 +#: ../../lib/server_functions.php:2426 msgid "Authenticate to server" msgstr "Uwierzytelnienie dla serwera" -#: ../../htdocs/modify_member_form.php:114 +#: ../../htdocs/modify_member_form.php:113 msgid "Available members" msgstr "Dostępni członkowie" @@ -203,21 +197,25 @@ msgstr "Dostępni członkowie" msgid "Back Up..." msgstr "Do góry..." -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 +#: ../../lib/functions.php:1682 +msgid "Backtrace" +msgstr "Śledzenie wstecz" + #: ../../htdocs/login.php:92 ../../htdocs/login.php:144 +#: ../../lib/server_functions.php:339 ../../lib/server_functions.php:2427 msgid "Bad username or password. Please try again." msgstr "Zła nazwa użytkownika lub hasło. Spróbuj ponownie." -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 +#: ../../htdocs/export_form.php:31 ../../lib/search_form_advanced.php:89 msgid "Base (base dn only)" msgstr "Base (tylko bazowa dn)" -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 +#: ../../htdocs/search.php:295 ../../htdocs/export_form.php:52 +#: ../../lib/search_form_advanced.php:63 msgid "Base DN" msgstr "Bazowa DN" -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 +#: ../../htdocs/compare.php:274 ../../lib/EntryWriter1.php:1965 msgid "Binary value" msgstr "Wartość binarna" @@ -229,32 +227,32 @@ msgstr "Budowanie migawki (snapshot) drzewa do skopiowania... " msgid "CSV (Spreadsheet)" msgstr "CVS (arkusz)" -#: ../../lib/functions.php:63 +#: ../../lib/functions.php:64 msgid "Called to load a class that cant be found" msgstr "Próbowano załadować klasę, której nie znaleziono" -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 +#: ../../htdocs/update_confirm.php:307 ../../htdocs/delete_form.php:77 #: ../../htdocs/delete_form.php:127 msgid "Cancel" msgstr "Anuluj" -#: ../../htdocs/compare.php:343 +#: ../../htdocs/compare.php:381 msgid "Check password" msgstr "Sprawdź hasło" -#: ../../lib/EntryWriter1.php:2427 +#: ../../lib/EntryWriter1.php:2402 msgid "Check password..." msgstr "Sprawdź hasło" -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 +#: ../../lib/EntryReader.php:359 ../../lib/EntryReader.php:381 msgid "Checking passwords" msgstr "Sprawdzam hasła" -#: ../../lib/EntryWriter1.php:796 +#: ../../lib/EntryWriter1.php:782 msgid "Children" msgstr "Wpisy potomne" -#: ../../lib/functions.php:3223 +#: ../../lib/functions.php:3221 msgid "Click to popup a dialog to select a date graphically" msgstr "Kliknij aby wywołać okno i wybrać datę graficznie" @@ -262,22 +260,22 @@ msgstr "Kliknij aby wywołać okno i wybrać datę graficznie" msgid "Click to popup a dialog to select an entry (DN) graphically" msgstr "Kliknij aby wywołać okno i wybrać wpis (DN) graficznie" -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 +#: ../../htdocs/compare.php:160 ../../htdocs/server_info.php:83 +#: ../../lib/EntryWriter1.php:1887 #, php-format msgid "Click to view the schema definition for attribute type '%s'" msgstr "Kliknij aby zobaczyć definicję schematu dla atrybutu typu '%s'" -#: ../../htdocs/schema.php:106 +#: ../../htdocs/schema.php:104 msgid "Collective" -msgstr "Zbiorcza" +msgstr "Zbiorcza " -#: ../../htdocs/update_confirm.php:303 +#: ../../htdocs/update_confirm.php:304 msgid "Commit" msgstr "Zatwierdź" -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 +#: ../../htdocs/password_checker.php:33 ../../htdocs/compare_form.php:29 +#: ../../htdocs/compare_form.php:64 ../../lib/EntryWriter1.php:761 msgid "Compare" msgstr "Porównaj" @@ -289,11 +287,11 @@ msgstr "Porównaj inny DN z" msgid "Compare this DN with another" msgstr "Prównaj tą DN z inną" -#: ../../lib/EntryWriter1.php:776 +#: ../../lib/EntryWriter1.php:762 msgid "Compare with another entry" msgstr "Porównaj z innym wpisem" -#: ../../htdocs/compare.php:42 +#: ../../htdocs/compare.php:48 msgid "Comparing the following DNs" msgstr "Porównuję następujące DN" @@ -334,7 +332,7 @@ msgstr "Kopiuj " msgid "Copy Entry" msgstr "Kopiuj wpis" -#: ../../lib/EntryWriter1.php:741 +#: ../../lib/EntryWriter1.php:727 msgid "Copy or move this entry" msgstr "Skopiuj lub przenieś ten wpis" @@ -342,10 +340,9 @@ msgstr "Skopiuj lub przenieś ten wpis" msgid "Copy successful!" msgstr "Kopiowanie zakończone pomyślnie!" -#: ../../lib/EntryWriter1.php:740 +#: ../../lib/EntryWriter1.php:726 msgid "Copy this object to another location,a new DN, or another server" -msgstr "" -"Skopiuj ten obiekt do innej lokalizacji, nowej DN, lub na inny serwer" +msgstr "Skopiuj ten obiekt do innej lokalizacji, nowej DN, lub na inny serwer" #: ../../htdocs/copy.php:57 msgid "Copying " @@ -355,7 +352,7 @@ msgstr "Kopiowanie " msgid "Could not add object:" msgstr "Nie można dodać obiektu:" -#: ../../htdocs/create.php:133 +#: ../../htdocs/create.php:132 msgid "Could not add the object to the LDAP server." msgstr "Nie można dodać obiektu do serwera LDAP." @@ -363,17 +360,16 @@ msgstr "Nie można dodać obiektu do serwera LDAP." msgid "Could not bind anonymously to server." msgstr "Nie można anonimowo podłączyć do serwera." -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "Nie można podłączyć do serwera LDAP (%s)." +#: ../../lib/server_functions.php:348 +msgid "Could not bind to the LDAP server." +msgstr "Nie można podłączyć się do serwera LDAP." -#: ../../lib/server_functions.php:347 +#: ../../lib/server_functions.php:345 #, php-format msgid "Could not connect to \"%s\" on port \"%s\"" msgstr "Nie można podłączyć się do \"%s\" na port \"%s\"" -#: ../../lib/HTMLTree.php:96 +#: ../../lib/HTMLTree.php:91 msgid "Could not connect to LDAP server" msgstr "Nie można ustanowić połączenia z serwerem LDAP." @@ -381,8 +377,8 @@ msgstr "Nie można ustanowić połączenia z serwerem LDAP." msgid "Could not delete object:" msgstr "Nie można usunąć obiektu:" -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 +#: ../../htdocs/rdelete.php:45 ../../htdocs/delete.php:35 +#: ../../htdocs/delete.php:49 #, php-format msgid "Could not delete the entry: %s" msgstr "Nie można usunąć wpisu: %s" @@ -391,7 +387,7 @@ msgstr "Nie można usunąć wpisu: %s" msgid "Could not determine base DN" msgstr "Nie można określić bazowego DN" -#: ../../lib/HTMLTree.php:82 +#: ../../lib/HTMLTree.php:78 msgid "Could not determine the root of your LDAP tree." msgstr "Nie można ustalić korzenia Twojego drzewa LDAP." @@ -400,7 +396,7 @@ msgstr "Nie można ustalić korzenia Twojego drzewa LDAP." msgid "Could not fetch jpeg data from LDAP server for attribute %s." msgstr "Nie można pobrać danych jpeg z serwera LDAP dla atrybutu %s." -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 +#: ../../htdocs/logout.php:24 ../../lib/timeout_functions.php:74 msgid "Could not logout." msgstr "Nie można wylogować." @@ -412,7 +408,7 @@ msgstr "Nie można zmodyfikować obiektu:" msgid "Could not perform ldap_mod_add operation." msgstr "Nie można dokonać operacji ldap_mod_add." -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 +#: ../../htdocs/delete_attr.php:50 ../../htdocs/update.php:178 msgid "Could not perform ldap_modify operation." msgstr "Nie można wykonać operacji modyfikacji (ldap_modify)." @@ -420,7 +416,7 @@ msgstr "Nie można wykonać operacji modyfikacji (ldap_modify)." msgid "Could not rename object:" msgstr "Nie można zmienić nazwy obiektu:" -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 +#: ../../htdocs/rename.php:61 ../../lib/server_functions.php:1522 msgid "Could not rename the entry" msgstr "Nie można zmienić nazwy wpisu" @@ -432,7 +428,7 @@ msgstr "Nie można uzyskać schematu z" msgid "Could not set cookie." msgstr "Nie można ustawić ciasteczka (cookie)." -#: ../../lib/server_functions.php:265 +#: ../../lib/server_functions.php:263 msgid "Could not start TLS. Please check your LDAP server configuration." msgstr "Nie można uruchomić TLS. Proszę sprawdzić konfigurację serwera LDAP." @@ -445,43 +441,43 @@ msgstr "" "Nie można zapisać do katalogu $jpeg_temp_dir %s. Sprawdź proszę czy Twój " "serwer może zapisywać pliki w tym katalogu." -#: ../../lib/EntryWriter1.php:783 +#: ../../lib/EntryWriter1.php:769 msgid "Create" msgstr "Utwórz" -#: ../../htdocs/create.php:118 +#: ../../htdocs/create.php:117 msgid "Create Entry" msgstr "Utwórz wpis" -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 +#: ../../lib/EntryWriter2.php:82 ../../lib/EntryWriter1.php:242 +#: ../../lib/EntryWriter1.php:313 msgid "Create Object" msgstr "Utwórz obiekt" -#: ../../lib/EntryWriter1.php:783 +#: ../../lib/EntryWriter1.php:769 msgid "Create a child entry" msgstr "Utwórz wpis potomny" -#: ../../lib/HTMLTree.php:463 +#: ../../lib/HTMLTree.php:458 msgid "Create a new entry in" msgstr "Utwórz nowy wpis w" -#: ../../htdocs/create.php:128 +#: ../../htdocs/create.php:127 msgid "Create another entry" msgstr "Utwórz inny wpis" -#: ../../lib/HTMLTree.php:70 +#: ../../lib/HTMLTree.php:66 msgid "Create it?" msgstr "Utworzyć ?" -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 +#: ../../lib/HTMLTree.php:458 ../../lib/AJAXTree.php:343 #: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 +#: ../../lib/AJAXTree.php:368 ../../lib/PLMTree.php:142 +#: ../../lib/PLMTree.php:162 msgid "Create new entry here" msgstr "Utwórz nowy wpis" -#: ../../htdocs/create.php:115 +#: ../../htdocs/create.php:114 msgid "Creation successful!" msgstr "Utworzono pomyślnie!" @@ -489,11 +485,11 @@ msgstr "Utworzono pomyślnie!" msgid "Credits" msgstr "Twórcy" -#: ../../htdocs/add_value_form.php:112 +#: ../../htdocs/add_value_form.php:104 msgid "Current list of" msgstr "Aktualna lista" -#: ../../lib/EntryWriter1.php:739 +#: ../../lib/EntryWriter1.php:725 msgid "Cut" msgstr "Wytnij" @@ -501,7 +497,7 @@ msgstr "Wytnij" msgid "DN" msgstr "DN" -#: ../../lib/EntryWriter1.php:1886 +#: ../../lib/EntryWriter1.php:1860 msgid "DN not available" msgstr "DN nie dostępna" @@ -510,7 +506,7 @@ msgstr "DN nie dostępna" msgid "DSLM Export for: %s" msgstr "Eksport DSLM dla: %s" -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 +#: ../../lib/EntryWriter1.php:1084 ../../lib/EntryWriter1.php:1296 msgid "Default" msgstr "Domyślny" @@ -523,7 +519,7 @@ msgstr "Usuń" msgid "Delete %s" msgstr "Usuń %s" -#: ../../lib/HTMLTree.php:139 +#: ../../lib/HTMLTree.php:134 msgid "Delete Checked Entries" msgstr "Usuń zaznaczone wpisy" @@ -548,7 +544,7 @@ msgstr "Usuń wszystkie %s obiekty/ów" msgid "Delete photo" msgstr "Usuń zdjęcie" -#: ../../lib/EntryWriter1.php:763 +#: ../../lib/EntryWriter1.php:749 msgid "Delete this entry" msgstr "Usuń ten wpis" @@ -556,7 +552,7 @@ msgstr "Usuń ten wpis" msgid "Deleting" msgstr "Usuwanie" -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 +#: ../../htdocs/rdelete.php:30 ../../htdocs/mass_delete.php:61 #, php-format msgid "Deleting %s" msgstr "Usuwanie %s" @@ -570,11 +566,11 @@ msgstr "Usuwanie..." msgid "Deletion progress on server \"%s\"" msgstr "Postęp usuwania na serwerze \"%s\"" -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 +#: ../../htdocs/add_value_form.php:230 ../../htdocs/schema.php:69 +#: ../../htdocs/schema.php:96 ../../htdocs/schema.php:403 #: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 +#: ../../htdocs/ldif_import.php:190 ../../lib/functions.php:1670 +#: ../../lib/functions.php:1673 msgid "Description" msgstr "Opis" @@ -590,16 +586,16 @@ msgstr "Docelowy serwer" msgid "Destination server is currently READ-ONLY." msgstr "Docelowy serwer jest obecnie TYLKO-DO-ODCZYTU" -#: ../../htdocs/create.php:126 +#: ../../htdocs/create.php:125 msgid "Display the new created entry" msgstr "Pokaż nowo utworzony wpis" -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 +#: ../../htdocs/add_value_form.php:100 ../../htdocs/rename_form.php:29 +#: ../../htdocs/compare.php:56 ../../htdocs/compare.php:59 #: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 +#: ../../htdocs/add_attr_form.php:25 ../../htdocs/compare_form.php:24 #: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 +#: ../../lib/EntryWriter1.php:511 msgid "Distinguished Name" msgstr "Wyróżniona Nazwa (DN)" @@ -616,25 +612,25 @@ msgstr "Czy chcesz dokonać tych zmian ?" msgid "Documentation" msgstr "Dokumentacja" -#: ../../htdocs/ldif_import_form.php:44 +#: ../../htdocs/ldif_import_form.php:33 ../../htdocs/ldif_import_form.php:44 msgid "Don't stop on errors" msgstr "Nie zatrzymuj się po napotkaniu błędów" -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 +#: ../../htdocs/welcome.php:35 ../../lib/functions.php:286 msgid "Donate" msgstr "Wesprzyj projekt" -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 +#: ../../htdocs/search.php:250 ../../lib/export_functions.php:252 msgid "Encountered an error while performing search." msgstr "Napotkano błąd podczas szukania." -#: ../../htdocs/add_value_form.php:135 +#: ../../htdocs/add_value_form.php:178 msgid "Enter the value you would like to add:" msgstr "Wprowadź wartość, którą chcesz dodać:" #: ../../htdocs/search.php:265 msgid "Entries found" -msgstr "Znaleziono wpisów:" +msgstr "Znaleziono wpisów: " #: ../../lib/export_functions.php:319 msgid "Entry" @@ -649,15 +645,16 @@ msgstr "Wpis %s oraz poddrzewo zostały pomyślnie usunięte." msgid "Entry Chooser" msgstr "Wybór wpisu" -#: ../../htdocs/create.php:123 +#: ../../htdocs/create.php:122 msgid "Entry created" msgstr "Wpis utworzono" -#: ../../htdocs/schema.php:101 +#: ../../htdocs/schema.php:99 msgid "Equality" msgstr "Równość" -#: ../../lib/functions.php:130 ../../lib/functions.php:513 +#: ../../lib/functions.php:435 ../../lib/functions.php:1649 +#: ../../lib/functions.php:1784 msgid "Error" msgstr "Błąd" @@ -671,8 +668,8 @@ msgstr "" msgid "Error code" msgstr "Kod błędu" -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 +#: ../../lib/functions.php:1669 ../../lib/functions.php:1672 +#: ../../lib/functions.php:1679 msgid "Error number" msgstr "Numer błędu" @@ -684,15 +681,15 @@ msgid "" "You entered '%s', which is not allowed." msgstr "" "Błąd: Masz błąd w pliku konfiguracji. Trzy możliwe wartości dla auth_type w " -"sekcji $servers to 'session', 'cookie' oraz 'config'. Wprowadzono wartość " -"'%s', która nie jest dozwolona." +"sekcji $servers to 'session', 'cookie' oraz 'config'. Wprowadzono wartość '%" +"s', która nie jest dozwolona." -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 +#: ../../htdocs/export_form.php:36 ../../htdocs/export_form.php:46 +#: ../../lib/EntryWriter1.php:719 msgid "Export" msgstr "Eksportuj" -#: ../../lib/HTMLTree.php:264 +#: ../../lib/HTMLTree.php:259 msgid "Export entries" msgstr "Eksportuj wpisy" @@ -700,7 +697,7 @@ msgstr "Eksportuj wpisy" msgid "Export format" msgstr "Format eksportu" -#: ../../lib/EntryWriter1.php:804 +#: ../../lib/EntryWriter1.php:790 msgid "Export subtree" msgstr "Eksportuj całe poddrzewo" @@ -723,8 +720,8 @@ msgstr "Błąd podczas kopiowania DN: " msgid "Failed to delete entry %s" msgstr "Błąd podczas usuwania wpisu %s" -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 +#: ../../htdocs/ldif_import.php:54 ../../lib/functions.php:1700 +#: ../../lib/functions.php:1786 msgid "File" msgstr "Plik" @@ -736,15 +733,11 @@ msgstr "Filtr" msgid "Filter performed" msgstr "Zastosowano filtr" -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "Wymuś jako MAY przez konfigurację" - #: ../../htdocs/search.php:276 msgid "Format" msgstr "Format" -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 +#: ../../lib/functions.php:1701 msgid "Function" msgstr "Funkcja" @@ -753,44 +746,44 @@ msgstr "Funkcja" msgid "" "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" msgstr "" -"Wygenerowane przez phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) na " -"%s" +"Wygenerowane przez phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) na %" +"s" -#: ../../lib/functions.php:61 ../../lib/functions.php:598 +#: ../../lib/functions.php:62 ../../lib/functions.php:475 msgid "Generic Error" msgstr "Błąd ogólny" -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 +#: ../../htdocs/schema.php:131 ../../htdocs/schema.php:311 +#: ../../htdocs/schema.php:357 ../../htdocs/schema.php:388 msgid "Go" msgstr "Idź" -#: ../../htdocs/update_confirm.php:330 +#: ../../htdocs/update_confirm.php:339 msgid "Go back" msgstr "Wstecz" -#: ../../lib/EntryWriter1.php:1882 +#: ../../lib/EntryWriter1.php:1856 msgid "Go to" msgstr "Idź do" -#: ../../htdocs/compare.php:403 +#: ../../htdocs/compare.php:449 #, php-format msgid "Go to %s" msgstr "Idź do %s" -#: ../../htdocs/modify_member_form.php:115 +#: ../../htdocs/modify_member_form.php:114 msgid "Group members" msgstr "Członkowie grupy" -#: ../../lib/functions.php:359 +#: ../../lib/functions.php:290 msgid "Help" msgstr "Pomoc" -#: ../../lib/EntryWriter1.php:748 +#: ../../lib/EntryWriter1.php:734 msgid "Hide" msgstr "Ukryj" -#: ../../lib/EntryWriter1.php:749 +#: ../../lib/EntryWriter1.php:735 msgid "Hide internal attributes" msgstr "Ukryj wewnętrzne atrybuty" @@ -806,12 +799,12 @@ msgstr "" "Wskazówka: Kopiowanie pomiędzy różnymi serwerami działa wtedy, gdy nie " "występuje naruszenie schematów" -#: ../../lib/EntryWriter1.php:809 +#: ../../lib/EntryWriter1.php:795 msgid "Hint: To delete an attribute, empty the text field and click save." msgstr "" "Wskazówka: Aby skasować atrybut, wyczyść pole tekstowe i kliknij zapisz." -#: ../../lib/EntryWriter1.php:815 +#: ../../lib/EntryWriter1.php:801 msgid "Hint: To view the schema for an attribute, click the attribute name." msgstr "" "Wskazówka: Aby zobaczyć schemat dla atrybutu, kliknij na nazwie atrybutu." @@ -824,7 +817,7 @@ msgstr "" "Wskazówka: Musisz wybrać dokładnie jedną strukturalną klasę obiektu " "(wyróżnioną pogrubieniem)" -#: ../../lib/functions.php:347 +#: ../../lib/functions.php:278 msgid "Home" msgstr "Strona główna" @@ -841,11 +834,11 @@ msgstr "" "Jeśli chcesz dodać własne kryteria do listy, zmodyfikuj plik search.php aby " "to obsłużyć." -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 +#: ../../htdocs/ldif_import.php:51 ../../htdocs/ldif_import_form.php:21 msgid "Import LDIF File" msgstr "Importuj plik LDIF" -#: ../../lib/HTMLTree.php:256 +#: ../../lib/HTMLTree.php:251 msgid "Import entries from an LDIF file" msgstr "Importuj wpisy z pliku LDIF" @@ -853,7 +846,7 @@ msgstr "Importuj wpisy z pliku LDIF" msgid "In order to add these objectClass(es) to this entry, you must specify" msgstr "Aby dodać tę/e klasę/y obiektu do tego wpisu, musisz określić" -#: ../../lib/HTMLTree.php:161 +#: ../../lib/HTMLTree.php:156 #, php-format msgid "Inactivity will log you off at %s" msgstr "Brak aktywności wyloguje Cię o %s" @@ -862,15 +855,11 @@ msgstr "Brak aktywności wyloguje Cię o %s" msgid "Include system attributes" msgstr "Zawiera atrybuty systemowe" -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "Niewłaściwa wersja PHP" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 +#: ../../htdocs/schema.php:462 ../../htdocs/schema.php:485 msgid "Inherited from" msgstr "Dziedziczone z" -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 +#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 msgid "Inherits from" msgstr "Dziedziczy z" @@ -878,7 +867,7 @@ msgstr "Dziedziczy z" msgid "Instructions" msgstr "Instrukcje" -#: ../../lib/server_functions.php:344 +#: ../../lib/server_functions.php:342 msgid "Insufficient access rights." msgstr "Niewystarczające uprawnienia dostępu." @@ -894,14 +883,14 @@ msgstr "Błędny format eksportu" msgid "Is this a phpLDAPadmin bug?" msgstr "Czy jest to bug w phpLDAPadmin ?" -#: ../../lib/HTMLTree.php:83 +#: ../../lib/HTMLTree.php:79 msgid "" "It appears that the LDAP server has been configured to not reveal its root." msgstr "" "Wygląda, że serwer LDAP jest skonfigurowany tak, aby nie ujawniać swojego " "korzenia." -#: ../../lib/server_functions.php:312 +#: ../../lib/server_functions.php:310 #, php-format msgid "" "It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " @@ -910,23 +899,23 @@ msgstr "" "Wygląda na to, że sasl_authz_id_regex \"%s\".\" zawiera nieprawidłowe " "wyrażenie regularne PCRE." -#: ../../htdocs/schema.php:302 +#: ../../htdocs/schema.php:295 msgid "Jump to a matching rule" msgstr "Skocz do reguły dopasowania" -#: ../../htdocs/schema.php:121 +#: ../../htdocs/schema.php:118 msgid "Jump to an attribute type" msgstr "Skocz do typu atrybutu" -#: ../../htdocs/schema.php:381 +#: ../../htdocs/schema.php:374 msgid "Jump to an objectClass" msgstr "Skocz do klasy obiektu" -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 +#: ../../htdocs/schema.php:419 ../../htdocs/schema.php:437 msgid "Jump to this objectClass definition" msgstr "Skocz do definicji klasy obiektu" -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 +#: ../../htdocs/ldif_import.php:144 ../../lib/functions.php:1662 msgid "LDAP said" msgstr "LDAP odpowiedział" @@ -959,11 +948,11 @@ msgstr "Zakończenie linii" msgid "List of entries to be deleted:" msgstr "Lista wpisów do usunięcia:" -#: ../../lib/HTMLTree.php:279 +#: ../../lib/HTMLTree.php:274 msgid "Logged in as" msgstr "Zalogowany/a jako" -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 +#: ../../htdocs/update.php:158 ../../lib/HTMLTree.php:472 msgid "Login" msgstr "Zaloguj" @@ -979,7 +968,7 @@ msgstr "Logowanie..." msgid "Logout" msgstr "Wyloguj" -#: ../../lib/HTMLTree.php:272 +#: ../../lib/HTMLTree.php:267 msgid "Logout of this server" msgstr "Wyloguj z tego serwera" @@ -987,7 +976,7 @@ msgstr "Wyloguj z tego serwera" msgid "Looking in" msgstr "Szukam w" -#: ../../lib/EntryWriter1.php:1891 +#: ../../lib/EntryWriter1.php:1865 msgid "Mail" msgstr "E-mail" @@ -1013,7 +1002,7 @@ msgstr "" "Masowe usuwanie nie jest dozwolone. Odblokuj to proszę w config.php przed " "kontynuacją." -#: ../../htdocs/schema.php:323 +#: ../../htdocs/schema.php:316 msgid "Matching Rule OID" msgstr "OID reguły dopasowania" @@ -1021,19 +1010,19 @@ msgstr "OID reguły dopasowania" msgid "Matching Rules" msgstr "Reguły dopasowania" -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 +#: ../../htdocs/add_value_form.php:237 ../../htdocs/schema.php:107 msgid "Maximum Length" msgstr "Maksymalna długość" -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 +#: ../../htdocs/add_attr_form.php:154 ../../htdocs/ldif_import_form.php:35 msgid "Maximum file size" msgstr "Maksymalny rozmiar pliku" -#: ../../lib/functions.php:329 +#: ../../lib/functions.php:260 msgid "Memory Limit low." msgstr "Niski limit pamięci." -#: ../../lib/template_functions.php:419 +#: ../../lib/template_functions.php:415 #, php-format msgid "Missing %s in the XML file." msgstr "Brakuje %s w pliku XML." @@ -1046,11 +1035,12 @@ msgstr "Brakuje atrybutów lub zmieniono typ atrybutu dla wpisu" msgid "Missing attributes for the entry" msgstr "Brakuje atrybutów dla tego wpisu" -#: ../../lib/functions.php:311 +#: ../../lib/functions.php:242 msgid "Missing required configuration" msgstr "Brak wymaganej konfiguracji" -#: ../../lib/functions.php:233 ../../lib/functions.php:240 +#: ../../lib/functions.php:147 ../../lib/functions.php:154 +#: ../../lib/functions.php:161 msgid "Missing required extension" msgstr "Brak wymaganego rozszerzenia" @@ -1066,7 +1056,7 @@ msgstr "Modyfikacja zakończona pomyślnie." msgid "Modify group" msgstr "Modyfikuj grupę" -#: ../../lib/EntryWriter1.php:1860 +#: ../../lib/EntryWriter1.php:1834 #, php-format msgid "Modify members for '%s'" msgstr "Modyfikuj listę członków dla '%s'" @@ -1075,7 +1065,7 @@ msgstr "Modyfikuj listę członków dla '%s'" msgid "Modifying..." msgstr "Modyfikowanie..." -#: ../../htdocs/schema.php:323 +#: ../../htdocs/schema.php:316 msgid "Name" msgstr "Nazwa" @@ -1087,9 +1077,8 @@ msgstr "Nowe atrybuty wymagane" msgid "New Value" msgstr "Nowa wartość" -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 +#: ../../htdocs/schema.php:165 ../../htdocs/schema.php:222 +#: ../../htdocs/schema.php:226 ../../htdocs/schema.php:230 msgid "No" msgstr "Nie" @@ -1101,11 +1090,7 @@ msgstr "Nie określono DN" msgid "No LDIF file specified. Please try again." msgstr "Nie określono pliku LDIF. Spróbuj ponownie." -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "Brak szablonu" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 +#: ../../htdocs/compare.php:204 ../../htdocs/compare.php:217 msgid "No Value" msgstr "Brak wartości" @@ -1121,11 +1106,11 @@ msgstr "Nie znaleziono dostępnego eksportera." msgid "No cache to purge." msgstr "Nie ma czego czyścić." -#: ../../htdocs/add_value_form.php:115 +#: ../../htdocs/add_value_form.php:107 msgid "No current value for attribute" msgstr "Brak wartości dla atrybutu" -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 +#: ../../lib/EntryWriter2.php:104 ../../lib/EntryWriter1.php:826 msgid "No internal attributes" msgstr "Brak atrybutów wewnętrznych" @@ -1133,14 +1118,13 @@ msgstr "Brak atrybutów wewnętrznych" msgid "No one is logged in to that server." msgstr "Nikt nie jest zalogowany do tego serwera." -#: ../../lib/search_form_predefined.php:42 +#: ../../lib/search_form_predefined.php:41 msgid "No queries have been defined in config.php." msgstr "Brak zdefiniowanych zapytań w config.php." -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 +#: ../../htdocs/template_engine.php:25 ../../htdocs/rdelete.php:28 +#: ../../htdocs/compare.php:32 ../../htdocs/compare.php:34 +#: ../../htdocs/delete.php:29 ../../htdocs/download_binary_attr.php:26 #, php-format msgid "No such entry: %s" msgstr "Nie ma takiego wpisu: %s" @@ -1149,7 +1133,7 @@ msgstr "Nie ma takiego wpisu: %s" msgid "No such file" msgstr "Nie znaleziono pliku" -#: ../../htdocs/schema.php:515 +#: ../../htdocs/schema.php:505 #, php-format msgid "No such schema item: \"%s\"" msgstr "Nie ma takiej pozycji w schemacie: \"%s\"" @@ -1158,21 +1142,21 @@ msgstr "Nie ma takiej pozycji w schemacie: \"%s\"" msgid "No version found. Assuming 1." msgstr "Nie znaleziono numeru wersji. Przyjmuję 1." -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 +#: ../../htdocs/rename_form.php:22 ../../htdocs/compare.php:25 +#: ../../htdocs/compare.php:29 ../../htdocs/copy.php:32 #: ../../htdocs/modify_member_form.php:23 +#: ../../htdocs/download_binary_attr.php:17 ../../htdocs/entry_chooser.php:41 msgid "" "Not enough information to login to server. Please check your configuration." msgstr "" "Brak wystarczających informacji aby zalogować się do serwera. Proszę " "sprawdzić konfigurację." -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 +#: ../../htdocs/compare.php:121 ../../lib/EntryWriter1.php:1899 msgid "Note" msgstr "Uwaga" -#: ../../htdocs/add_value_form.php:160 +#: ../../htdocs/add_value_form.php:202 msgid "" "Note: You may be required to enter new attributes that these objectClass(es) " "require" @@ -1194,11 +1178,11 @@ msgstr "" msgid "Notice, search size limit exceeded." msgstr "Uwaga, przekroczono limit rozmiaru wyszukiwania." -#: ../../htdocs/schema.php:407 +#: ../../htdocs/schema.php:400 msgid "OID" msgstr "OID" -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 +#: ../../htdocs/schema.php:41 ../../lib/EntryWriter1.php:340 msgid "ObjectClasses" msgstr "Klasy Obiektu" @@ -1209,24 +1193,24 @@ msgstr "" "Klasy obiektów oznaczone są jako tylko-do-odczytu w konfiguracji " "phpLDAPadmin." -#: ../../lib/template_functions.php:273 +#: ../../lib/template_functions.php:269 msgid "ObjectClasses in XML dont exist in LDAP server." msgstr "Klasy obiektów w XML nie istnieją na serwerze LDAP." -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 +#: ../../htdocs/schema.php:97 ../../htdocs/schema.php:334 msgid "Obsolete" -msgstr "Przestarzałe" +msgstr "Przestarzałe " #: ../../htdocs/update_confirm.php:202 msgid "Old Value" msgstr "Stara wartość" -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 +#: ../../htdocs/export_form.php:32 ../../lib/search_form_advanced.php:86 msgid "One (one level beneath base)" msgstr "One (jeden poziom poniżej bazowej)" -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 +#: ../../htdocs/schema.php:445 ../../lib/EntryWriter1.php:407 +#: ../../lib/EntryWriter1.php:417 msgid "Optional Attributes" msgstr "Opcjonalne atrybuty" @@ -1234,28 +1218,20 @@ msgstr "Opcjonalne atrybuty" msgid "Or lastly, your LDAP server doesnt provide this information." msgstr "Lub w ostateczności, Twój serwer nie dostarcza tej informacji." -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "Lub wklej tutaj w formacie LDIF" - -#: ../../lib/search_form_advanced.php:112 +#: ../../lib/search_form_advanced.php:111 msgid "Order by" msgstr "Uporządkuj po" -#: ../../htdocs/schema.php:102 +#: ../../htdocs/schema.php:100 msgid "Ordering" msgstr "Uporządkowanie" -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "Safe Mode w PHP" - #: ../../htdocs/search.php:324 ../../htdocs/search.php:362 #, php-format msgid "Page %d" msgstr "Strona %d" -#: ../../htdocs/schema.php:433 +#: ../../htdocs/schema.php:426 msgid "Parent to" msgstr "Nadrzędny dla" @@ -1263,52 +1239,57 @@ msgstr "Nadrzędny dla" msgid "Password" msgstr "Hasło" -#: ../../htdocs/password_checker.php:27 +#: ../../htdocs/password_checker.php:25 msgid "Password Checker Tool" msgstr "Narzędzie do sprawdzania haseł" -#: ../../htdocs/password_checker.php:57 +#: ../../htdocs/password_checker.php:55 msgid "Passwords do not match!" msgstr "Hasła nie zgadzają się !" -#: ../../htdocs/password_checker.php:55 +#: ../../htdocs/password_checker.php:53 msgid "Passwords match!" msgstr "Hasła zgodne !" +#: ../../htdocs/ldif_import_form.php:39 +msgid "Paste your LDIF here" +msgstr "Wklej tutaj LDIF" + #: ../../htdocs/delete_form.php:35 msgid "Permanently delete all children also?" msgstr "Czy trwale usunąć także wpisy potomne ?" -#: ../../lib/functions.php:140 +#: ../../lib/functions.php:1793 msgid "Please check and see if this bug has been reported" msgstr "Proszę sprawdzić czy ten błąd (bug) został już zgłoszony" #: ../../lib/functions.php:1855 msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" +"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config." +"php" msgstr "" "Proszę ustawić zmienną $jpeg_temp_dir w config.php na katalog z możliwością " "zapisu plików" -#: ../../lib/HTMLTree.php:84 +#: ../../lib/HTMLTree.php:80 msgid "Please specify it in config.php" msgstr "Proszę określić to w pliku config.php" -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 +#: ../../lib/search_form_advanced.php:51 ../../lib/search_form_simple.php:42 +#: ../../lib/search_form_predefined.php:22 msgid "Predefined Searches" msgstr "Predefiniowane wyszukiwania" -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 +#: ../../lib/EntryWriter2.php:78 ../../lib/EntryWriter1.php:308 msgid "Proceed >>" msgstr "Dalej >>" -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 +#: ../../htdocs/ldif_import_form.php:34 ../../htdocs/ldif_import_form.php:45 +#: ../../htdocs/export_form.php:126 msgid "Proceed >>" msgstr "Dalej >>" -#: ../../lib/functions.php:349 +#: ../../lib/functions.php:280 msgid "Purge all cached data in phpLDAPadmin, including server schemas." msgstr "" "Czyści wszystkie dane podręczne (cache) w phpLDAPadmin, łącznie ze " @@ -1318,7 +1299,7 @@ msgstr "" msgid "Purge cache" msgstr "Wyczyść cache" -#: ../../lib/functions.php:349 +#: ../../lib/functions.php:280 msgid "Purge caches" msgstr "Wyczyść cache" @@ -1327,7 +1308,7 @@ msgstr "Wyczyść cache" msgid "Purged %s bytes of cache." msgstr "Wyczyszczono %s bajtów pamięci podręcznej (cache)." -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 +#: ../../htdocs/compare.php:564 ../../lib/EntryWriter1.php:2052 msgid "Really delete attribute" msgstr "Definitywnie usuń atrybut" @@ -1347,27 +1328,27 @@ msgstr "Postęp rekursywnego usuwania" msgid "Recursively copy all children of this object as well." msgstr "Rekursywne kopiowanie wszystkich potomnych obiektów" -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 +#: ../../lib/EntryWriter1.php:711 ../../lib/EntryWriter1.php:712 msgid "Refresh" msgstr "Odśwież" -#: ../../lib/HTMLTree.php:240 +#: ../../lib/HTMLTree.php:235 msgid "Refresh all expanded containers for" msgstr "Odśwież wszystkie otwarte kontenery dla" -#: ../../lib/EntryWriter1.php:726 +#: ../../lib/EntryWriter1.php:712 msgid "Refresh this entry" msgstr "Odśwież ten wpis" -#: ../../htdocs/modify_member_form.php:149 +#: ../../htdocs/modify_member_form.php:148 msgid "Remove selected" msgstr "Usuń zaznaczone" -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 +#: ../../htdocs/rename_form.php:35 ../../lib/EntryWriter1.php:755 msgid "Rename" msgstr "Zmień nazwę" -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 +#: ../../htdocs/rename.php:71 ../../htdocs/rename_form.php:27 msgid "Rename Entry" msgstr "Zmień nazwę wpisu" @@ -1379,20 +1360,20 @@ msgstr "Modyfikacja zakończona pomyślnie!" msgid "Renaming..." msgstr "Zmiana nazwy..." -#: ../../lib/functions.php:353 +#: ../../lib/functions.php:284 msgid "Report a bug" msgstr "Zgłoś błąd" -#: ../../lib/functions.php:351 +#: ../../lib/functions.php:282 msgid "Request feature" msgstr "Zgłoś zapotrzebowanie" -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 +#: ../../htdocs/schema.php:445 ../../lib/EntryWriter1.php:397 +#: ../../lib/EntryWriter1.php:404 msgid "Required Attributes" msgstr "Wymagane atrybuty" -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 +#: ../../htdocs/compare.php:169 ../../lib/EntryWriter1.php:1935 #, php-format msgid "Required attribute for objectClass(es) %s" msgstr "Atrybut wymagany dla klas(y) obiektu %s" @@ -1401,20 +1382,20 @@ msgstr "Atrybut wymagany dla klas(y) obiektu %s" msgid "Retrieving DN" msgstr "Pobieranie DN" -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 +#: ../../lib/EntryWriter1.php:718 ../../lib/EntryWriter1.php:789 msgid "Save" msgstr "Zapisz" -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 +#: ../../htdocs/compare.php:552 ../../lib/EntryWriter2.php:117 +#: ../../lib/EntryWriter1.php:847 msgid "Save Changes" msgstr "Zapisz zmiany" -#: ../../lib/EntryWriter1.php:733 +#: ../../lib/EntryWriter1.php:719 msgid "Save a dump of this object" msgstr "Zapisz zrzut tego obiektu" -#: ../../lib/EntryWriter1.php:804 +#: ../../lib/EntryWriter1.php:790 msgid "Save a dump of this object and all of its children" msgstr "Zapisz zrzut tego obiektu i wszystkich potomnych" @@ -1422,7 +1403,7 @@ msgstr "Zapisz zrzut tego obiektu i wszystkich potomnych" msgid "Save as file" msgstr "Zapisz jako" -#: ../../htdocs/modify_member_form.php:177 +#: ../../htdocs/modify_member_form.php:176 msgid "Save changes" msgstr "Zapisz zmiany" @@ -1430,26 +1411,29 @@ msgstr "Zapisz zmiany" msgid "Schema for server" msgstr "Schemat dla serwera" -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 +#: ../../htdocs/search.php:148 ../../lib/search_form_advanced.php:115 +#: ../../lib/search_form_simple.php:74 ../../lib/search_form_predefined.php:63 msgid "Search" msgstr "Szukaj" -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 +#: ../../htdocs/export_form.php:72 ../../lib/search_form_advanced.php:97 +#: ../../lib/export_functions.php:198 msgid "Search Filter" msgstr "Filtr wyszukiwania" -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 +#: ../../htdocs/export_form.php:59 ../../lib/search_form_advanced.php:79 +#: ../../lib/export_functions.php:197 msgid "Search Scope" msgstr "Zakres przeszukiwania" -#: ../../lib/search_form_simple.php:53 +#: ../../lib/search_form_simple.php:52 msgid "Search for entries whose" msgstr "Szukaj wpisów w których" +#: ../../htdocs/search.php:392 +msgid "Search performed by phpLDAPadmin in" +msgstr "Wyszukiwanie wykonane przez phpLDAPadmin w" + #: ../../htdocs/search.php:111 msgid "Searching is not permitted" msgstr "Wyszukiwanie nie jest dozwolone" @@ -1459,37 +1443,37 @@ msgstr "Wyszukiwanie nie jest dozwolone" msgid "Security error: The file being uploaded may be malicious." msgstr "Błąd bezpieczeństwa: Załadowany plik może stanowić zagrożenie." -#: ../../lib/search_form_predefined.php:46 +#: ../../lib/search_form_predefined.php:45 msgid "Select a predefined search" msgstr "Wybierz predefiniowane wyszukiwanie" -#: ../../lib/EntryWriter1.php:1021 +#: ../../lib/EntryWriter1.php:1007 msgid "Select a template for the creation process" msgstr "Wybierz szablon dla procesu tworzenia" -#: ../../lib/EntryWriter1.php:1244 +#: ../../lib/EntryWriter1.php:1235 msgid "Select a template to edit the entry" msgstr "Wybierz szablon do edycji wpisu" -#: ../../htdocs/ldif_import_form.php:32 +#: ../../htdocs/ldif_import_form.php:25 msgid "Select an LDIF file" msgstr "Wybierz plik LDIF" -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 +#: ../../htdocs/add_value_form.php:100 ../../htdocs/rename_form.php:29 +#: ../../htdocs/compare.php:56 ../../htdocs/compare.php:59 #: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 +#: ../../htdocs/add_attr_form.php:25 ../../htdocs/compare_form.php:22 +#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:46 +#: ../../htdocs/ldif_import.php:53 ../../htdocs/ldif_import_form.php:22 #: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 +#: ../../htdocs/export_form.php:49 ../../lib/HTMLTree.php:151 +#: ../../lib/search_form_advanced.php:60 ../../lib/search_form_simple.php:50 +#: ../../lib/export_functions.php:196 ../../lib/EntryWriter1.php:247 +#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1019 msgid "Server" msgstr "Serwer" -#: ../../lib/page.php:200 +#: ../../lib/page.php:199 msgid "Server Select" msgstr "Wybierz serwer" @@ -1501,19 +1485,19 @@ msgstr "Informacja o serwerze: " msgid "Server reports the following information about itself" msgstr "Serwer zwrócił następujące informacje o sobie" -#: ../../lib/EntryWriter1.php:754 +#: ../../lib/EntryWriter1.php:740 msgid "Show" msgstr "Pokaż" -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 +#: ../../htdocs/export_form.php:75 ../../lib/search_form_advanced.php:103 msgid "Show Attributtes" msgstr "Pokaż atrybuty" -#: ../../lib/functions.php:357 +#: ../../lib/functions.php:288 msgid "Show Cache" msgstr "Wyświetl cache" -#: ../../lib/EntryWriter1.php:755 +#: ../../lib/EntryWriter1.php:741 msgid "Show internal attributes" msgstr "Pokaż wewnętrzne atrybuty" @@ -1522,8 +1506,8 @@ msgstr "Pokaż wewnętrzne atrybuty" msgid "Showing results %s through %s." msgstr "Pokazywanie rezultatów %s przez %s." -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 +#: ../../lib/search_form_advanced.php:43 ../../lib/search_form_simple.php:23 +#: ../../lib/search_form_predefined.php:29 msgid "Simple Search Form" msgstr "Wyszukiwanie proste" @@ -1534,7 +1518,7 @@ msgid "" msgstr "" "Jeśli zmieniłeś/aś hasło, musisz się zalogować ponownie z nowym hasłem." -#: ../../htdocs/schema.php:105 +#: ../../htdocs/schema.php:103 msgid "Single Valued" msgstr "Pojedynczo ceniona (Single Valued)" @@ -1542,11 +1526,10 @@ msgstr "Pojedynczo ceniona (Single Valued)" msgid "Skip" msgstr "Pomiń" -#: ../../lib/EntryWriter1.php:826 +#: ../../lib/EntryWriter1.php:812 #, php-format msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "" -"Niektóre atrybuty (%s) zostały zmodyfikowane i są wyróżnione poniżej." +msgstr "Niektóre atrybuty (%s) zostały zmodyfikowane i są wyróżnione poniżej." #: ../../htdocs/login.php:117 msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." @@ -1562,7 +1545,7 @@ msgstr "Źródłowa DN" msgid "Specify attributes and values" msgstr "Określ atrybuty i wartości" -#: ../../lib/search_form_advanced.php:97 +#: ../../lib/search_form_advanced.php:96 msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" msgstr "" "Standardowy filtr dla LDAP. Na przykład: (&(sn=Kowalski)(givenname=Jan))" @@ -1572,37 +1555,37 @@ msgstr "" msgid "Step %s of %s" msgstr "Krok %s z %s" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 +#: ../../htdocs/export_form.php:33 ../../lib/search_form_advanced.php:83 msgid "Sub (entire subtree)" msgstr "Sub (całe poddrzewo)" -#: ../../htdocs/schema.php:103 +#: ../../htdocs/schema.php:101 msgid "Substring Rule" msgstr "Reguła podciągu (Substring Rule)" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 #: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 +#: ../../htdocs/copy.php:64 ../../htdocs/mass_delete.php:69 +#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 msgid "Success" msgstr "Sukces" #: ../../htdocs/delete.php:44 msgid "Successfully deleted DN " -msgstr "Pomyślnie usunięto DN " +msgstr "Pomyślnie usunięto DN" #: ../../htdocs/login.php:164 msgid "Successfully logged into server." msgstr "Pomyślnie zalogowano do serwera." -#: ../../htdocs/compare.php:64 +#: ../../htdocs/compare.php:70 msgid "Switch Entry" msgstr "Zamień wpisy" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 +#: ../../htdocs/add_value_form.php:233 ../../htdocs/schema.php:102 msgid "Syntax" msgstr "Składnia" -#: ../../htdocs/schema.php:70 +#: ../../htdocs/schema.php:69 msgid "Syntax OID" msgstr "OID składni" @@ -1610,15 +1593,7 @@ msgstr "OID składni" msgid "Syntaxes" msgstr "Składnie" -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "Szablon" - -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "Błąd wartości szablonu" - -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 +#: ../../lib/EntryWriter1.php:1022 ../../lib/EntryWriter1.php:1246 msgid "Templates" msgstr "Szablony" @@ -1627,8 +1602,8 @@ msgstr "Szablony" msgid "The Rdn attribute (%s) does not exist." msgstr "Atrybut Rdn (%s) nie istnieje." -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 +#: ../../htdocs/delete_attr.php:34 ../../htdocs/add_value.php:37 +#: ../../htdocs/update.php:103 #, php-format msgid "" "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " @@ -1671,7 +1646,7 @@ msgstr "Kontener który określiłeś/aś (%s) nie istnieje." msgid "The container you specified (%s) does not exist. Please try again." msgstr "Kontener który określiłeś/aś (%s) nie istnieje. Spróbuj ponownie." -#: ../../htdocs/update_confirm.php:309 +#: ../../htdocs/update_confirm.php:315 msgid "The deletion of objectClass(es)" msgstr "Usuwanie klas/y obiektu/ów" @@ -1727,7 +1702,7 @@ msgid "" msgstr "" "Pełna DN nowego wpisu do utworzenia poprzez skopiowanie wpisu źródłowego" -#: ../../lib/search_form_advanced.php:80 +#: ../../lib/search_form_advanced.php:79 msgid "The scope in which to search" msgstr "Przeszukiwany zakres" @@ -1751,17 +1726,16 @@ msgstr "Wartość url atrybutu powinna zaczynać się od file:///" msgid "There are" msgstr "Tutaj są" -#: ../../lib/functions.php:1267 +#: ../../lib/functions.php:1140 msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" -"Jest więcej niż jedna dn dla uidpool, proszę zmienić parametry filtra" +msgstr "Jest więcej niż jedna dn dla uidpool, proszę zmienić parametry filtra" #: ../../htdocs/add_oclass_form.php:76 msgid "This action requires you to add" msgstr "Ta akcja wymaga, abyś dodał/a" -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 +#: ../../htdocs/compare.php:179 ../../lib/EntryWriter2.php:210 +#: ../../lib/EntryWriter1.php:1500 msgid "" "This attribute has been flagged as read only by the phpLDAPadmin " "administrator" @@ -1769,34 +1743,28 @@ msgstr "" "Ten atrybut został oznaczony przez administratora phpLDAPadmin jako tylko-do-" "odczytu" -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "Ten atrybut został wymuszony przez konfigurację jako atrybut MAY" - -#: ../../lib/EntryWriter1.php:1418 +#: ../../lib/EntryWriter1.php:1415 msgid "This attribute is required" msgstr "Ten atrybut jest wymagany" -#: ../../lib/EntryWriter1.php:1971 +#: ../../lib/EntryWriter1.php:1944 msgid "This attribute is required for the RDN." msgstr "Ten atrybut jest wymagany dla RDN" -#: ../../lib/HTMLTree.php:70 +#: ../../lib/HTMLTree.php:66 msgid "This base entry does not exist." msgstr "Ten wpis bazowy nie istnieje" #: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" +msgid "This could happen for several reasons, the most probable of which are:" msgstr "" "To mogło zdarzyć się z kilku powodów, z których najbardziej prawdopodobne to:" -#: ../../lib/search_form_advanced.php:74 +#: ../../lib/search_form_advanced.php:73 msgid "This entry does not exist." msgstr "Ten wpis nie istnieje" -#: ../../htdocs/compare.php:70 +#: ../../htdocs/compare.php:77 msgid "This entry has no attributes" msgstr "Ten wpis nie posiada atrybutów" @@ -1805,30 +1773,31 @@ msgstr "Ten wpis nie posiada atrybutów" msgid "This entry is the root of a sub-tree containing %s entries." msgstr "Ten wpis jest korzeniem poddrzewa zawierającego %s wpisów." -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 +#: ../../htdocs/compare.php:436 ../../lib/EntryWriter1.php:2282 +#, php-format msgid "This is a structural ObjectClass and cannot be removed." msgstr "To jest strukturalna klasa obiektu i nie może zostać usunięta." -#: ../../lib/search_form_advanced.php:71 +#: ../../lib/search_form_advanced.php:70 msgid "This is not a valid DN." msgstr "To nie jest prawidłowa DN." -#: ../../htdocs/schema.php:415 +#: ../../htdocs/schema.php:408 msgid "This objectClass is obsolete." msgstr "Ta klasa obiektu jest przestarzała" -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 +#: ../../htdocs/purge_cache.php:13 ../../htdocs/add_value_form.php:76 +#: ../../htdocs/add_value_form.php:78 ../../htdocs/rename.php:24 +#: ../../htdocs/export.php:18 ../../htdocs/rdelete.php:21 +#: ../../htdocs/add_attr.php:25 ../../htdocs/copy.php:20 +#: ../../htdocs/mass_delete.php:26 ../../htdocs/delete.php:21 +#: ../../htdocs/schema.php:20 ../../htdocs/search.php:120 #: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 +#: ../../htdocs/delete_attr.php:21 ../../htdocs/add_value.php:24 +#: ../../htdocs/ldif_import.php:19 ../../htdocs/create.php:25 +#: ../../htdocs/refresh.php:17 ../../htdocs/server_info.php:16 +#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 +#: ../../htdocs/update.php:80 msgid "This operation is not permitted by the configuration" msgstr "Ta operacja nie jest dozwolona przez konfigurację" @@ -1836,7 +1805,7 @@ msgstr "Ta operacja nie jest dozwolona przez konfigurację" msgid "This server has nothing to report." msgstr "Ten serwer nie chce nic powiedzieć o sobie :)." -#: ../../lib/EntryWriter1.php:1073 +#: ../../lib/EntryWriter1.php:1060 msgid "This template is not allowed in this container." msgstr "Ten szablon nie jest dostępny w tym kontenerze" @@ -1844,7 +1813,7 @@ msgstr "Ten szablon nie jest dostępny w tym kontenerze" msgid "This web connection is unencrypted" msgstr "To połączenie nie jest szyfrowane" -#: ../../htdocs/password_checker.php:41 +#: ../../htdocs/password_checker.php:39 msgid "To" msgstr "Do" @@ -1856,23 +1825,23 @@ msgstr "Aby się zalogować ponownie kliknij w następujący link:" msgid "Total Entries" msgstr "Łącznie wpisów" -#: ../../lib/EntryWriter1.php:762 +#: ../../lib/EntryWriter1.php:748 msgid "Trash" msgstr "Kosz" -#: ../../htdocs/schema.php:412 +#: ../../htdocs/schema.php:405 msgid "Type" msgstr "Typ" -#: ../../lib/EntryWriter1.php:1898 +#: ../../lib/EntryWriter1.php:1872 msgid "URL" msgstr "URL" -#: ../../lib/functions.php:1264 +#: ../../lib/functions.php:1137 msgid "Uidpool dn not found, please change filter parameter" msgstr "Uidpool dn nie znaleziona, proszę zmienić parametry filtra" -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 +#: ../../lib/functions.php:1058 ../../lib/functions.php:1122 #, php-format msgid "" "Unable to bind to %s with your with auto_uid credentials. Please " @@ -1881,7 +1850,7 @@ msgstr "" "Nie można podłączyć do %s z podaną tożsamością auto_uid. Proszę " "sprawdzić swój plik konfiguracyjny." -#: ../../lib/server_functions.php:2852 +#: ../../lib/server_functions.php:2734 #, php-format msgid "" "Unable to bind to %s with your with unique_attrs credentials. Please " @@ -1902,22 +1871,18 @@ msgstr "Nie można otworzyć pliku" msgid "Unable to read file" msgstr "Nie możńa odczytać pliku" -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 #: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 +#: ../../lib/server_functions.php:1973 ../../lib/server_functions.php:2045 +#: ../../lib/server_functions.php:2339 ../../lib/server_functions.php:2450 #, php-format msgid "Unknown auth_type: %s" msgstr "Nieznany auth_type: %s" -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "Nieznany typ uidpool." - #: ../../htdocs/search.php:214 msgid "Unrecognized criteria option: " msgstr "Nierozpoznane kryterium opcji: " -#: ../../lib/functions.php:122 +#: ../../lib/functions.php:1777 msgid "Unrecognized error number" msgstr "Nierozpoznany błąd numer" @@ -1934,7 +1899,7 @@ msgstr "Niebezpieczna nazwa pliku" msgid "Uploaded LDIF file is empty." msgstr "Wgrany plik LDIF jest pusty." -#: ../../htdocs/schema.php:108 +#: ../../htdocs/schema.php:106 msgid "Usage" msgstr "Użycie" @@ -1942,40 +1907,40 @@ msgstr "Użycie" msgid "Use the menu to the left to navigate" msgstr "Użyj menu z lewej strony do nawigacji" -#: ../../htdocs/schema.php:323 +#: ../../htdocs/schema.php:316 msgid "Used by Attributes" msgstr "Używane przez atrybuty" -#: ../../htdocs/schema.php:111 +#: ../../htdocs/schema.php:109 msgid "Used by objectClasses" msgstr "Używane przez klasy obiektu" -#: ../../htdocs/schema.php:107 +#: ../../htdocs/schema.php:105 msgid "User Modification" msgstr "Modyfikacja użytkownika" -#: ../../lib/EntryWriter1.php:797 +#: ../../lib/EntryWriter1.php:783 #, php-format msgid "View %s children" msgstr "Pokaż %s wpisy/ów potomne/ych" -#: ../../lib/EntryWriter1.php:797 +#: ../../lib/EntryWriter1.php:783 msgid "View 1 child" msgstr "Pokaż 1 wpis potomny" -#: ../../lib/HTMLTree.php:224 +#: ../../lib/HTMLTree.php:219 msgid "View schema for" msgstr "Pokaż schemat dla" -#: ../../lib/HTMLTree.php:248 +#: ../../lib/HTMLTree.php:243 msgid "View server-supplied information" msgstr "Pokaż informacje o serwerze" -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 +#: ../../htdocs/compare.php:431 ../../lib/EntryWriter1.php:2294 msgid "View the schema description for this objectClass" msgstr "Pokaż opis schematu dla tej klasy obiektu" -#: ../../lib/EntryWriter1.php:819 +#: ../../lib/EntryWriter1.php:805 msgid "Viewing entry in read-only mode." msgstr "Oglądanie wpisu w trybie tylko-do-odczytu." @@ -1989,7 +1954,7 @@ msgstr "" "samym czasie. Proszę wyłączyć zlib.output_compression lub ustawić $config-" ">custom->appearance['compress']=false" -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 +#: ../../htdocs/login_form.php:28 ../../lib/page.php:62 msgid "Warning" msgstr "Ostrzeżenie" @@ -2001,9 +1966,8 @@ msgstr "" "Podczas rekursywnego kopiowania, kopiowane są tylko wpisy pasujące do tego " "filtra" -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 +#: ../../htdocs/schema.php:165 ../../htdocs/schema.php:222 +#: ../../htdocs/schema.php:226 ../../htdocs/schema.php:230 msgid "Yes" msgstr "Tak" @@ -2019,16 +1983,16 @@ msgstr "" "Nie używasz 'https'. Przeglądarka będzie transmitować informację logowania " "czystym tekstem (clear text)." -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 +#: ../../htdocs/template_engine.php:54 ../../htdocs/update_confirm.php:19 +#: ../../htdocs/add_value_form.php:16 ../../htdocs/rename.php:21 +#: ../../htdocs/rdelete.php:18 ../../htdocs/rename_form.php:20 +#: ../../htdocs/add_oclass_form.php:27 ../../htdocs/add_attr.php:22 +#: ../../htdocs/add_oclass.php:23 ../../htdocs/delete_form.php:19 +#: ../../htdocs/add_attr_form.php:18 ../../htdocs/delete.php:18 +#: ../../htdocs/delete_attr.php:18 ../../htdocs/modify_member_form.php:21 +#: ../../htdocs/copy_form.php:18 ../../htdocs/add_value.php:21 +#: ../../htdocs/ldif_import_form.php:19 ../../htdocs/create.php:22 +#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/update.php:39 msgid "You cannot perform updates while server is in read-only mode" msgstr "" "Nie możesz wykonać modyfikacji dopóki serwer jest w trybie tylko-do-odczytu" @@ -2060,16 +2024,10 @@ msgstr "Nie wybrano żadnegych wpisów do usunięcia." msgid "You did not select any objectClasses for this object." msgstr "Nie wybrałeś/aś żadnych Klas Obiektu dla tego obiektu." -#: ../../lib/functions.php:144 +#: ../../lib/functions.php:1797 msgid "You found a non-fatal phpLDAPadmin bug!" msgstr "Znalazłeś/aś niekrytyczny błąd w phpLDAPadmin !" -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" -"Safe Mode w PHP jest włączone. PLA może nie działać prawidłowo w Safe Mode." - #: ../../htdocs/search.php:149 msgid "" "You have not logged into the selected server yet, so you cannot perform " @@ -2078,7 +2036,7 @@ msgstr "" "Nie zalogowałeś/aś się jeszcze do wybranego serwera, więc nie możesz go " "przeszukiwać." -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 +#: ../../lib/EntryReader.php:360 ../../lib/EntryReader.php:382 msgid "You have specified two different passwords" msgstr "Podano dwa różne hasła" @@ -2104,7 +2062,7 @@ msgstr "Pozostawiono puste hasło." msgid "You left the value blank for required attribute (%s)." msgstr "Brak wartości dla wymaganego atrybutu (%s)." -#: ../../htdocs/update_confirm.php:326 +#: ../../htdocs/update_confirm.php:335 msgid "You made no changes" msgstr "Nie dokonano żadnych zmian" @@ -2116,18 +2074,18 @@ msgstr "Musisz wybrać format eksportu." msgid "You must either upload a file or provide an LDIF in the text box." msgstr "Musisz załadować plik lub wprowadzić LDIF w polu tekstowym." -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 +#: ../../htdocs/rdelete.php:25 ../../htdocs/delete.php:26 msgid "You must specify a DN" msgstr "Musisz określić DN" -#: ../../htdocs/compare.php:469 +#: ../../htdocs/compare.php:528 #, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." +msgid "You need one of the following ObjectClass(es) to add this attribute %s." msgstr "" -"Musisz posiadać jedną z następujących klas obiektów, aby dodać ten atrybut %s" +"Musisz posiadać jedną z następujących klas obiektów, aby dodać ten atrybut %" +"s " -#: ../../htdocs/index.php:82 +#: ../../htdocs/index.php:85 #, php-format msgid "" "You need to configure %s. Edit the file \"%s\" to do so. An example config " @@ -2136,7 +2094,7 @@ msgstr "" "Musisz skonfigurować %s. Wyedytuj plik \"%s\" aby to zrobić. Przykład pliku " "konfiguracji znajduje się w \"%s.example\"." -#: ../../lib/functions.php:1305 +#: ../../lib/functions.php:1170 #, php-format msgid "" "You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" @@ -2147,7 +2105,7 @@ msgstr "" "\t\t\t\tw konfiguracji. Tylko \"uidpool\" i \"search\" są poprawne.\n" "\t\t\t\tProszę skorygować ten problem." -#: ../../lib/functions.php:1163 +#: ../../lib/functions.php:1037 #, php-format msgid "" "You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" @@ -2159,17 +2117,17 @@ msgstr "" "\t\t\t\t\t\tTwojego serwera %s, ale nie określono bazy\n" "\t\t\t\t\t\t\"auto_uid_number_search_base\". Zrób to zanim przejdziesz dalej." -#: ../../lib/EntryWriter1.php:763 +#: ../../lib/EntryWriter1.php:749 msgid "You will be prompted to confirm this decision" msgstr "Będziesz poproszony/a o potwierdzenie tej decyzji" -#: ../../htdocs/add_attr_form.php:152 +#: ../../htdocs/add_attr_form.php:151 msgid "" "Your PHP configuration has disabled file uploads. Please check php.ini " "before proceeding." msgstr "" -"Twoja konfiguracja PHP uniemożliwia załadowanie plików. Proszę sprawdzić " -"php.ini przed kontynuacją." +"Twoja konfiguracja PHP uniemożliwia załadowanie plików. Proszę sprawdzić php." +"ini przed kontynuacją." #: ../../lib/functions.php:1988 ../../lib/functions.php:1999 #: ../../lib/functions.php:2010 ../../lib/functions.php:2058 @@ -2179,11 +2137,11 @@ msgid "" msgstr "" "Twoja instalacja PHP nie posiada funkcji mhash(). Nie mogę tworzyć haszy SHA." -#: ../../lib/server_functions.php:264 +#: ../../lib/server_functions.php:262 msgid "Your PHP install does not support TLS." msgstr "Twoja instalacja PHP nie wspiera TLS." -#: ../../lib/server_functions.php:279 +#: ../../lib/server_functions.php:277 msgid "" "Your PHP installation does not support ldap_sasl_bind() function. This " "function is present in PHP 5.x when compiled with --with-ldap-sasl." @@ -2211,11 +2169,11 @@ msgid "" "search for that entry." msgstr "" "Próba dodania %s (%s) do
%s
jest NIEDOZWOLONA. " -"Ten atrybut/wartość należy do innego wpisu.

Jeśli chcesz, możesz poszukać tego wpisu." +"Ten atrybut/wartość należy do innego wpisu.

Jeśli chcesz, możesz poszukać tego wpisu." -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 +#: ../../htdocs/add_attr.php:51 ../../htdocs/add_oclass.php:45 +#: ../../htdocs/add_value.php:59 ../../htdocs/create.php:86 #, php-format msgid "" "Your attempt to add %s (%s) to
%s
is NOT " @@ -2223,14 +2181,14 @@ msgid "" "search for that entry." msgstr "" "Próba dodania %s (%s) do
%s
jest NIEDOZWOLONA. " -"Ten atrybut/wartość należy do innego wpisu.

Jeśli chcesz, możesz poszukać tego wpisu." +"Ten atrybut/wartość należy do innego wpisu.

Jeśli chcesz, możesz poszukać tego wpisu." #: ../../lib/session_functions.php:139 msgid "Your configuration has been automatically refreshed." msgstr "Konfiguracja została automatycznie odświeżona." -#: ../../lib/functions.php:1172 +#: ../../lib/functions.php:1046 #, php-format msgid "" "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " @@ -2252,7 +2210,7 @@ msgstr "" msgid "Your system crypt library does not support md5crypt encryption." msgstr "Twoja systemowa biblioteka crypt nie wspiera szyfrowania md5crypt." -#: ../../lib/template_functions.php:984 +#: ../../lib/template_functions.php:980 #, php-format msgid "" "Your template calls php.Function for a default value, however (%s) is NOT " @@ -2262,12 +2220,12 @@ msgstr "" "Twój szablon wywołuje funkcję php dla domyślnej wartości, jednak (%s) NIE " "jest dozwolona w zmiennych POST FORM. Dozwolone są następujące zmienne [%s]." -#: ../../lib/EntryReader.php:262 +#: ../../lib/EntryReader.php:274 #, php-format msgid "Your template has an unknown post function (%s)." msgstr "Twój szablon posiada nieznaną funkcję post (%s)." -#: ../../lib/EntryReader.php:212 +#: ../../lib/EntryReader.php:210 #, php-format msgid "Your template is missing variable (%s)" msgstr "Twój szablon nie posiada zmiennej (%s)" @@ -2280,7 +2238,7 @@ msgstr "Twoja wersja PHP niepoprawnie wykonuje zapytanie." msgid "[attribute deleted]" msgstr "[atrybut usunięty]" -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 +#: ../../lib/EntryWriter1.php:1999 ../../lib/EntryWriter1.php:2208 msgid "[no value]" msgstr "[brak wartości]" @@ -2292,8 +2250,8 @@ msgstr "dodaj atrybut" msgid "add attribute value" msgstr "dodaj wartość atrybutu" -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 +#: ../../htdocs/compare.php:526 ../../htdocs/compare.php:537 +#: ../../lib/EntryWriter1.php:1822 msgid "add value" msgstr "dodaj wartość" @@ -2301,7 +2259,7 @@ msgstr "dodaj wartość" msgid "advanced search" msgstr "wyszukiwanie zaawansowane" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 +#: ../../htdocs/compare.php:121 ../../lib/EntryWriter1.php:1899 msgid "alias" msgstr "alias" @@ -2309,27 +2267,27 @@ msgstr "alias" msgid "browse" msgstr "przeglądaj" -#: ../../lib/functions.php:353 +#: ../../lib/functions.php:284 msgid "bug" msgstr "błąd (bug)" -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 +#: ../../htdocs/ldif_import.php:54 ../../lib/functions.php:1901 msgid "bytes" msgstr "bajtów" -#: ../../lib/functions.php:132 +#: ../../lib/functions.php:1786 msgid "caller" msgstr "wywołujący" -#: ../../htdocs/schema.php:248 +#: ../../htdocs/schema.php:245 msgid "character" msgstr "znak" -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 +#: ../../htdocs/add_value_form.php:237 ../../htdocs/schema.php:245 msgid "characters" msgstr "znaki/ów" -#: ../../lib/EntryWriter1.php:2404 +#: ../../lib/EntryWriter1.php:2379 msgid "confirm" msgstr "potwierdź" @@ -2341,12 +2299,12 @@ msgstr "kopiuj wpis" msgid "create entry" msgstr "utwórz wpis" -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 +#: ../../htdocs/compare.php:287 ../../htdocs/delete_attr.php:21 +#: ../../htdocs/update.php:61 ../../lib/EntryWriter1.php:1995 msgid "delete attribute" msgstr "usuń atrybut" -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 +#: ../../htdocs/rdelete.php:21 ../../htdocs/delete.php:21 msgid "delete entry" msgstr "usuń wpis" @@ -2354,12 +2312,12 @@ msgstr "usuń wpis" msgid "delete mass entries" msgstr "masowo usuń wpisy" -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 +#: ../../htdocs/compare.php:278 ../../htdocs/compare.php:281 +#: ../../lib/EntryWriter1.php:1984 ../../lib/EntryWriter1.php:1988 msgid "download value" msgstr "pobierz (download) wartość" -#: ../../htdocs/compare.php:280 +#: ../../htdocs/compare.php:310 msgid "empty" msgstr "pusty" @@ -2371,7 +2329,7 @@ msgstr "wpisów" msgid "entry" msgstr "wpis" -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 +#: ../../htdocs/export.php:18 ../../lib/HTMLTree.php:259 msgid "export" msgstr "eksportuj" @@ -2379,28 +2337,24 @@ msgstr "eksportuj" msgid "export results" msgstr "wyeksportuj wyniki" -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 +#: ../../htdocs/compare.php:400 ../../lib/AttributeFactory.php:39 msgid "false" msgstr "fałsz" -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 +#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 +#: ../../htdocs/create.php:114 msgid "has been created." msgstr "zastał utworzony." -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "wskazówka" - -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 +#: ../../htdocs/ldif_import.php:19 ../../lib/HTMLTree.php:251 msgid "import" msgstr "import" -#: ../../lib/HTMLTree.php:248 +#: ../../lib/HTMLTree.php:243 msgid "info" msgstr "info" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 +#: ../../htdocs/compare.php:121 ../../lib/EntryWriter1.php:1899 msgid "is an alias for" msgstr "jest aliasem dla" @@ -2408,19 +2362,19 @@ msgstr "jest aliasem dla" msgid "jpegPhoto contains errors
" msgstr "jpegPhoto zawiera błędy
" -#: ../../lib/functions.php:351 +#: ../../lib/functions.php:282 msgid "light" msgstr "żarówka" -#: ../../lib/functions.php:132 +#: ../../lib/functions.php:1786 msgid "line" msgstr "linia" -#: ../../lib/HTMLTree.php:476 +#: ../../lib/HTMLTree.php:471 msgid "login" msgstr "login" -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 +#: ../../lib/HTMLTree.php:267 ../../lib/HTMLTree.php:489 msgid "logout" msgstr "wyloguj" @@ -2440,11 +2394,11 @@ msgstr "min. nieaktywności. Zostałeś/aś automatycznie wylogowany/a." msgid "modify attribute values" msgstr "modyfikacja wartości atrybutu" -#: ../../lib/EntryWriter1.php:1860 +#: ../../lib/EntryWriter1.php:1834 msgid "modify group members" msgstr "modyfikuj listę członków grupy" -#: ../../lib/HTMLTree.php:461 +#: ../../lib/HTMLTree.php:456 msgid "new" msgstr "nowy" @@ -2452,11 +2406,11 @@ msgstr "nowy" msgid "new attributes" msgstr "nowe atrybuty" -#: ../../htdocs/schema.php:158 +#: ../../htdocs/schema.php:155 msgid "no description" msgstr "brak opisu" -#: ../../lib/functions.php:1793 +#: ../../lib/functions.php:1673 msgid "no description available" msgstr "brak opisu" @@ -2464,33 +2418,33 @@ msgstr "brak opisu" msgid "no entries" msgstr "brak wpisów" -#: ../../htdocs/add_attr_form.php:109 +#: ../../htdocs/add_attr_form.php:108 msgid "no new attributes available for this entry" msgstr "brak nowych atrybutów dostępnych dla tego wpisu" -#: ../../htdocs/add_attr_form.php:161 +#: ../../htdocs/add_attr_form.php:160 msgid "no new binary attributes available for this entry" msgstr "brak nowych atrybutów binarnych dla tego wpisu" +#: ../../htdocs/schema.php:172 ../../htdocs/schema.php:254 +#: ../../htdocs/schema.php:269 ../../htdocs/schema.php:343 +#: ../../htdocs/schema.php:412 ../../htdocs/schema.php:432 +#: ../../htdocs/schema.php:469 ../../htdocs/schema.php:492 #: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 +#: ../../lib/functions.php:2788 msgid "none" msgstr "brak" -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 +#: ../../htdocs/compare.php:401 ../../lib/EntryWriter1.php:2556 msgid "none, remove value" msgstr "brak, usuń wartość" -#: ../../htdocs/schema.php:244 +#: ../../htdocs/schema.php:241 msgid "not applicable" msgstr "nie dotyczy" -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 +#: ../../htdocs/schema.php:186 ../../htdocs/schema.php:198 +#: ../../htdocs/schema.php:203 ../../htdocs/schema.php:234 msgid "not specified" msgstr "nie określone" @@ -2502,8 +2456,8 @@ msgid "" "want to do this?" msgstr "" "phpLDAPadmin może rekursywnie usunąć ten wpis i wszystkie jego %s wpisy/ów " -"potomne/ych. Sprawdź poniższą listę wpisów przeznaczonych do usunięcia.
Czy na pewno chcesz to zrobić ?" +"potomne/ych. Sprawdź poniższą listę wpisów przeznaczonych do usunięcia.
Czy na pewno chcesz to zrobić ?" #: ../../htdocs/schema.php:33 msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." @@ -2521,12 +2475,12 @@ msgstr "predefiniowane wyszukiwania" msgid "purge" msgstr "wyczyść" -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 +#: ../../htdocs/compare.php:179 ../../lib/EntryWriter2.php:211 +#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1501 msgid "read only" msgstr "tylko do odczytu" -#: ../../lib/HTMLTree.php:240 +#: ../../lib/HTMLTree.php:235 msgid "refresh" msgstr "odśwież" @@ -2534,7 +2488,7 @@ msgstr "odśwież" msgid "refresh server" msgstr "odśwież serwer" -#: ../../lib/EntryWriter1.php:1829 +#: ../../lib/EntryWriter1.php:1803 msgid "rename" msgstr "zmień nazwę" @@ -2542,23 +2496,23 @@ msgstr "zmień nazwę" msgid "rename entry" msgstr "zmień nazwę wpisu" -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 +#: ../../htdocs/compare.php:169 ../../lib/EntryWriter1.php:1935 msgid "required" msgstr "wymagane" -#: ../../lib/HTMLTree.php:224 +#: ../../lib/HTMLTree.php:219 msgid "schema" msgstr "schemat" -#: ../../lib/HTMLTree.php:232 +#: ../../lib/HTMLTree.php:227 msgid "search" msgstr "szukaj" -#: ../../htdocs/search.php:266 +#: ../../htdocs/search.php:266 ../../htdocs/search.php:392 msgid "seconds" msgstr "sekund(y)" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 +#: ../../lib/EntryWriter2.php:23 ../../lib/EntryWriter1.php:368 msgid "select the rdn attribute" msgstr "wybierz atrybut rdn" @@ -2566,12 +2520,12 @@ msgstr "wybierz atrybut rdn" msgid "simple search" msgstr "wyszukiwanie proste" -#: ../../lib/EntryWriter1.php:961 +#: ../../lib/EntryWriter1.php:947 #, php-format msgid "step %s of %s" msgstr "krok %s z %s" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 +#: ../../htdocs/compare.php:436 ../../lib/EntryWriter1.php:2283 msgid "structural" msgstr "strukturalna" @@ -2591,11 +2545,11 @@ msgstr "ten" msgid "to a new object" msgstr "do nowego obiektu" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 +#: ../../htdocs/compare.php:399 ../../lib/AttributeFactory.php:38 msgid "true" msgstr "prawda" -#: ../../lib/functions.php:1277 +#: ../../lib/functions.php:1149 msgid "" "uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " "config file" @@ -2611,11 +2565,11 @@ msgstr "" "tablica modyfikacji (update_array) jest zniekształcona. To może być błąd " "(bug) w phpLDAPadmin. Proszę to zgłosić." -#: ../../htdocs/add_value_form.php:93 +#: ../../htdocs/add_value_form.php:98 msgid "value to" msgstr "wartość do" -#: ../../htdocs/add_value_form.php:112 +#: ../../htdocs/add_value_form.php:104 msgid "values for attribute" msgstr "wartości dla atrybutu" @@ -2631,32 +2585,20 @@ msgstr "pokaż schemat" msgid "view server informations" msgstr "pokaż informacje o serwerze" -#: ../../htdocs/update_confirm.php:312 +#: ../../htdocs/update_confirm.php:320 msgid "will delete the attribute(s)" msgstr "usunie atrybut/y" #: ../../htdocs/compare_form.php:29 msgid "with " -msgstr "z " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "Wyszukiwanie wykonane przez phpLDAPadmin w" - -#~ msgid "Could not bind to the LDAP server." -#~ msgstr "Nie można podłączyć się do serwera LDAP." - -#~ msgid "" -#~ "Your config.php specifies an invalid value for $default_search_display: %s. " -#~ "Please fix it" -#~ msgstr "" -#~ "W Twojej konfiguracji (config.php) określona jest nieprawidłowa wartość dla " -#~ "$default_search_display: %s. Proszę to poprawić" - -#~ msgid "Paste your LDIF here" -#~ msgstr "Wklej tutaj LDIF" - -#~ msgid "Backtrace" -#~ msgstr "Śledzenie wstecz" +msgstr "z" #~ msgid "Login Name" #~ msgstr "Nazwa użytkownika" + +#~ msgid "" +#~ "Your config.php specifies an invalid value for $default_search_display: %" +#~ "s. Please fix it" +#~ msgstr "" +#~ "W Twojej konfiguracji (config.php) określona jest nieprawidłowa wartość " +#~ "dla $default_search_display: %s. Proszę to poprawić" diff --git a/locale/pt_BR/LC_MESSAGES/messages.mo b/locale/pt_BR/LC_MESSAGES/messages.mo index 019bf6f506bcbcc697be980c86831b204763015e..b2e844076f867c555fd2b34ae8c58373086b2d98 100644 GIT binary patch literal 36811 zcmchg349$_eeWlG;_M4qfsCCvmVzZOWL3OGk?h!DTZ&~n2_Z3~dq>i>@1oqfSGGba zgwV8778UJQEbLO1?`S0f(<*R2M`}&CA!K0$+nc$aCj-nrO{^s*^m-`n-(TU(Jcp3O| z@B;8*@aSWrXb!xd>rXCo@1Jl<6mdJc6g(B|0iO+C1@?lw!4trjf@g!j44w)84tPHJ zD0mY1N$?!-uRxXm2DlXb4tNcC`lV5H8n^}2_06E(yAM1Cd=sd4z7sqa{3y5t{3NJ$ zeGYsM_;;Y%aq@Eaor^)ezXIgH=nDQh9()0)`V&y?-4D{`=q2EF;QinL_+?PvIS*p# zy=7oO*bDAGI*M)qRnLcdqUbpAW1vX=DUhy3UjqlhV|yLlH-pdMdIVevrXZh)ego9^ zKLk=`^b{!i9DTW?o<;K|@;Jw64-Tz}JFp9s;#&*y;Liq?RqfqTKTz`Dn~ zLDBJbpxXaIQ0@6kQ15*K)c1~pcxrzSsByange1`hP;}V`o(jGaJQ4gYQ049iuLs`& zsvqA3)vo^pMb`^gdp=p?-tPrZfFA;5@Ci`u`WC2u{umqs zPq@O3%Wa_gR|7YJ_khm_p8zxP8CNWe?BOF z=mo_eSAnAI^`Pj!8C1JcP~+7CMgO;Y{C)5lTt5b?o<9dg&nH2B@87`@@aU^uKX!tu zuk0}c_5RDjbHO))qT{EO@67(5+irSGryxE)lz z`#{m*Zcu#ncJNH_bD-Mu_u#X@?}4K08P`S;syBKexC{IR@E-7U;77sTC?nN(9?Iz$ z@H$Za-3W?4+d;K+52*IM2o&940!r>*3##0^K$UyHzy4EjIoF>8_5JUHdhfJ#ZoHO( z`rdQF^T4Y?wSUB4-vM60^$f^RNB8;Xp9H1n{~A=gzXF~G9<|=-uX8~0`D##fzZyIl z9QN0vpy+%%sP@$S{kuW+=QSWK9z6_-u3rXK-*-XL<@=!OJ!XR&-!nk9qZicu?I5I$ zUI41T*MX?Y=-uEs;NOC(@1H@{{{v9{J8`3<;|5UjbR&2^cnkP!@J>+uybrtyd=Rwu zfHWyO=6WZegP`bsFR1Un3)FX?1V!I(gQDM0z+Ui}LD!x>PMV1FGN82ag4B1t-8eK*`@HK+)?d@FMU(K+)}7Dp$R|;Bnw) z@KSIasONWrdjA!m#^p_*`1xI+zViW4q4dDp35Lf=j_!Q2qNI@U`H3!T$jcZA0gP%NgYV5Hc8jU`!)!1$Tf{9X$kI z2L2nUc3e0LkAO{&e+Y{2zX$5OE9t!GcRhGK_&iW_xXIt&4KCq&FL)xj4^+7fJOjK7 zJPmvmsPTFesQT^)Rqhdg|Gl8b=Yt;q*gyZMzy1^`KKnGNdcNcF-$2##V{kbb?R4$C z4Agfo_joO+c5VSL2gkrQ;4gyu?t8$q!1sfC?^B@o^GQ(ke*=67{5FV4M6X9!)Q>NM zCxBlERqk6J|JCD<{PUlIC-eLSl(+C~P;zlGcsh6+sCMiJ8Me?;nBs?i_eE_+{`s@SGRAcCQ3Qrz^nK;1H;KTj1H?OF;GO zwO|kUHgFU8X>b@k`*v6U7Es?yK(%*2cq#OHo4^0WUiZB(fU55)Q1tySD1JEiMehAu z!DU>Rz$?LfJ^nE$dHfzIzKavr-kqSz-vg??cX<2^crDjI051ktkGpcC;1yhFpz41J zyafCzcqw>v37-jE0jj<`z-8dQAR-?<42pk#45}Z;mmNJX05uM4K+$0xD7tP2j|O*x z7lOBd;+G6m`4@vKcQ2@VUk_dcz7-Vx{{(z4_<8^Q_|%m<8&vyZQ1Y+^d?vUH)HvP= zO8(vos-E}w>yLx#&*wq4=lh`AamIv`>x(>Y2F0g$g2#iu4EBSs0rmbzz;nT`f$HxM z!DGRrCY`-I9@P6IpxTv!9|d0yiob@Z-1F_AV(eTR@HTBcR@YHz@x3w7>sFP~-L$a4Gmb zP;@$H+Udh_&V^SCb}1V z52)|lojLpUcJNHD9|lFA$3eCKR1DAst zsP_FfD0;pdJO=z27=xb#&j7y(s@@;@`{%Zu{=FJhyBgq0;N9Q~@KxY5!1sZo!xNy| z@ip*t@E^fb!5@RF|AZOGSLcJ$=U0I0&o*!s_##mJcpvx-@JUd7^c_(3{ky+^EX;o{ z*B64~uQlLl;2uzXoq`(2_kwG{FM#5U;|{v^#i01R7aRaLf#QdkfokWgK=IF;LDl~O zP<;LrxDEUfsB)WTom}n#C6{jkd%>@PE5RjqIlj3X6x~Nb>4Oq@6}aDDzZF#b9|1+b zKLSmDz%j0$0C#}Tda>ibDyVk79=sj=Fev^y{}=Efz?Xv01OElQ0KD!cZX9=mmvQ}S zP<;0ocoX3`7agBXgB!TM4;24=7Swy+2i5OqzSPN6AIOkIYrzY_hr#o~kAu$! zzvA!z6x8?5dzs_A>p)#^1U3F8Q1m?jo(H}T)OX$micdcRijO`Do(z5#6hAx#UJm{f zD0-iJxAQ-Sz+1U)fO`K4Q15>l6n&loZv(fzJc@n^dr`#JwzXtY#kAfcn{~9d+vcrL2 zao;`TmFQOP4}vcQ-wpPFr~E3q4ZIT6cYfF7Q{XjRpZ_YS$8G}E-wE(Uumv6izQkYO z4KCsOS3&XP>%rr|w}7JSgP`R7eg6I@z>~TD3xEBj$FG3La{uo={sXA*eaBz_0DKnL zKLMA57tnbb)UQ z?H&X5JOv*FtKcYj#%o-;1U!lBJ3+PQ#h~c$3Q+I;n!o>>pz3`yD0;mM+zx&a6yF~A z>+b#qpycRMP~~U*{d+;_vDbp??>j-GD=2z@0z3*#IDUg;nJ)N=N55)kjxWCG&sTuG z997EwJ@`L4ZsE{xtAF<^oPUF3C&zDd+{bY<2PCtY@fu%_ON&K>`kl`G-viZu@$zO4 z>8zh|{0+x-JYNI;7ROqS+qpiM1JxeAj6=Txu49g?IQ07kjypNO0aU+H!}+h`&z|ec zN>Ayx%U}PkyNo^vZsB-8hh%gm&rb)pa;)I|N?(30ILSTzR&t~q;`xmn(oMr0;dhjO zXUO09GWZ6LZ*x40XYcU$Q47(VIsS^{0~}9q=yx+^{>7a}KL!87p9c`nUq+b>Ecu&{ zhKFDe&-%cnp!oSbP(SgYeuzu-R*wA~H}R~(aS7*tz#)eDl+gcv0{$+?YVQAWxLLq; zoHsdc<+*-e;<$qIXK;*iY~y-4h-!~g@Q0v&M|1vqcN)D2j5!|R_$Y^dgB+jZ_?9mC z{h9qseZ2Qx&hG%XbG+E!KZEmW4*ibiXmFlzjB_s8zku`SbNnIan>cRgxSm75Uhcon zo!Y;D!oO#6Pdff#j=h|}2OJ0g0bB>p|6RnrH*)i~c@KL0^&rpBocG@4JUfwNImh#S zxx2wrDL2LON1Q*vG3%e5>hUAst2r7R&!n7wh`Rkw;953w%wG%oxi{j=NzX}Fyh0EB zZxhcx#(C41`6bS`b9|a(f+PG+;rTHf6C6)*^Ca*s;QM@mDeyP_`Q<#*d|)5P^Eh^M z{~C_dIM;6y%s8IOd6nav9N**6?@ErVIIiaTcfsH1_*D+v6!S|y3H~>Z8qYUyJe%X| zTtA;9{7&KIM;yoV>^c7C0nX?A`G0_WIPT=Qp8J0e);a!?<6@2va}01?$g_8W`t9fZ z9I$Lx#DCyJ{(OvQ`u&*WPdRSX1;5X5yp3Zg&;J+r-#Ka=H~8`=dwe1H^gEX84em7B z$oXE*|C!?j9FK9V;@)u_Z{l3P|IP6r$A~WYeVn7t^L;AE`TZQ>cLyi$-B^)j8uLk=$Hgm4uxemRXI6uQ*|C`6pf~z>L<@tYtZSZU0IbaLC1=R1Q4x%+&|C2u#yvCn@-(yMT zmuK<#Y%9%l(wK<(H?6mtl{AYdl1eo#$E`*@p2p?0nzqt%f7Fv6Ols5BbRaI(*KeQQ zkscULn^~jY8?7txX4>4au9b{e)3{VkvTXf|dZSe-r7O6rC*`=*sAkhief^5H+zW41 zYLju+EUjNrsU?$Xw(3CAtXJxj{nPcy74cMBnVf2^U$JKGiugdK+?wL_xhvvT8{*<` z-S~!E8|`?a(XN-{B(68=eG^G5sm9Y&)7ypzN0V}`Qjf>mlS|jF8sD&PRjaIj)Fx}! zhE2_8qdDO2>)H5*<(W#xJ^5+x!nZaSkXWn4b2=VpX>%rBtjC?^oOIYhOX612 zoJ<*+dU}9iYNiwGS1iv~Y#6PkNd^NH*%Yfr{g37Dq!xS38j zny?jP+)UT4N;dSbTNQXBZ}fk$6(=c znij1x9*2WMYsZ@~WHcC8D_Ki&l(Z0{@iu}b0V-Fr=_((D16xxm-_6?9Ru=b^8ns%| zm!;E5Gl2}fR4|iNE9JOcrzW@tf;H1S+m)t7Z?Ig}5hHW)o}}7N?P_FvUs`GnN!pCq zgZY>3aZ-MTe-o98vW+fTLfN`PH{9gV_erLQ=Pnxrxy7WL|+po6H zB=r&_JC-KR(p0>;(X2&-)e4M}fz@2gc*PQD?NTYtvWa%JI?L;{I`kv%S)TRA2jH1n zqgw*ZBD7|7LsHsr|HQkeMSvR;@x4SWu9WSn z&1F5QrE#MfPcvEv8qIQl?1iNzI!-1P)`Q$2;prLIzpz20UY+fA_l9>wbV?MrVT^8Q zSE{0SoYj-*Y^q_5*J>hcw5-&ao~0deG^BB;Mnh9ceKOtFnB=U{pl-xBMUkslLt=X4 zc)dB<(7)o-YGV?PozT#^BHW*DOt+_bxm-zj>}XJh0T~k;)7iLZct>wM*-WOVpc$jt zd3UA)=c?ii-B6>BbfN-f8}^ODfVXC+Q^%J>4OC^RRhglY$V#OJ)F&#<8uAOjJLZ{Z zx2Uc&EEK0Htv3CXLR}gcjf8X&9V}Xi{&gnF?%$J4jdt5J-dV9BJUG1RC@4~2kt@F~ zok^=5)t+01LzV9snJ&9>sN&mD9EY#{Bn*^m%8;3&!<-FrVYG1_d@B+lT!@hm7;wxeX~^T*g|U4CTG*LNSppez-x^e z#83uL?i4bh`yCy(G`_jfu9i(VRV({VVqF<~$7vx6SAze9aYPi+KXC9$`8G(=@Q#)G zOnB@V-fECS;6%0au9Sc5svDShSAy92kgnt>dD-bN6h_TU<$A@6!lYg9g9}P|#c_y= zN{xD5s)AC>mS@Y*ZK#uG%PtDvD-=6KMM3UOSr_}|AE+}%_W`Nq4l&C3uuc5HG&c2$ zLS5{c-flLWI>l9JI=V=)7W<3#YqVR%J7%63{ROSU*hq=S)p9bumr{FeP`GPDTC8Gz z$;t%vEmp9ZI#aUXTmC^#fkF?PsT_Ow(x_Ugt4-E|c%s>;ImK)it3Tc)&XtQK*WY^# z@w&u0dCR6+t?7YPs}PB-ALZF!Pg}as`Nm3l{n~4^j3jPS=!>Ojs2Cb;m&Y&Tk)=KW4Xz8{%warywRb-6P3w!KDNyi z6YCwSXvke9ILFxTpc}$X3AV8!Bvru2HmWf zh9G>Bb9qJXzU02yn8Xd{Q@OR4N}xbiYF4JD>Wb&;4B?NQZ1->X!=5@mcIVAFnIU#n z6x!P<-NJP;Uqhryv;1<*SUwuYai@{(N;XB8cHpN)!wu8V!DXx^($iC^g*I}gvW*m} zuV}?tt1+#Pq>3S-8m=~8)uwuhU=)R84y$_@A7I>5d7lzK5hyeNxS!ILG>&yXI(!u$ zFfAVJ14?5+#awW%ICmhn>sj}&NMzAgd%VxQz_N?k3uZ^IwQ87E*~2|{K4LT4bZ47* zq{SE1HTSQ@uWGtnu)VGpQv>n#N|w!gAm$hy8QX=++RXU4s)_6E+Bl)78X@0)!QHNb zc7eJ1ZBq%#OMa%+67-4_xOf7>N^xP-#D^{7Q3`t&HJWB-^`GV+#wAX0`S+R=$~UA$ zE_JeF; z=G%1uKi)~U2Xo4kR=CRA;~Md3v!!f2nEQbBR|oQ7s=x41AwoR711@s!=><2OUJD_- z@;&treee*NHx>KcnBw}t?8INQU4C@j6MHLxQIOrU{7Zj^IW48ocrrDs5%)@N_|AxN+J*wPC#LlVHhQ20K%*NnM*tH)J6;~ z;Z^=jrQst2U+J#A>k61d=(#c`L~4ndko@#u3noiZ+Ztp`6vP=E+25&Ret=`l)K#B* zt!qePS@KZHtx8R_$sv?nlt#9#q!_h<&yuy8?NSTNQuPYj1^qpQeh2CjwDE=-H;(Js z8;dH^E$#M=|)-Mt##K)#3~zz zx8f``%TkLt!j6+szRoyV-+NLr1J;S)X#3=jDCj(fS?Wak$*Jrd-r)o1a3{@;C4Nw} zl~j$~o}`c&!QXXyK4{2~aK2f(W^v*}zBa_;Dc%4&jq)yYM2gL=^ z^V&5V?*#SU!b?HWnr((Hzh7YISUR%!q%bu3?Lt7~_|>9*OGrhIFi8bfg4`RA%yVGu z-YC>eV`qXC-Nrkd0g3D)t(SRMK`;Nh>|5YI2;0eB^SCiN3ArIw0(XT=y!b8?>AYd@ z&E>(lO7kMlgPq8k;Y9D^&srbd8{EZpgld&KpV*#MW$5{6!C0b;nhBP8yHXg#GSZZH zSEhbtV7&Ur%g2l9q>0?M5}UNeaga(T)a`?eO#bYxVZdc8cGEdZ6;9Dv)bwQ=pxf`7RHG2N*jc zM~T?ffIVEyw(yR0EOf8tTwMvG`3)ZoOoDr67~;Yd&|KD?wZJ}70S z?#aF>4=WeKCE46_vpg>13n^!P#oQN5Ipp;2XtqVPv42+`;G?SaK!tQK^91_xGMw;f zxO5upLsS%0%(CFpIiqF7twRAqF(n)8@ur)04{qDK>sHf6av98)74@omGG%X_AsFb8APu^Efd{en%8FVSsvh1N~)an?^W+mJ21L8aq#|5sdeJB^)aQKD- ziVk2bWnSwU9*heB9j()BCE6V?1>4Q3KIhUpe62p|>8WtLl#nHs7$fyH{AH-f?Ac0h zi%l#E`N)I9){=Bh3rMs_EDvD%HO;un8k(+)M(_umjE%tCJ!0^xl8-dJPFOl+X^`G% z#NsVXPeDBMdp_k{d?cGpyCd{66opGTbNTFObYWf{g1c~+!jL0tY>a$<&0FXN>MR;1 zW>Rh#v2ybVbZXS;w)nEi)^$1}?0K{kgUN7uuQlgT?w8tR8weNVP1lb&fZ~7;sa^5+Rs~MrfLWgoc`OHP7vcxaobSQh}03oPsd;rmpL>^ z%*z=6$$qKT@=@u-BC+XC%l}Zs(mq4yMRq}cUcNwgUk~%h*jioW4f!yZ;$Y09F_-O^gnAq41~m$ELoU4VS7VSn4UhDW zh#{4GV2Wvr@W4mV^kIJBQQ?CYQ+rB`i4_Q8or)Q-2+?fZcuI*lH*7xJRYN(JDkz11 zs&Nw=@Jr5)nN{6+6y{J&o66TKDVZY+4l8LwD=%8`fd{y$nIR9R;Z*@v!974(X!xWU zQXVJ1s13IVG3ICQ}Clts>RkQkbV=;TD2dXp7MK0IJP=*+somfdDVx&50-$P4V=J2#UeHJClYGQ9R5==JFgKQq zuuBafSGYBnSPk=j2{#s*_#0~>R!OrQoNb$RWSj|f`pJszvxYkjFP%S#p}L7g=rN3sc6om_#TJEhIazV#Ae`Qr*UIpg8ro{$ z)M+Kfyv#D=(O;=oR(ch+x0W2-E5BS`kwpyFZ|2M8I-8bG%};Zbf^YCnOdF};OktZH zlgL9CqFE(koOfyj%%pbFFv?Kkwi??>hTKCpk)4y!@o3hbHY20@%oRiBwHhq&ah>&_ zkh4=9cN!}ZwnkXuW0!ecF0bajN1GB*8;JU8fO%vX0j;O7xdC&$=kc-|7_5P6?&4+R zXjlc0j2xy_M`jk+h{=a(=;90$`WO!g&SEhWKALK&H87fVYTOnyL1IT6nm^#GairFA zmUDm_fP{&Rbf6Uks5I6SuX$@5tOe=W939TUMU39Vv&Y-==@V>MU4`8p%$Y< zD`zt(($KP}O|HIZmqPU27DkGoHkSwHacx04o0=x~+1N{xL9A1zQTWT*JjOIl-lZUX zRJgmoAJvbO7xJeTLhi2P5;Z34u&!$Lsi%hdoS3Yx$1bxQ^20pKk_j)|Qq(FQ0?|C9 zWWp{f?~it8EFa@v$6mFx-d3MQ|7tp6^Nw{i{iL$<6f)nT;May*1>&Pox!a73@vgh0 z=0tl~&|v>)1ap5!cd;UN?Vg5-CfLs&x&iEy05Nl=j08MbGred9#1o!<+}w&&)NXF& zX16#_o(!yUfTdiFh2~X#-k@Di>!s%GGzzOfx>m~Kd5lcHgRV={2G_60QAKtBUV#2Z!HytDp@V>WvRh@CQAdJ_GcuLP9{Ju^iNdJ6E|Mw zbF=OBE4?+Kr>~_Y2=OF3Qt4ou#e+vZiz3Rjq&VRqK`Exi z{ab~EItg;m({(ZsQn0}mblY9rZcQUd`@^3x(u^9O>Taf zIg`sAPjP{6qzM(WxKID{nUNq43%R}1LlJh_A$!Dkvp8=t;c5>JbRsor37Gw8$8x%n}*RNJ|u&w#cTtPqKO} zMYbsgCtfZNneX8F$m0-0;A*ZgQ>SE49ut`A7aP?0%v4WrJkhS3PtqR`xojztKDK30 zZYzr@Os^cGst{OcwTua&QKUs&*dm;oTR(3+_H%U=FbD#7^?Wo-(i zKf0}>*PWd&-yUgt)bw2B{H;iNKa6aX>EpE7Im;rbr@SL4I88Xh3v#DrTzF0P`1&k> zjx@<;p+ZD1k&qyo;GZj?4wr zza+Av8d)U2mLy*y(w5_$bZ1uk$m#aULV{Rb^XD%7;oa@NF5IOk- z;1s5D$r*^zwB(6D2|<#@Go7DGr~QTC47%CY2-KG>11_C&CKM1D{TMTRMB3@r%zE;( ziXx3%EV0-4N_3c84qpk=-XQE+vCqN7uAZT7>5Y}^(LBwhpG_|PVYe+e9r1Mt5;L7Z)ZAVmTZx7*9@#(>&k84x_wiJGHd!*FBwAJK*K&IJ(&0-kX*$M zhf4iAxx1_(XszG9YjfW$b~I*^Q3ke={QuuXhi|v1QJQ-M-jlLs1|Vil0M;X}(^$WU4pmxIT8G&} zx5%b|!|$LQY$C%mjm6%piZ-20m0~x|&5-CP4Ve3+ovi?2Q-g$sws)%hIXBNOtZ|H7 zL#0drK|-Tb?V+21-CJar*As zUSxV5;mKcR>ZqB-%Cx#tZux@$l$9%fFDWKi@(0LTBmYc(*S?WgiytueK(o^Dk0HNS zvq&4XtM)*R9&cx*Bpzg&+uS>oauN+rr;wsS^0y(Pbe8V(+NZ*7i1^AiO`c`Vw!oz%N?WP+yg9OJmm7Cryk_AP`kGZYIlzD3)2L#g z*_l?_-?klZTZhg322sHkH|A)NFKs)jDSS&M)A=)OY0mrlrcx6#}P{I;+#?gmu zY-D3Z2Q^uk%)N8&{b?3$VnU><2_!gBImIe8uT~^Hl0?UeC`{~g(qso`oOGxY3L3X2 zh=nRi;(ZXi%23b@rjsy&=$MUinV;Jq5qqopWXRuZs+Yw&~{~^dS~(ARB}WOID-9hp#fp1++{dC)%3a} z>!5-_nXjMwrKjB|7n*hCrYsm0+jY?q(_o^QOTtO$*eBCV^ESj)U~%{jiR)55?iPGn z(1n4gCNW5f)+Qs6i@fShKpRJed@uV;nI82f!nVYl(A?jwaT@_LZ(GH1?^y_pZ z%Z!oGLuRGC3=SN&ND$PbP{?Oyk=DYBgJvkI1yprIn%Zl(BYo@Xzk&2>p|8A5#o&qC zPj|TbMfVPkZ1Q%|ZkUEZeK{SqD1GuGp%4!6ViXBm@8ATl%1I(G(#EcG&7^XdRCw0z zsPRM6Luml7kQePtV(R^AI>Y1`?C18}IYp~@Ds0+Yv|d7*YUM8Lm(3V;zs3%}L%daI zy^B6&&d;K>B~cXdB;)43nmwdine&M*Sxz=1A-Z0-fWTaAhV)IBC2jj zoYwbu#0Phrr*2nVZpblK?9?+;$!mT$TyC|3WO}X}vie7i2<&dNkJ*J1l>C)UcPq%a zH4( zipC6UWw?BQ`6}cBY+)jXzYt4y`DD@oyrf*15xaP<4ihph*gt0l2jU)=LUUtOH}`_S zSkb7PmJD0yc1R`55v|l4QEo;G_jYIjms_hy>chDRHvYIBa9K-UT*1ZK=-5r;(ZpA^ zC`X$;v<3jRt@R7zHa=X3=+u1Tx(X}%l-z}#K=Z>HavBN8Vw&N%I9+Y;mg)X@gjt0KpPu`0y;35=G0MaC3NXa+ z+;T2zSQa8nm8Fi`I$P_+c46xrbYG!-9BT-It7)kTw~0=w#kiEPGyjOB$IKra)p(P1 zl>4fi&BX5wkGn?H8m6Tr?14kwv<+aYMqrgfxT(E!By{x9qKGE*pzut7(}q5`mJ(s_ zgxbzIhIcc|5us>e>ESX1!~Qu1-*lqd?Kz9;yuX!bS$`~qsF$me5`Q%YSqTxNRz9Hn z3EbJeT0*IrrzP!yRw3YFW1Q`aV<>{s)u~rHnx0V*!ZSxqdap3Uw#K=!VXVDz@E;ge zOW4adNh{!w&=6L%bB{q0VQA9ahiQX^g!x>h=PeVbU>0vtW0xgWIJUo7slMEaXn3Vi zeRvI;$R4WZ@a0g4V-lq`Xt596jHoDB*iYftBIyQ&i?*K*brvtw5>SS{0n^R7_px1p zT2QR5xrgm^?tV+PC;jmd!M3w@iULJ3OcCUfd!_Yrwmrv25GB)^d!Vn{AYVO}C`=98 z=QO5Xyo?py9y(QGibY#>jUL4^ThbTGbOwT zAxt|5owU+Z!V}Z2<4`KVh1*&Tk%#Y#N}A)HPMNK2k5+<+5mm%Mn~S-`jm%+a@`BBE zxdYL)zs|=SZg(AhN?EojCYtBJnrEMDCVfP_YFa}3>Im~SoPJ|nS2aw=+KxI^>X;z) zbBe4IG*yN7nb+)k*R!tGvOf?8^t!LuYE-foL13FHe|W}*j(0O0letF_xFmlLIV?

)dgjv5jyKrmgWqS*u$Kc)3*0~Oi{Y7*g859%RQ3H zA7tMx_Eeh0YcQNORHVhp@eXfRP-k`PpJfBxL$?Lbg15lCmUh9O*kltNtDSd4&QGU) zY_;^D+?L|KkRcPdeL|%t3+3L)Ao+wV3}%UwnMM&V{1Nc zSYg_c?LY{!l5E})QxZ8(jRb$LaLcRBWW2%_dF7M}$*d`NH|^7(qRXY5KC&^~RDzP& zfjjW1+6WjMdF0*g6ywkX@mzs#4sm;zoQ0`IynXHgw(~Wja9wlPs>kaV8{aUV2s8}p zY)_NL9P~L)f6>Kp224pxo+L~C6DcgnEH96LW>AQOdCqC1ll;XRIZa`{xgrYua4#Z3 zuK4bvHzjTAwd|bs_(|D!#A9J4w1#{llH`rNcdmSgi_TqMGRRu6ojhRPr#<&Dl^~-J z==)0Q!Fcs9CdzBb&4AkGvcSqJIH}ZYW(EB?2j7srOj@ljcfV^Ky6*elB(^com@hb| z@YbN)9mogR9=O#l7fk` z3Dyp0;hBzSlA@II=ObiK%t2)omK|zaAqv!~bTb5b4_!jmG_(eB>y7L#93C9rq_LBg z2#Ui+(xGu3P7K6hM9s9>)lml!^x4`+=Jg`=q!zb7bU|Ovl8w( zpfORUyq~l)EFvq3w2m@iHO?Rtt~Av)7b10?s7h&K=>ar^b{Z~lqu_AcZAipt`S?L* z4kjDXh&CKDL@tIDmH8Mxr!-2LzfVxm9n+e>%dp!@6`hyA53e z9=DCeEt*+zyhQ?q`3%-4*gQ;ODn5BzBEWh`GNJ>^=19n=ijNXqv~oz=xSo zXHTLcco`6VuBH1Cq z^Y|qZw%gIA7JbJpeIg4}nDX&`&o?T{|MzNrP)QS|u^0t^<|~5N!bZgexzoh9B%)BR z@Cm21LlS_F+7`w}w9}`u@{kI7C zZGOfqyy%|Jv3v8KXyk%S0W?C}cTQyAcht{H#9dgjW*i?z+NxC{SweGc#x77rH+u~CEQ@T zIW$KI)S%lOX|2JYIyE-$4R6Jr>p2$k`Q4U}W(KO_))l;7A_^H8@)p)x1*UT*NBOoG&*km(0vPtQ_GX=8fI{ zO3k8b?S-YqG&_nJwi(i{APfPtX-2G*pBpvCr6|QsBTE zr{#W*SyR#sh-&&*3Up+oas(gL<|gKY7{bW(0o9>W#ZviO~q6~v~v zvvM>oHyiA%9L3Sba}oDxYo$Cpwi{cB)5G6z;r57&b$!XTzT~FdWi0f<)>AX3>-Se8 zc}fEo5_P?(8Sg}Mm!KFIPx~u1>25KDIY#O$i|3e&<$b9FKP~UP0Jq?y6LYXxl}(rI zsdrv_xb(<+k`|T)lh*@7H;BuoN+LvE>~PdcOax$knZ`?rhwI$PBDDb7)(CLd{zi`M3vaz(!r zQ0B_fQJ(e8Ha}?k*LG_9xgy_?Fg0n7gG}xN3`-b%i-?Jur7{VU<+OTrs->8Cs+~b1 zCaK^gP^RNH+i)FL7%XSk*{^BwT(>mvXPV57rg@t8N+cPQU`jE9NAVOt# zo0fKxn-()DL(U(Pga`RMdIhh@xKb(aAh{^*;&a9ypU$QtowX}y8i=D7D11cRea^#^ zW_||8OM~CcnfQ+c`{jm6&8W+sYmtnZD|W0B0BJreR3GhPd51hl^W9xK+FOXExU*9# z4c8Sbq1>f*b0QtkA}o$yoRJm(1exQT^sbHt!UGymKZ4^h+;)r?}yG}Mu=!` z7h68bbTla=Q4*I7hB%{e&kdGkWc(<0B}90$?Uyk*7Z=jxH}<4tM`1=d!25l=TH|Lh zb?(#Xs@_U=ToKI=I%h?Jg_{WoEWuvTyPPjB7sD$D7^FCP$Sy=bd1w(FD{v*1P~R;N z+c9^~h!hx#WV*!^VltsbRdkb^Zet~?o9~tnH$VE|e^lUBZUl>kEP2wHoU?)#Z3v5r zuWgSPlNbG$t^i+THU7{m!yoN~9?q)RjV?m1aiCt~CD2fl# zbkhv_+Xezuoc3?zy<=Lz`Be5n3!ys`^ggn|%!=%3m`KDZhioZb;jcn4VBJ&>Q?!fJ zttkoT;`#xS4wM)NTKPb%$0rMzEGb6%^dq0TS6l*XGJq)g6 zL)#RK4+>V24Z$SI7MlX;q&8e@yHo-T{A80m*^4gHE~q~+sH@YBzHgAvhGI*D?#cI` zTIt-&k~iejBL%IqQhC~9A}0jwO3=@%v1@NB4CU6mbFc*aFj>UEPtylv>nh zDIlLa4}CNn%#2OK;PE#<;cn;WEW%^vBs0a2Um5Bzr>xjyVG;^V^I?n=+>J-H;5qI) zEk-ngA@b!4&fH;KCC3!`$M_1o6)g8+AM~+?eFUA*^}cu6cxFv9mnm;mVX3ck8^g;+ zj|sAY#+7mnkh8pEo1Dw%ljMY%fm5nXDa(AKHZ){m`JBUTa*82yOrqJgE{{3h%(s2U z&F14wf97V*&obK<)c$xkD$JW12<8{(OJ@ePY?Ahg?{Kn^9uuUH&a_UMMGxut@d!hV#&?d}HYU-F_W@ zqvy}jt1)x`7tN;|+iU%<6s2wX#4-@wn$<68O(_!FRG6~kQ&Ut%8W)pDHF&1);v7t$ zU%F)yrBG#2qU&q8Y51ky|M%ZA1z@gpo~8@?LHpz4(lOTVU}ep~n-cIQd2GudsinhJ z9%2~QoE@UiMNNRh4+_V87Fa0!DS`sWN!aJfYr!R0t~A48x*J-g9YmTxbU}RBGkS#G z>3%tE7D4XY3w~WdNiQ4Bc?@5w@31NQ zZ;WTGL@Uv*-zw@)P~4I-BAZB2Xfv9h%g*;)qdfeqE54GolvuX!8>91f?p)~bZ?s@7rADHou^?qtyi|T$O7HSt~>nCyovMi zqHbepGeW^zpFfpg{*w1=Ly9|(a#)+C*$$T|v^22x8rsx#o(vC8u$*El%ku?t?|p>O z9}l}}6Q>h2O|~%_Y5N5sa<=9**gA$zlNrE5nKdk~9x|#+fIAa;{ZR;Fe7F?ZB2k;~ z2<~^}gEYj!((?*J@f)%TPJt0pJa1)@VP9q_n8Xo(=iOQ`Ee0id$lsoGK7s`zba3tw z768e|l-3Koi5vw7B5OEIS;z%N2)`!GDuh;DdsYjp72>U$hRkORsbG!N13Q-UOGQ}FyOcJ)K5mN7ELwkDcGjQ$U4g_E%W literal 37998 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 LOV>{2B1rxpdQH)e diff --git a/locale/pt_BR/LC_MESSAGES/messages.po b/locale/pt_BR/LC_MESSAGES/messages.po index 89109e1..681d35d 100644 --- a/locale/pt_BR/LC_MESSAGES/messages.po +++ b/locale/pt_BR/LC_MESSAGES/messages.po @@ -1,2914 +1,1549 @@ # : $ + + msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2004-01-14 17:45+0200\n" -"PO-Revision-Date: 2009-01-12 13:30+0000\n" -"Last-Translator: Rafael Porto Rodrigues \n" "Language-Team: phpLDAPadmin \n" +"Last-Translator: Elton (CLeGi@terra.com.br)\n" +"POT-Creation-Date: 2005-11-29 17:45+0100\n" +"PO-Revision-Date: 2005-11-29 18:22+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-03-20 08:04+0000\n" -"X-Generator: Launchpad (build Unknown)\n" -#: ../../htdocs/mass_delete.php:86 -#, php-format -msgid "%s of %s entries failed to be deleted." -msgstr "%s de %s entradas falharam ao serem excluídas." -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "(" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../lib/HTMLTree.php:486 -msgid "(Session timed out. Automatically logged out.)" -msgstr "(Sessão expirou. Desconectado automaticamente.)" -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr ")" - -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" -msgstr ":" - -#: ../../lib/search_form_advanced.php:103 -msgid "A list of attributes to display in the results (comma-separated)" -msgstr "" -"Uma lista de atributos para exibir nos resultados (separados por vírgula)" - -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 -msgid "A random password was generated for you" -msgstr "Uma senha aleatória foi gerada para você" - -#: ../../lib/ldif_functions.php:532 -msgid "A valid deleteoldrdn attribute should be specified" -msgstr "Um atributo válido deleteoldrdn deve ser especificado" - -#: ../../lib/ldif_functions.php:243 -msgid "A valid dn line is required." -msgstr "Uma linha dn válida é solicitada." - -#: ../../lib/ldif_functions.php:538 -msgid "A valid newrdn attribute should be specified" -msgstr "Um atributo válido newrd deve ser especificado" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 -msgid "Add" -msgstr "Adicionar" - -#: ../../htdocs/add_value_form.php:182 -msgid "Add New Value" -msgstr "Adicionar novo valor" - -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 -msgid "Add ObjectClass and Attributes" -msgstr "Adicionar Classe de Objetos e Atributos" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "Adicionar todos" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 -#, php-format -msgid "Add an additional value to attribute '%s'" -msgstr "Insere um valor adicional para o atributo '%s'" - -#: ../../htdocs/add_value_form.php:93 -msgid "Add new" -msgstr "Adicionar novo" - -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 -msgid "Add new ObjectClass" -msgstr "Inserir nova ObjectClass" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 -msgid "Add new attribute" -msgstr "Adicionar Novo Atributo" - -#: ../../htdocs/add_attr_form.php:114 -msgid "Add new binary attribute" -msgstr "Adicionar novo atributo binário" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "Adicionar selecionado" - -#: ../../htdocs/ldif_import.php:62 -msgid "Adding..." -msgstr "Adicionando..." - -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 -msgid "Advanced Search Form" -msgstr "Formulário de busca Avançada" - -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "Apelido para" - -#: ../../htdocs/schema.php:110 -msgid "Aliases" -msgstr "Apelidos" - -#: ../../htdocs/mass_delete.php:88 -msgid "All entries deleted successfully." -msgstr "Todos objetos foram excluídos com sucesso." - -#: ../../lib/EntryWriter1.php:825 -#, php-format -msgid "An attribute (%s) was modified and is highlighted below." -msgstr "Um atributo (%s) foi modificado e está destacado abaixo" - -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "Uma entrada deve ter uma objectClass estrutural" - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "Anônimo" - -#: ../../htdocs/login.php:164 -msgid "Anonymous Bind" -msgstr "Conexão anônima" - -#: ../../htdocs/delete_form.php:102 -msgid "Are you sure you want to permanently delete this object?" -msgstr "Você tem certeza que deseja excluir este objeto permanentemente?" - -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 -msgid "Attribute" -msgstr "Atributo" - -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "Tipos de Atributos" - -#: ../../lib/ldif_functions.php:455 -msgid "Attribute is not valid" -msgstr "Atributo inválido" - -#: ../../lib/ldif_functions.php:375 -msgid "Attribute not well formed" -msgstr "Atributo não está bem formado" - -#: ../../htdocs/login_form.php:63 -msgid "Authenticate" -msgstr "Autenticar" - -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "Autenticar no servidor" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "Membros disponíveis" - -#: ../../htdocs/entry_chooser.php:65 -msgid "Back Up..." -msgstr "Backup..." - -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 -msgid "Bad username or password. Please try again." -msgstr "Usuário ou senha inválido. Por favor tente novamente." - -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 -msgid "Base (base dn only)" -msgstr "Base (apenas a base dn)" - -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 -msgid "Base DN" -msgstr "Base DN" - -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 -msgid "Binary value" -msgstr "Valor binário" - -#: ../../htdocs/copy.php:61 -msgid "Building snapshot of tree to copy... " -msgstr "Construindo a imagem da árvore a ser copiada... " - -#: ../../lib/export_functions.php:38 -msgid "CSV (Spreadsheet)" -msgstr "CSV (Planilha Eletrônica)" - -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "Chamado para carregar uma classe que não pode ser encontrada" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 -msgid "Cancel" -msgstr "Cancelar" - -#: ../../htdocs/compare.php:343 -msgid "Check password" -msgstr "Verificar senha" - -#: ../../lib/EntryWriter1.php:2427 -msgid "Check password..." -msgstr "Verificar senha..." - -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "Verificando senhas" - -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "Filhos" - -#: ../../lib/functions.php:3223 -msgid "Click to popup a dialog to select a date graphically" -msgstr "" - -#: ../../lib/functions.php:2239 -msgid "Click to popup a dialog to select an entry (DN) graphically" -msgstr "" -"Clique para abrir uma janela e selecionar um objeto (DN) graficamente" - -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 -#, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "" - -#: ../../htdocs/schema.php:106 -msgid "Collective" -msgstr "Coletivo" - -#: ../../htdocs/update_confirm.php:303 -msgid "Commit" -msgstr "Confirmar" - -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 -msgid "Compare" -msgstr "Comparar" - -#: ../../htdocs/compare_form.php:21 -msgid "Compare another DN with" -msgstr "Compare outro DN com" - -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 -msgid "Compare this DN with another" -msgstr "Compare este DN com outro" - -#: ../../lib/EntryWriter1.php:776 -msgid "Compare with another entry" -msgstr "Compare com outra entrada" - -#: ../../htdocs/compare.php:42 -msgid "Comparing the following DNs" -msgstr "Comparando o seguinte DNs" - -#: ../../htdocs/export_form.php:84 -msgid "Compress" -msgstr "Compactar" - -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "" - -#: ../../htdocs/mass_delete.php:92 -#, php-format -msgid "Confirm mass delete of %s entries on server %s" -msgstr "Confirme exclusão em massa de %s objetos no servidor %s" - -#: ../../lib/EntryWriter1.php:327 -msgid "Container" -msgstr "Container" - -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "" - -#: ../../lib/ldif_functions.php:525 -msgid "Container is null" -msgstr "Contâiner está vazio" - -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 -msgid "Copy" -msgstr "Copiar" - -#: ../../htdocs/copy_form.php:96 -msgid "Copy " -msgstr "Copiar " - -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "Copiar Entrada" - -#: ../../lib/EntryWriter1.php:741 -msgid "Copy or move this entry" -msgstr "Copiar este objeto" - -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "Copia bem sucedida!" - -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "Copie este objeto para outra locação, um novo DN, ou outro servidor" - -#: ../../htdocs/copy.php:57 -msgid "Copying " -msgstr "Copiando " - -#: ../../htdocs/ldif_import.php:70 -msgid "Could not add object:" -msgstr "Não foi possível inserir objeto:" - -#: ../../htdocs/create.php:133 -msgid "Could not add the object to the LDAP server." -msgstr "Não foi possível inserir o objeto no servidor LDAP." - -#: ../../htdocs/login.php:137 -msgid "Could not bind anonymously to server." -msgstr "Não foi possível conectar ao servidor anonimamente." - -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "" - -#: ../../lib/server_functions.php:347 -#, php-format -msgid "Could not connect to \"%s\" on port \"%s\"" -msgstr "Não foi possível conectar em \"%s\" na porta \"%s\"" - -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "Não é possível conectar ao servidor LDAP" - -#: ../../htdocs/ldif_import.php:71 -msgid "Could not delete object:" -msgstr "Não foi possível excluir objeto:" - -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 -#, php-format -msgid "Could not delete the entry: %s" -msgstr "Não foi possível excluir o objeto: %s" - -#: ../../htdocs/entry_chooser.php:101 -msgid "Could not determine base DN" -msgstr "Não foi possível determinar a base DN" - -#: ../../lib/HTMLTree.php:82 -msgid "Could not determine the root of your LDAP tree." -msgstr "Não foi possível determinar a raiz da sua árvore LDAP." - -#: ../../lib/functions.php:1849 -#, php-format -msgid "Could not fetch jpeg data from LDAP server for attribute %s." -msgstr "" - -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 -msgid "Could not logout." -msgstr "Não foi possível desconectar." - -#: ../../htdocs/ldif_import.php:74 -msgid "Could not modify object:" -msgstr "Não foi possível alterar objeto:" - -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 -msgid "Could not perform ldap_mod_add operation." -msgstr "Não foi possível executar operação ldap_mod_add." - -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 -msgid "Could not perform ldap_modify operation." -msgstr "Não foi possível realizar a operação ldap_modify." - -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 -msgid "Could not rename object:" -msgstr "Não foi possível renomear objeto:" - -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 -msgid "Could not rename the entry" -msgstr "Não foi possível renomear o objeto" - -#: ../../htdocs/schema.php:31 -msgid "Could not retrieve schema from" -msgstr "Não foi possível encontrar esquema de" - -#: ../../htdocs/login.php:152 -msgid "Could not set cookie." -msgstr "Não foi possível criar o cookie." - -#: ../../lib/server_functions.php:265 -msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "" -"Impossível iniciar TLS. Por favor verifique a configuração do servidor LDAP." - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "Criar" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "Criar Entrada" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "Criar Objeto" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "Criar objeto filho" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "Criar uma nova entrada em" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "Criar outra entrada" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "Cria-la?" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "Criar Novo" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "Criação bem sucedida!" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "Créditos" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "Lista atual de" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "Cortar" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "DN" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "DN não disponível" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "Exportação DSLM para: %s" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "Padrão" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "Excluir" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "Excluir %s" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "Apagar Entradas Verificadas" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "Apagar DN" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "Excluir imagem" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "Apagar após copiar (mover):" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "Excluir todos os %s objetos" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "Apagar foto" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "Excluir este objeto" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "Apagando" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "Excluindo %s" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "Deletando..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "Progresso da exclusão no servidor \"%s\"" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "Descrição" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "DN de destino" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "Servidor de destino" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "Servidor destino é atualmente SOMENTE-LEITURA." - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "Mostrar uma nova entrada criada" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "Nome Distinto" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "Você realmente quer apagar %s %s %s" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "Você confirma estas alterações?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "Documentação" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "Não parar quando der erro" - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "Contribuir" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "Erro encontrado enquanto fazia a pesquisa." - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "Entre com o valor que você quer inserir:" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "Entradas encontradas" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "Objeto" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "Objeto %s e sub-árvore excluído com sucesso." - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "Selecionador de objeto" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "Entradas criadas" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "Igualdade" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "Erro" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "" -"Erro chamando mass_delete.php. Faltando mass_delete nas variáveis POST." - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "Código de erro" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "Número do erro" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "Exportar" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "Entradas exportadas" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "Formato para exportar" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "Exportar sub-árvore para LDIF" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "Falhou" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "Falha ao inserir o atributo." - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "Falha ao copiar DN: " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "Falha ao excluir objeto %s" - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "Arquivo" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "Filtro" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "Filtrar desempenho" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "Formato" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "Função" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "Gerado pelo phpLDAPadmin no %s" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "Erro Genérico" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "Ir" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "Voltar" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "Ir para" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "Ir para %s" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "Membros do grupo" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "Ajuda" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "Ocultar" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "Ocultar atributos internos" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "Dica" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "" -"Dica: Copiando entre diferentes servidores somente funciona se não houver " -"violação de esquema" - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "" -"Dica: Para apagar um atributo, apague o conteúdo do campo de texto e clique " -"salvar." - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "Dica: Para ver o esquema de um atributo clique no nome do atributo." - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "Dica: Você deve escolher pelo menos uma Classe de Objetos estrutural" - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "Home" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please report it." -msgstr "" - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "" -"Se você quer inserir seus próprios critérios à lista. Certifique-se de " -"editar o search.php para tratá-los. Saindo." - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "Importar arquivo LDIF" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "Importar objetos de um arquivo LDIF" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "Incluir atributos do sistema" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "Versão incorreta do PHP" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "Herdado de" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "Herda de" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "Instruções" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "Insuficientes direitos de acesso." - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "Valor RDN inválido" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "Formato para exportação inválido" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "Este é um bug do phpLDAPadmin?" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "" -"Parece que o servidor LDAP foi configurado para não revelar seu root." - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "Ir para regras de consistência" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "Ir para um tipo de atributo" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "Ir para uma classe de objetos" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "Ir para definição desta classe de objeto" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "LDAP disse" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "Exportação LDIF para: %s" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "Erro Analisando Arquivo LDIF" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "Linha" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "Número da Linha" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "Fins de linha" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "Lista de objetos a serem deletados:" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "Logado como" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "Conectar" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "Login DN" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "Conectar..." - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "Desconectar" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "Desconectar deste servidor" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "Correio" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "" - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "Conjunto mass_delete danificado." - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "Exclusão em massa" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "" -"Exclusão em massa não habilitada. Por favor habilite-a no arquivo config.php " -"antes de continuar" - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "OID da Regra de consistência" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "Regra de consistência" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "Tamanho Máximo" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "Tamanho máximo do arquivo" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "Baixo Limite de Memória" - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "Perdido %s no arquivo XML." - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "" - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "Arquivo carregado perdido." - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "Alteração bem sucedida!" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "Modificar grupo" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "Membros modificados para '%s'" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "Alterando..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "Nome" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "Novos Atributos Obrigatórios" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "Valor Novo" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "Não" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "DN não especificado" - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "Nenhum arquivo LDIF especificado. Favor tentar novamente." - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "Nenhum Modelo" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "Nenhum Valor" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "Nome de atributo não especificado." - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "Nenhum exportador de arquivos encontrado." - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "" - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "Nenhum valor corrente para o atributo" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "Nenhum atributo interno." - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "Ninguém está conectado neste servidor." - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "Nenhum critério de busca foi definido no config.php" - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "Objeto inexistente: %s" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "Arquivo inexistente" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "Nenhuma versão encontrada. Assumindo 1." - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "" -"Informações insuficientes para a conexão com o servidor. Por favor verifique " -"sua configuração." - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "Nota" - -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "" -"Nota: talvez seja solicitado que você entre com os atributos necessários " -"para esta classe de objetos" - -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" -"Nota: isto é potencialmente muito perigoso, faça isso por sua conta e risco. " -"Esta operação não pode ser desfeita. Leve em consideração apelidos, " -"referências e outras coisas que podem causar problemas." - -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "Aviso, limite da pesquisa excedido." - -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" - -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 -msgid "ObjectClasses" -msgstr "Classe de Objetos" - -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" - -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "ObjectClasses no XML não existem no servidor LDAP" - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "Obsoleto" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "Valor Antigo" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "One (um nível de profundidade)" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "Atributos Opcionais" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "Ou cole o seus LDIF aqui" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "Ordenar por" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "Ordenando" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "PHP Modo Seguro" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "Página %d" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "Pai para" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "Senha" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "Ferramenta de Verificação da Senha" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "Senhas não conferem!" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "Exluir permanentemente todos os objetos filho também?" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "Favor verificar e olhar se o erro já foi relatado" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "Por favor especifique-o no config.php" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "Buscas pré-definidas" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 -msgid "Proceed >>" -msgstr "Continuar >>" - -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "" - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "" - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "Deseja realmente apagar atributo" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "Cópia Recursiva" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "Progresso da cópia recursiva" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "Progresso de exclusão recursiva" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "Copia recursivamente todos filhos deste objeto também." - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "Atualizar" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "Atualizar todos containers abertos para" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "Atualizar este objeto" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "Remover selecionado" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "Renomear" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "Renomear objeto" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "Renomeação bem sucedida!" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "Renomeando..." - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "Comunicar um bug" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "Solicitar uma nova função" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "Atributos Obrigatórios" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "Salvar" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "Salvar Alterações" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "Salva um arquivo LDIF com os dados deste objeto" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "" -"Salva um arquivo LDIF com os dados deste objeto e todos os seus filhos" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "Salvar como arquivo" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "Salvar alterações" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "Esquema para servidor" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "Buscar" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "Filtro de Busca" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "Abrangência da Busca" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "Buscar objetos cujo..." - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "Não é permitido a procura" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "" -"Erro de segurança: O arquivo que está sendo carregado pode ser malicioso." - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "Selecione uma busca pré-definida" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "Selecionar um modelo para o processo de criação" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "Selecione um arquivo LDIF" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "Servidor" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "Selecione o Servidor" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "Informações do servidor: " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "O servidor forneceu a seguinte informação sobre si mesmo" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "Exibir" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "Exibir Atributos" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "Mostrar cache" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "Exibir atributos internos" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "Mostrando resultados %s através %s." - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 msgid "Simple Search Form" msgstr "Formulário de busca Simples" -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "" -"Você alterou sua senha, você deve conectar novamente com a sua nova senha." -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "Avaliado sozinho" +msgid "Advanced Search Form" +msgstr "Formulário de busca Avançada" -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "Pular" -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "Alguns atributos (%s) foram modificados e estão destacados abaixo." +msgid "Server" +msgstr "Servidor" -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "" -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "Fonte DN" +msgid "Search for entries whose" +msgstr "Buscar objetos cujo..." -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "Especifique os atributos e valores" -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "Filtro de busca LDAP padrão. Exemplo: (&(sn=Silva)(givenname=Pedro))" +msgid "Base DN" +msgstr "Base DN" -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "Passo %s de %s" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "Sub (toda a sub-árvore)" +msgid "Search Scope" +msgstr "Abrangência da Busca" -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "Regra de substring" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "Sucesso" +msgid "Show Attributtes" +msgstr "Exibir Atributos" -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "DN apagado com sucesso " -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "Logado com sucesso no servidor." +msgid "Search" +msgstr "Buscar" -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "Escolher Entradas" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "Sintaxe" +msgid "equals" +msgstr "igual" -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "OID da Sintaxe" -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "Sintaxes" +msgid "contains" +msgstr "contém" -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "Modelo" -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" +msgid "Select a predefined search" +msgstr "Selecione uma busca pré-definida" -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "Modelos" -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "" +msgid "Predefined Searches" +msgstr "Buscas pré-definidas" -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "" -"O atributo %s está marcado como somente leitura na configuração do " -"phpLDAPadmin." -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "O atributo (%s) está em modo somente leitura" +msgid "No queries have been defined in config.php." +msgstr "Nenhum critério de busca foi definido no config.php" -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "O atributo nome deve ser adicionado, apagado ou substituído" -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "" +msgid "Request feature" +msgstr "Solicitar uma nova função" -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "" -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "" +msgid "Report a bug" +msgstr "Comunicar um bug" -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "" -#: ../../htdocs/create.php:39 -#, php-format -msgid "The container you specified (%s) does not exist. Please try again." -msgstr "" -"O container que você especificou (%s) não existe. Por favor tente novamente." - -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "O container de destino (%s) não existe." - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "O objeto de destino (%s) já existe." - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "A entrada (%s) não existe." - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "A entrada (%s) está em modo somente leitura" - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "A entrada não é válida" - -#: ../../htdocs/add_attr.php:56 -msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "" -"O arquivo que você escolheu está vazio ou não existe. Por favor retorne e " -"tente novamente." - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "" -"O arquivo que você selecionou foi carregado parcialmente, provavelmente por " -"causa de um erro de rede." - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "" -"O arquivo que você carregou é muito grande. Por favor verifique a " -"configuração do upload_max_size no php.ini" - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" -msgstr "" -"O DN completo do novo objeto que será criado a partir da cópia da origem" - -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" -msgstr "O escopo no qual procurar" - -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "A busca não encontrou resultados" - -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "O servidor não suporta o protocolo LDAP completamente." - -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "O DN de origem e destino são o mesmo." - -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "" - -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "Há" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "Esta ação requer que você insira" - -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "" -"Este atributo foi marcado como somente leitura pelo administrador do " -"phpLDAPadmin" - -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "Este atributo é requerido" - -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "Este atributo é requerido pelo RDN." - -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "Esta base de entrada não existe." - -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "Isso pode ter acontecido por vários motivos, os mais provável são:" - -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "Esta entrada não existe." - -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "Este objeto não tem atributos." - -#: ../../htdocs/delete_form.php:46 -#, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "Este objeto é a raiz de uma sub-árvore e contém %s objetos." - -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "Esta é uma estrutura ObjectClass e não pode ser removida." - -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "Este não é um DN válido." - -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "Esta classe de objeto está obsoleta." - -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "Esta operação não é permitida pela configuração" - -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "Este servidor não tem nada a informar" - -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "" - -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "Esta conecção de rede não é criptografada" - -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "Para" - -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "" - -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "Total de objetos" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "Lixeira" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "Tipo" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "URL" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 -#, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "" -"Problema ao conectar ao %s com as suas credenciais auto_uid. Por " -"favor verifique seu arquivo de configuração." - -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "" - -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "Indisponível para apagar, servidor esta no modo SOMENTE-LEITURA" - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "Arquivo indisponível para abrir" - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "Impossível ler o arquivo" - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "auth_type desconhecido: %s" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "Tipo uidpool desconhecido" - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "Critério desconhecido: " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "" - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "Arquivo LDIF carregado está vazio." - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "Uso" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "Use o menu à esquerda para navegar" - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "Usado por Atributos" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "Usado por classes de objetos" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "Alteração do usuário" - -#: ../../lib/EntryWriter1.php:797 -#, php-format -msgid "View %s children" -msgstr "Ver %s filhos" - -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "Ver 1 filho" - -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "Ver esquemas de" - -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "Ver informações fornecidas pelo servidor" - -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "" - -#: ../../lib/EntryWriter1.php:819 -msgid "Viewing entry in read-only mode." -msgstr "Vizualizando objeto em modo somente-leitura." - -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" - -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "Aviso" - -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "" -"Quando executar uma cópia recursiva, copiar somente os objetos que atendem a " -"este filtro" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "Sim" - -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "Sim, excluir!" - -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "" -"Você não está usando 'https'. O navegador internet vai transmitir as " -"informações de login sem criptografar." - -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 -msgid "You cannot perform updates while server is in read-only mode" -msgstr "" -"Você não pode realizar atualizações enquanto o servidor estiver em modo " -"somente leitura" - -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "" -"Você não pode renomear um objeto que tem objetos filhos (isto é, a operação " -"de renomear não é permitida em objetos não-folha)" - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "Você não alterou o RDN" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "" -"Você não selecionou nenhuma Classe de Objetos para este objeto. Por favor " -"volte e faça isso." - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "Você não selecionou nenhum objeto para excluir" - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "" - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "Você encontrou um bug não-fatal no phpLDAPadmin!" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "" -"Você não conectou no servidor selecionado ainda, assim, você não pode " -"realizar buscas nele." - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "Você especificou duas senhas diferentes" - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "Você deixou o campo RDN vazio." - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 -msgid "You left the attribute value blank. Please go back and try again." -msgstr "" -"Você deixou o valor do atributo vazio. Por favor retorne e tente novamente." - -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "Você deixou o DN de destino vazio." - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "Você deixou a senha vazia." - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "Você deixou vazio o valor de um atributo obrigatório (%s)." - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "Você não fez alterações" - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "Você deve especificar um formato para exportar" - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "" - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "Você deve especificar um DN" - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "" - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "Será solicitado que você confirme sua decisão" - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "" -"Sua configuração do PHP desabilitou o upload de arquivos. Por favor " -"verifique o php.ini antes de continuar." - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" -"Sua instalação do PHP não tem a função mhash(). Impossível fazer " -"transformações SHA." - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "Sua instalação do PHP não suporta TLS" - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "Sua configuração foi automaticamente atualizada" - -#: ../../lib/functions.php:1172 -#, php-format -msgid "" -"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " -"for server %s" -msgstr "" -"Sua configuração do phpLDAPadmin especifica que o auto_uid_search_base é " -"inválido para o servidor %s" - -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "Sua instalação do PHP não suporta codificação blowfish." - -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 -msgid "Your system crypt library does not support extended DES encryption." -msgstr "" - -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 -msgid "Your system crypt library does not support md5crypt encryption." -msgstr "Sua instalação do PHP não suporta codificação md5crypt." - -#: ../../lib/template_functions.php:984 -#, php-format -msgid "" -"Your template calls php.Function for a default value, however (%s) is NOT " -"available in the POST FORM variables. The following variables are available " -"[%s]." -msgstr "" - -#: ../../lib/EntryReader.php:262 -#, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "" - -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "Seu modelo esta perdendo variável (%s)" - -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "Sua versão do PHP não executa a consulta corretamente." - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[atributo excluído]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "[nenhum valor]" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "adicionar atributo" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "adicionar valor de atributo" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "inserir valor" - -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "busca avançada" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "apelido" - -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "procurar" - -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "bug" - -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "bytes" - -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "" - -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "caracter" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "caracteres" - -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "confirmar" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "copiar entrada" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "criar entrada" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "apagar atributo" - -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "apagar entrada" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "apagar todas entradas" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "download do valor" - -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "vazio" - -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "entradas" - -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "entrada" - -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "exportar" - -#: ../../htdocs/search.php:273 -msgid "export results" -msgstr "exportar resultados" - -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "falso" - -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "foi criado." - -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "dica" - -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "importar" - -#: ../../lib/HTMLTree.php:248 -msgid "info" -msgstr "info" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "é um apelido para" - -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "Foto jpeg contém erros
" - -#: ../../lib/functions.php:351 -msgid "light" -msgstr "a palavra \"light\" de \"light bulb\"" - -#: ../../lib/functions.php:132 -msgid "line" -msgstr "linha" - -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "conectar" - -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "desconectar" - -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "a variável POST mass_delete não é um conjunto" - -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "membro no grupo" - -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "min. de inatividade. Você saiu automaticamente." - -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "modificar valores de atributo" - -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "modificar membros do grupo" - -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "Novo" - -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "novos atributos" - -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "sem descrição" - -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "nenhuma descrição disponível" - -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "nenhum objeto" - -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "novos atributos não disponíveis para este objeto." - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "novos atributos binários não disponíveis para este objeto." - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "nenhum" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "nenhum, remover valor" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "não aplicável" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "não especificado" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" -"o phpLDAPadmin pode excluir recursivamente este objeto e todos %s filhos. " -"Veja abaixo uma lista de todos os objetos que esta ação vai excluir. Deseja " -"fazer isso?" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "" -"Ou, por fim, o phpLDAPadmin não sabe como buscar o esquema para o seu " -"servidor." - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "logo do phpLDAPadmin" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "busca pré-definida" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "apagar" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "somente leitura" - -#: ../../lib/HTMLTree.php:240 -msgid "refresh" -msgstr "atualizar" - -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "atualizar servidor" - -#: ../../lib/EntryWriter1.php:1829 -msgid "rename" -msgstr "renomear" - -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "renomear entrada" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "requerido" - -#: ../../lib/HTMLTree.php:224 msgid "schema" msgstr "esquema" -#: ../../lib/HTMLTree.php:232 + msgid "search" msgstr "buscar" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "segundos" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "selecionar o atributo rdn" +msgid "refresh" +msgstr "atualizar" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "busca simples" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "passo %s de %s" +msgid "create" +msgstr "criar" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "estrutural" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "que este objectClass requer." +msgid "info" +msgstr "info" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "estes" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "este" +msgid "import" +msgstr "importar" + + +msgid "logout" +msgstr "desconectar" + + +msgid "Create new entry here" +msgstr "Criar Novo" + + +msgid "new" +msgstr "Novo" + + +msgid "View schema for" +msgstr "Ver esquemas de" + + +msgid "Refresh all expanded containers for" +msgstr "Atualizar todos containers abertos para" + + +msgid "Create a new entry on" +msgstr "Criar um novo objeto em" + + +msgid "View server-supplied information" +msgstr "Ver informações fornecidas pelo servidor" + + +msgid "Import entries from an LDIF file" +msgstr "Importar objetos de um arquivo LDIF" + + +msgid "Logout of this server" +msgstr "Desconectar deste servidor" + + +msgid "Logged in as: " +msgstr "Conectado como: " + + +msgid "read only" +msgstr "somente leitura" + + +msgid "This attribute has been flagged as read only by the phpLDAPadmin administrator" +msgstr "Este atributo foi marcado como somente leitura pelo administrador do phpLDAPadmin" + + +msgid "Could not determine the root of your LDAP tree." +msgstr "Não foi possível determinar a raiz da sua árvore LDAP." + + +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Parece que o servidor LDAP foi configurado para não revelar seu root." + + +msgid "Please specify it in config.php" +msgstr "Por favor especifique-o no config.php" + + +msgid "Login..." +msgstr "Conectar..." + + +msgid "login" +msgstr "conectar" + + +msgid "Delete this entry" +msgstr "Excluir este objeto" + + +msgid "You will be prompted to confirm this decision" +msgstr "Será solicitado que você confirme sua decisão" + + +msgid "Copy or move this entry" +msgstr "Copiar este objeto" + + +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Copiar este objeto para outro local, um novo DN, ou outro servidor" + + +msgid "Export" +msgstr "Exportar" + + +msgid "Save a dump of this object" +msgstr "Salva um arquivo LDIF com os dados deste objeto" + + +msgid "Save a dump of this object and all of its children" +msgstr "Salva um arquivo LDIF com os dados deste objeto e todos os seus filhos" + + +msgid "Export subtree" +msgstr "Exportar sub-árvore para LDIF" + + +msgid "Create a child entry" +msgstr "Criar objeto filho" + + +msgid "Rename Entry" +msgstr "Renomear objeto" + + +msgid "Rename" +msgstr "Renomear" + + +msgid "rename" +msgstr "renomear" + + +msgid "Add" +msgstr "Inserir" + + +msgid "View" +msgstr "Ver" + + +msgid "View 1 child" +msgstr "Ver 1 filho" + + +msgid "View %s children" +msgstr "Ver %s filhos" + + +msgid "Add new attribute" +msgstr "Inserir Novo Atributo" + + +msgid "Add new ObjectClass" +msgstr "Inserir nova ObjectClass" + + +msgid "Hide internal attributes" +msgstr "Ocultar atributos internos" + + +msgid "Show internal attributes" +msgstr "Exibir atributos internos" + + +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "Clique para ver a definição do esquema para atributos do tipo '%s'" + + +msgid "none" +msgstr "nenhum" + + +msgid "No internal attributes" +msgstr "Nenhum atributo interno." + + +msgid "This entry has no attributes" +msgstr "Este objeto não tem atributos." + + +msgid "Save Changes" +msgstr "Salvar Alterações" + + +msgid "add value" +msgstr "inserir valor" + + +msgid "Add an additional value to attribute '%s'" +msgstr "Insere um novo valor para o atributo '%s'" + + +msgid "Refresh" +msgstr "Atualizar" + + +msgid "Refresh this entry" +msgstr "Atualizar este objeto" + + +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "Dica: Para apagar um atributo, apague o conteúdo do campo de texto e clique salvar." + + +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "Dica: Para ver o esquema de um atributo clique no nome do atributo." + + +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "Alguns atributos (%s) foram modificados e estão destacados abaixo." + + +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "Um atributo (%s) foi modificado e está destacado abaixo" + + +msgid "Viewing entry in read-only mode." +msgstr "Vizualizando objeto em modo somente-leitura." + + +msgid "no new attributes available for this entry" +msgstr "novos atributos não disponíveis para este objeto." + + +msgid "no new binary attributes available for this entry" +msgstr "novos atributos binários não disponíveis para este objeto." + + +msgid "Binary value" +msgstr "Valor binário" + + +msgid "Add new binary attribute" +msgstr "Inserir novo atributo binário" + + +msgid "Note: '%s' is an alias for '%s'" +msgstr "Nota: '%s' é um alias para '%s'" + + +msgid "download value" +msgstr "download do valor" + + +msgid "delete attribute" +msgstr "apagar atributo" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "para um novo objeto" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 msgid "true" msgstr "verdadeiro" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" -"uidpool_dn não encontrado. Favor verificar (arg 3) ou configurar uidpool_dn " -"em arquivo config" -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "" -"update_array danificado. Isto pode ser um bug do phpLDAPadmin. Por favor " -"informe." +msgid "false" +msgstr "falso" -#: ../../htdocs/add_value_form.php:93 -msgid "value to" -msgstr "valor para" -#: ../../htdocs/add_value_form.php:112 -msgid "values for attribute" -msgstr "valores para atributo" +msgid "none, remove value" +msgstr "nenhum, remover valor" + + +msgid "Really delete attribute" +msgstr "Deseja realmente apagar atributo" + + +msgid "Add New Value" +msgstr "Inserir novo valor" + + +msgid "The server does not fully support the LDAP protocol." +msgstr "O servidor não suporta o protocolo LDAP completamente." + + +msgid "Your version of PHP does not correctly perform the query." +msgstr "Sua versão do PHP não executa a consulta corretamente." + + +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "Ou, por fim, o phpLDAPadmin não sabe como buscar o esquema para o seu servidor." + + +msgid "Jump to an objectClass" +msgstr "Ir para uma classe de objetos" + + +msgid "Jump to an attribute type" +msgstr "Ir para um tipo de atributo" + + +msgid "Jump to a matching rule" +msgstr "Ir para regras de consistência" + + +msgid "Schema for server" +msgstr "Esquema para servidor" + + +msgid "Required Attributes" +msgstr "Atributos Obrigatórios" + + +msgid "Optional Attributes" +msgstr "Atributos Opcionais" + + +msgid "Optional Binary Attributes" +msgstr "Atributos Binários Opcionais" + + +msgid "OID" +msgstr "OID" + + +msgid "Aliases" +msgstr "Apelidos" + + +msgid "Description" +msgstr "Descrição" + + +msgid "no description" +msgstr "sem descrição" + + +msgid "Name" +msgstr "Nome" + + +msgid "Equality" +msgstr "Igualdade" + + +msgid "This objectClass is obsolete." +msgstr "Esta classe de objeto está obsoleta." + + +msgid "Inherits from" +msgstr "Herda de" + + +msgid "Inherited from" +msgstr "Herdado de" + + +msgid "Parent to" +msgstr "Pai para" + + +msgid "Jump to this objectClass definition" +msgstr "Ir para definição desta classe de objeto" + + +msgid "Matching Rule OID" +msgstr "OID da Regra de consistência" + + +msgid "Syntax OID" +msgstr "OID da Sintaxe" + + +msgid "not applicable" +msgstr "não aplicável" + + +msgid "not specified" +msgstr "não especificado" + + +msgid "character" +msgstr "caracter" + + +msgid "characters" +msgstr "caracteres" + + +msgid "Used by objectClasses" +msgstr "Usado por classes de objetos" + + +msgid "Used by Attributes" +msgstr "Usado por Atributos" + + +msgid "Obsolete" +msgstr "Obsoleto" + + +msgid "Ordering" +msgstr "Ordenando" + + +msgid "Substring Rule" +msgstr "Regra de substring" + + +msgid "Single Valued" +msgstr "Avaliado sozinho" + + +msgid "Collective" +msgstr "Coletivo" + + +msgid "User Modification" +msgstr "Alteração do usuário" + + +msgid "Usage" +msgstr "Uso" + + +msgid "Maximum Length" +msgstr "Tamanho Máximo" + + +msgid "Syntaxes" +msgstr "Sintaxes" + + +msgid "ObjectClasses" +msgstr "Classe de Objetos" + + +msgid "Matching Rules" +msgstr "Regra de consistência" + + +msgid "Could not retrieve schema from" +msgstr "Não foi possível encontrar esquema de" + + +msgid "Type" +msgstr "Tipo" + + +msgid "Entry %s deleted successfully." +msgstr "Objeto '%s' excluído com sucesso." + + +msgid "You must specify a DN" +msgstr "Você deve especificar um DN" + + +msgid "Could not delete the entry: %s" +msgstr "Não foi possível excluir o objeto: %s" + + +msgid "No such entry: %s" +msgstr "Objeto inexistente: %s" + + +msgid "Delete %s" +msgstr "Excluir %s" + + +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "Este objeto é a raiz de uma sub-árvore e contém %s objetos." + -#: ../../htdocs/delete_form.php:48 msgid "view entries" msgstr "Ver objetos" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "Visualizar programa" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "Visualizar informações do servidor" +msgid "phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?" +msgstr "o phpLDAPadmin pode excluir recursivamente este objeto e todos %s filhos. Veja abaixo uma lista de todos os objetos que esta ação vai excluir. Deseja fazer isso?" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "será apagado(s) este atributo(s)" -#: ../../htdocs/compare_form.php:29 -msgid "with " -msgstr "com " +msgid "Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems." +msgstr "Nota: isto é potencialmente muito perigoso, faça isso por sua conta e risco. Esta operação não pode ser desfeita. Leve em consideração apelidos, referências e outras coisas que podem causar problemas." -#~ msgid "equals" -#~ msgstr "igual" -#~ msgid "contains" -#~ msgstr "contém" +msgid "Delete all %s objects" +msgstr "Excluir todos os %s objetos" -#~ msgid "create" -#~ msgstr "criar" -#~ msgid "Create a new entry on" -#~ msgstr "Criar um novo objeto em" +msgid "Recursive delete progress" +msgstr "Progresso de exclusão recursiva" -#~ msgid "Logged in as: " -#~ msgstr "Conectado como: " -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "Copiar este objeto para outro local, um novo DN, ou outro servidor" +msgid "Entry %s and sub-tree deleted successfully." +msgstr "Objeto %s e sub-árvore excluído com sucesso." -#~ msgid "View" -#~ msgstr "Ver" -#~ msgid "Click to view the schema defintion for attribute type '%s'" -#~ msgstr "Clique para ver a definição do esquema para atributos do tipo '%s'" +msgid "Failed to delete entry %s" +msgstr "Falha ao excluir objeto %s" -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "Nota: '%s' é um alias para '%s'" -#~ msgid "Entry %s deleted successfully." -#~ msgstr "Objeto '%s' excluído com sucesso." +msgid "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin configuration." +msgstr "O atributo %s está marcado como somente leitura na configuração do phpLDAPadmin." -#~ msgid "" -#~ "Instructions: In order to add these objectClass(es) to this entry, you must " -#~ "specify" -#~ msgstr "" -#~ "Instruções: Para poder inserir esta Classe de Objetos a este objeto, você " -#~ "deve especificar" -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "" -#~ "que esta Classe de Objetos requer. Você pode fazê-lo no formulário abaixo:" +msgid "No attribute name specified." +msgstr "Nome de atributo não especificado." -#~ msgid "Bad server id" -#~ msgstr "ID do servidor inválido" - -#~ msgid "Could not connect to LDAP server." -#~ msgstr "Não foi possível conectar com o servidor LDAP." -#~ msgid "Server: " -#~ msgstr "Servidor: " - -#~ msgid "Looking in: " -#~ msgstr "Procurando em: " - -#~ msgid "No DN specified in query string!" -#~ msgstr "DN não especificado na consulta!" - -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "Nota: Você vai receber um erro de \"inappropriate matching\" se você não " -#~ "configurar uma regra de IGUALDADE no seu servidor LDAP para este atributo." - -#~ msgid "Copy successful! Would you like to " -#~ msgstr "Copiado com sucesso! Você gostaria de " - -#~ msgid "view the new entry" -#~ msgstr "ver o novo objeto" - -#~ msgid "Choose a template" -#~ msgstr "Escolher um modelo" - -#~ msgid "Click here to go to the login form" -#~ msgstr "Clique aqui para conectar-se ao servidor" - -#~ msgid "Entries found: " -#~ msgstr "Objetos encontrados: " - -#~ msgid "Filter performed: " -#~ msgstr "Filtro aplicado: " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "Busca realizada pelo phpLDAPadmin em" - -#~ msgid "starts with" -#~ msgstr "inicia com" - -#~ msgid "ends with" -#~ msgstr "termina com" - -#~ msgid "sounds like" -#~ msgstr "é semelhante a" - -#~ msgid "" -#~ "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP " -#~ "or perhaps your LDAP server has access control specified that prevents LDAP " -#~ "clients from accessing the RootDSE." -#~ msgstr "Não foi possível obter informação LDAP do servidor" - -#~ msgid "ChangeLog" -#~ msgstr "Log de Alterações" - -#~ msgid "Unsafe file name: " -#~ msgstr "Nome de arquivo inseguro: " - -#~ msgid "No such file: " -#~ msgstr "Arquivo inexistente: " - -#~ msgid "" -#~ "You have enabled auto_uid_numbers for %s in your configuration, " -#~ " but you have not specified the " -#~ "auto_uid_number_mechanism. Please correct " -#~ "this problem." -#~ msgstr "" -#~ "Você habilitou auto_uid_numbers para %s na sua configuração, mas você " -#~ "não especificou auto_uid_number_mechanism. Por favor corrija este problema." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool\" " -#~ " in your configuration for server %s, but you did not " -#~ "specify the audo_uid_number_uid_pool_dn. Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "Você especificou o \"auto_uid_number_mechanism\" como \"uidpool\" na sua " -#~ "configuração para o servidor %s, mas você não especificou o " -#~ "audo_uid_number_uid_pool_dn. Por favor especifique-o antes de continuar." - -#~ msgid "" -#~ "It appears that the uidPool you specified in your configuration (\"%s\") " -#~ " does not exist." -#~ msgstr "" -#~ "Parece que o uidPool que você especificou na sua configuração (%s) " -#~ "não existe." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"search\" in your " -#~ " configuration for server %s, but you did not " -#~ "specify the \"auto_uid_number_search_base\". " -#~ "Please specify it before proceeding." -#~ msgstr "" -#~ "Você especificou o \"auto_uid_number_mechanism\" como \"busca\" na sua " -#~ "configuração para o servidor %s, mas você não especificou o " -#~ "\"auto_uid_number_search_base\". Por favor especifique-o antes de continuar." - -#~ msgid "" -#~ "You specified an invalid value for auto_uid_number_mechanism (\"%s\") " -#~ " in your configration. Only \"uidpool\" and " -#~ "\"search\" are valid. Please correct this " -#~ "problem." -#~ msgstr "" -#~ "Você especificou um valor inválido para auto_uid_number_mechanism (\"%s\") " -#~ "na sua configuração. Somente \"uidpool\" e \"busca\" são válidos. Por favor " -#~ "corrija este problema." - -#~ msgid "" -#~ "Error: You have an error in your config file. The only three allowed values " -#~ " for auth_type in the $servers section are " -#~ "'session', 'cookie', and 'config'. You entered '%s', " -#~ " which is not allowed. " -#~ msgstr "" -#~ "Erro: Você tem um erro no seu arquivo de configuração. Os dois únicos " -#~ "valores permitidos para auth_type na seção $servers são 'config' e 'form'. " -#~ "Você entrou '%s', que não é permitido. " - -#~ msgid "LDAP said: %s" -#~ msgstr "O servidor LDAP respondeu: %s" - -#~ msgid "Error number: %s (%s)" -#~ msgstr "Erro número: %s (%s)" - -#~ msgid "Description: %s

" -#~ msgstr "Descrição: %s

" - -#~ msgid "Error number: %s

" -#~ msgstr "Erro número: %s

" - -#~ msgid "Description: (no description available)
" -#~ msgstr "Descrição: (descrição não disponível
" - -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "" -#~ "Isto é um bug do phpLDAPadmin? Se for, por favor informe." - -#~ msgid "Unrecognized error number: " -#~ msgstr "Número do erro desconhecido: " - -#~ msgid "" -#~ "

\t\t\t
You found " -#~ "a non-fatal phpLDAPadmin bug!
Error:%s " -#~ "(%s)
File: %s line " -#~ "%s, caller %s
Versions:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "server:%s
Please check and see if this bug has been reported " -#~ "here.
If it hasnt been reported, you may report this bug by clicking " -#~ "here.

" -#~ msgstr "" -#~ "
Você encontrou um bug " -#~ "não-fatal no phpLDAPadmin!
Erro:%s " -#~ "(%s)
Arquivo:%s linha %s, " -#~ "solicitante %s
Versão:PLA: %s, PHP: " -#~ "%s, SAPI: %s
Servidor " -#~ "Web:%s
Por favor informe este bug clicando " -#~ "aqui.

" - -#~ msgid "" -#~ "Congratulations! You found a bug in phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA " -#~ "Version:%s
PHP " -#~ "Version:%s
PHP " -#~ "SAPI:%s
Web " -#~ "server:%s
\t
\t Please " -#~ "report this bug by clicking below!" -#~ msgstr "" -#~ "Parabéns! Você encontrou um bug no phpLDAPadmin.

PLA Vers&atile;o:
Erro:%s
Nível:<" -#~ "b>%s
Arquivo:%s
Linha:<" -#~ "/td>%s
Caller:%s
%s
PHP " -#~ "Vers&atile;o:%s
PHP " -#~ "SAPI:%s
Servidor " -#~ "Web:%s

Por favor informe o bug " -#~ "clicando abaixo!" - -#~ msgid "Select an LDIF file:" -#~ msgstr "Selecionar um arquivo LDIF" - -#~ msgid "Line Number:" -#~ msgstr "Linha Número:" - -#~ msgid "Line:" -#~ msgstr "Linha:" - -#~ msgid "Optional Binary Attributes" -#~ msgstr "Atributos Binários Opcionais" - -#~ msgid "Maximum file size: %s" -#~ msgstr "Tamanho máximo de arquivo: %s" - -#~ msgid "Back" -#~ msgstr "Voltar" - -#~ msgid "object" -#~ msgstr "objeto" - -#~ msgid "Delete all" -#~ msgstr "Excluir tudo" - -#~ msgid "warning" -#~ msgstr "aviso" - -#~ msgid "using template" -#~ msgstr "usando o modelo" - -#~ msgid "Redirecting..." -#~ msgstr "Redirecionando..." - -#~ msgid "here" -#~ msgstr "aqui" - -#~ msgid "Step 1 of 2: Name and ObjectClass(es)" -#~ msgstr "Passo 1 de 2: Nome e Classe(s) de Objetos" - -#~ msgid "Step 2 of 2: Specify attributes and values" -#~ msgstr "Passo 2 de 2: Especifica atributos e valores" - -#~ msgid "Relative Distinguished Name" -#~ msgstr "Nome Distinto Relativo" - -#~ msgid "RDN" -#~ msgstr "RDN" - -#~ msgid "(example: cn=MyNewPerson)" -#~ msgstr "exemplo: cn=MinhaNovaPessoa" - -#~ msgid "Could not bind to the LDAP server." -#~ msgstr "Não foi possível conectar ao servidor LDAP." - -#~ msgid "Successfully logged into server %s" -#~ msgstr "Conexão estabelecida com sucesso no sevidor %s" - -#~ msgid "%s bytes" -#~ msgstr "%s bytes" - -#~ msgid "Searching..." -#~ msgstr "Pesquisando..." - -#~ msgid "Logged out successfully from server %s" -#~ msgstr "Desconectado com sucesso do servidor %s" - -#~ msgid "Authenticate to server %s" -#~ msgstr "Autenticar no servidor %s" - -#~ msgid "Warning: This web connection is unencrypted." -#~ msgstr "Aviso: Esta conexão NÃO é criptografada." +msgid "No DN specified" +msgstr "DN não especificado" -#~ msgid "User name" -#~ msgstr "Nome de usuário" -#~ msgid "" -#~ "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do " -#~ "so. An example config file is provided in 'config/config.php.example'" -#~ msgstr "" -#~ "Você deve configurar o phpLDAPadmin. Faça isso editando o arquivo " -#~ "'config.php'. Um arquivo de exemplo é fornecido em 'config.php.example'" +msgid "You left the attribute value blank. Please go back and try again." +msgstr "Você deixou o valor do atributo vazio. Por favor retorne e tente novamente." + + +msgid "Failed to add the attribute." +msgstr "Falha ao inserir o atributo." + + +msgid "The file you chose is either empty or does not exist. Please go back and try again." +msgstr "O arquivo que você escolheu está vazio ou não existe. Por favor retorne e tente novamente." + + +msgid "Security error: The file being uploaded may be malicious." +msgstr "Erro de segurança: O arquivo que está sendo carregado pode ser malicioso." + + +msgid "Your PHP configuration has disabled file uploads. Please check php.ini before proceeding." +msgstr "Sua configuração do PHP desabilitou o upload de arquivos. Por favor verifique o php.ini antes de continuar." + + +msgid "The file you uploaded is too large. Please check php.ini, upload_max_size setting" +msgstr "O arquivo que você carregou é muito grande. Por favor verifique a configuração do upload_max_size no php.ini" + + +msgid "The file you selected was only partially uploaded, likley due to a network error." +msgstr "O arquivo que você selecionou foi carregado parcialmente, provavelmente por causa de um erro de rede." + + +msgid "Maximum file size: %s" +msgstr "Tamanho máximo de arquivo: %s" + + +msgid "Modification successful!" +msgstr "Alteração bem sucedida!" + + +msgid "Since you changed your password, you must now login again with your new password." +msgstr "Você alterou sua senha, você deve conectar novamente com a sua nova senha." + + +msgid "New Required Attributes" +msgstr "Novos Atributos Obrigatórios" + + +msgid "This action requires you to add" +msgstr "Esta ação requer que você insira" + + +msgid "new attributes" +msgstr "novos atributos" + + +msgid "Instructions: In order to add these objectClass(es) to this entry, you must specify" +msgstr "Instruções: Para poder inserir esta Classe de Objetos a este objeto, você deve especificar" + + +msgid "that this objectClass requires. You can do so in this form." +msgstr "que esta Classe de Objetos requer. Você pode fazê-lo no formulário abaixo:" + + +msgid "Add ObjectClass and Attributes" +msgstr "Inserir Classe de Objetos e Atributos" + + +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "Clique para abrir uma janela e selecionar um objeto (DN) graficamente" + + +msgid "You cannot perform updates while server is in read-only mode" +msgstr "Você não pode realizar atualizações enquanto o servidor estiver em modo somente leitura" + + +msgid "Bad server id" +msgstr "ID do servidor inválido" + + +msgid "Not enough information to login to server. Please check your configuration." +msgstr "Informações insuficientes para a conexão com o servidor. Por favor verifique sua configuração." + + +msgid "Could not connect to LDAP server." +msgstr "Não foi possível conectar com o servidor LDAP." + + +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "Não foi possível conectar em \"%s\" na porta \"%s\"" + + +msgid "Could not perform ldap_mod_add operation." +msgstr "Não foi possível executar operação ldap_mod_add." + + +msgid "Success" +msgstr "Sucesso" + + +msgid "Server: " +msgstr "Servidor: " + + +msgid "Looking in: " +msgstr "Procurando em: " + + +msgid "No DN specified in query string!" +msgstr "DN não especificado na consulta!" + + +msgid "Back Up..." +msgstr "Backup..." + + +msgid "no entries" +msgstr "nenhum objeto" + + +msgid "Could not determine base DN" +msgstr "Não foi possível determinar a base DN" + + +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "Isso pode ter acontecido por vários motivos, os mais provável são:" + + +msgid "Yes" +msgstr "Sim" + + +msgid "No" +msgstr "Não" + + +msgid "Go" +msgstr "Ir" + + +msgid "Delete" +msgstr "Excluir" + + +msgid "Back" +msgstr "Voltar" + + +msgid "object" +msgstr "objeto" + + +msgid "Delete all" +msgstr "Excluir tudo" + + +msgid "hint" +msgstr "dica" + + +msgid "bug" +msgstr "bug" + + +msgid "warning" +msgstr "aviso" + + +msgid "light" +msgstr "a palavra \"light\" de \"light bulb\"" + + +msgid "Proceed >>" +msgstr "Continuar >>" + + +msgid "Add new" +msgstr "Inserir novo" + + +msgid "value to" +msgstr "valor para" + + +msgid "Distinguished Name" +msgstr "Nome Distinto" + + +msgid "Current list of" +msgstr "Lista atual de" + + +msgid "values for attribute" +msgstr "valores para atributo" + + +msgid "Note: You will get an \"inappropriate matching\" error if you have not setup an EQUALITY rule on your LDAP server for this attribute." +msgstr "Nota: Você vai receber um erro de \"inappropriate matching\" se você não configurar uma regra de IGUALDADE no seu servidor LDAP para este atributo." + + +msgid "Enter the value you would like to add:" +msgstr "Entre com o valor que você quer inserir: " + + +msgid "Note: You may be required to enter new attributes that these objectClass(es) require" +msgstr "Nota: talvez seja solicitado que você entre com os atributos necessários para esta classe de objetos" + + +msgid "Syntax" +msgstr "Sintaxe" + + +msgid "You left the destination DN blank." +msgstr "Você deixou o DN de destino vazio." + + +msgid "The destination entry (%s) already exists." +msgstr "O objeto de destino (%s) já existe." + + +msgid "The destination container (%s) does not exist." +msgstr "O container de destino (%s) não existe." + + +msgid "The source and destination DN are the same." +msgstr "O DN de origem e destino são o mesmo." + + +msgid "Copying " +msgstr "Copiando " + + +msgid "Recursive copy progress" +msgstr "Progresso da cópia recursiva" + + +msgid "Building snapshot of tree to copy... " +msgstr "Construindo a imagem da árvore a ser copiada..." + + +msgid "Copy successful! Would you like to " +msgstr "Copiado com sucesso! Você gostaria de " + + +msgid "view the new entry" +msgstr "ver o novo objeto" + + +msgid "Failed to copy DN: " +msgstr "Falha ao copiar DN: " + + +msgid "Template" +msgstr "Modelo" + + +msgid "using template" +msgstr "usando o modelo" + + +msgid "Go to %s" +msgstr "Ir para %s" + + +msgid "Copy " +msgstr "Copiar " + + +msgid "to a new object" +msgstr "para um novo objeto" + + +msgid "Destination DN" +msgstr "DN de destino" + + +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "O DN completo do novo objeto que será criado a partir da cópia da origem" + + +msgid "Destination Server" +msgstr "Servidor de destino" + + +msgid "Hint: Copying between different servers only works if there are no schema violations" +msgstr "Dica: Copiando entre diferentes servidores somente funciona se não houver violação de esquema" + + +msgid "Recursively copy all children of this object as well." +msgstr "Copia recursivamente todos filhos deste objeto também." + + +msgid "Recursive copy" +msgstr "Cópia Recursiva" + + +msgid "Filter" +msgstr "Filtro" + + +msgid "When performing a recursive copy, only copy those entries which match this filter" +msgstr "Quando executar uma cópia recursiva, copiar somente os objetos que atendem a este filtro" + + +msgid "You left the value blank for required attribute (%s)." +msgstr "Você deixou vazio o valor de um atributo obrigatório (%s)." + + +msgid "Redirecting..." +msgstr "Redirecionando..." + + +msgid "here" +msgstr "aqui" + + +msgid "Could not add the object to the LDAP server." +msgstr "Não foi possível inserir o objeto no servidor LDAP." + + +msgid "Create Object" +msgstr "Criar Objeto" + + +msgid "Choose a template" +msgstr "Escolher um modelo" + + +msgid "Select a template for the creation process" +msgstr "Selecionar um modelo para o processo de criação" + + +msgid "You left the RDN field blank." +msgstr "Você deixou o campo RDN vazio." + + +msgid "The container you specified (%s) does not exist. Please try again." +msgstr "O container que você especificou (%s) não existe. Por favor tente novamente." + + +msgid "You did not select any ObjectClasses for this object. Please go back and do so." +msgstr "Você não selecionou nenhuma Classe de Objetos para este objeto. Por favor volte e faça isso." + + +msgid "Hint: You must choose exactly one structural objectClass (shown in bold above)" +msgstr "Dica: Você deve escolher pelo menos uma Classe de Objetos estrutural" + + +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "Passo 1 de 2: Nome e Classe(s) de Objetos" + + +msgid "Step 2 of 2: Specify attributes and values" +msgstr "Passo 2 de 2: Especifica atributos e valores" + + +msgid "Relative Distinguished Name" +msgstr "Nome Distinto Relativo" + + +msgid "RDN" +msgstr "RDN" + + +msgid "(example: cn=MyNewPerson)" +msgstr "exemplo: cn=MinhaNovaPessoa" + + +msgid "Container" +msgstr "Container" + + +msgid "You have not logged into the selected server yet, so you cannot perform searches on it." +msgstr "Você não conectou no servidor selecionado ainda, assim, você não pode realizar buscas nele." + + +msgid "Click here to go to the login form" +msgstr "Clique aqui para conectar-se ao servidor" + + +msgid "Unrecognized criteria option: " +msgstr "Critério desconhecido: " + + +msgid "If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting." +msgstr "Se você quer inserir seus próprios critérios à lista. Certifique-se de editar o search.php para tratá-los. Saindo." + + +msgid "Entries found: " +msgstr "Objetos encontrados: " + + +msgid "Filter performed: " +msgstr "Filtro aplicado: " + + +msgid "Search performed by phpLDAPadmin in" +msgstr "Busca realizada pelo phpLDAPadmin em" + + +msgid "seconds" +msgstr "segundos" + + +msgid "The scope in which to search" +msgstr "O escopo no qual procurar" + + +msgid "Sub (entire subtree)" +msgstr "Sub (toda a sub-árvore)" + + +msgid "One (one level beneath base)" +msgstr "One (um nível de profundidade)" + + +msgid "Base (base dn only)" +msgstr "Base (apenas a base dn)" + + +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "Filtro de busca LDAP padrão. Exemplo: (&(sn=Silva)(givenname=Pedro))" + + +msgid "Search Filter" +msgstr "Filtro de Busca" + + +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "A lista de atributos que devem ser mostrados nos resultados (separados por vírgula)" + + +msgid "starts with" +msgstr "inicia com" + + +msgid "ends with" +msgstr "termina com" + + +msgid "sounds like" +msgstr "é semelhante a" + + +msgid "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE." +msgstr "Não foi possível obter informação LDAP do servidor" + + +msgid "Server info for: " +msgstr "Informações do servidor: " + + +msgid "Server reports the following information about itself" +msgstr "O servidor forneceu a seguinte informação sobre si mesmo" + + +msgid "This server has nothing to report." +msgstr "Este servidor não tem nada a informar" + + +msgid "update_array is malformed. This might be a phpLDAPadmin bug. Please report it." +msgstr "update_array danificado. Isto pode ser um bug do phpLDAPadmin. Por favor informe." + + +msgid "Could not perform ldap_modify operation." +msgstr "Não foi possível realizar a operação ldap_modify." + + +msgid "Do you want to make these changes?" +msgstr "Você confirma estas alterações?" + + +msgid "Attribute" +msgstr "Atributo" + + +msgid "Old Value" +msgstr "Valor Antigo" + + +msgid "New Value" +msgstr "Valor Novo" + + +msgid "[attribute deleted]" +msgstr "[atributo excluído]" + + +msgid "Commit" +msgstr "Confirmar" + + +msgid "Cancel" +msgstr "Cancelar" + + +msgid "You made no changes" +msgstr "Você não fez alterações" + + +msgid "Use the menu to the left to navigate" +msgstr "Use o menu à esquerda para navegar" + + +msgid "Credits" +msgstr "Créditos" + + +msgid "ChangeLog" +msgstr "Log de Alterações" + + +msgid "Donate" +msgstr "Contribuir" + + +msgid "Unsafe file name: " +msgstr "Nome de arquivo inseguro: " + + +msgid "No such file: " +msgstr "Arquivo inexistente: " + + +msgid "You have enabled auto_uid_numbers for %s in your configuration," +" but you have not specified the auto_uid_number_mechanism. Please correct" +" this problem." +msgstr "Você habilitou auto_uid_numbers para %s na sua configuração, mas você não especificou auto_uid_number_mechanism. Por favor corrija este problema." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"uidpool\"" +" in your configuration for server %s, but you did not specify the" +" audo_uid_number_uid_pool_dn. Please specify it before proceeding." +msgstr "Você especificou o \"auto_uid_number_mechanism\" como \"uidpool\" na sua configuração para o servidor %s, mas você não especificou o audo_uid_number_uid_pool_dn. Por favor especifique-o antes de continuar." + + +msgid "It appears that the uidPool you specified in your configuration (\"%s\")" +" does not exist." +msgstr "Parece que o uidPool que você especificou na sua configuração (%s) não existe." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"search\" in your" +" configuration for server %s, but you did not specify the" +" \"auto_uid_number_search_base\". Please specify it before proceeding." +msgstr "Você especificou o \"auto_uid_number_mechanism\" como \"busca\" na sua configuração para o servidor %s, mas você não especificou o \"auto_uid_number_search_base\". Por favor especifique-o antes de continuar." + + +msgid "Unable to bind to %s with your with auto_uid credentials. Please check your configuration file." +msgstr "Problema ao conectar ao %s com as suas credenciais auto_uid. Por favor verifique seu arquivo de configuração." + + +msgid "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s" +msgstr "Sua configuração do phpLDAPadmin especifica que o auto_uid_search_base é inválido para o servidor %s" + + +msgid "You specified an invalid value for auto_uid_number_mechanism (\"%s\")" +" in your configration. Only \"uidpool\" and \"search\" are valid." +" Please correct this problem." +msgstr "Você especificou um valor inválido para auto_uid_number_mechanism (\"%s\") na sua configuração. Somente \"uidpool\" e \"busca\" são válidos. Por favor corrija este problema." + + +msgid "Error: You have an error in your config file. The only three allowed values" +" for auth_type in the $servers section are 'session', 'cookie', and 'config'. You entered '%s'," +" which is not allowed. " +msgstr "Erro: Você tem um erro no seu arquivo de configuração. Os dois únicos valores permitidos para auth_type na seção $servers são 'config' e 'form'. Você entrou '%s', que não é permitido." + + +msgid "Your PHP install does not support TLS." +msgstr "Sua instalação do PHP não suporta TLS" + + +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "Impossível iniciar TLS. Por favor verifique a configuração do servidor LDAP." + + +msgid "Could not bind anonymously to server." +msgstr "Não foi possível conectar ao servidor anonimamente." + + +msgid "Could not bind to the LDAP server." +msgstr "Não foi possível conectar ao servidor LDAP." + + +msgid "Anonymous Bind" +msgstr "Conexão anônima" + + +msgid "Bad username or password. Please try again." +msgstr "Usuário ou senha inválido. Por favor tente novamente." + + +msgid "Successfully logged into server %s" +msgstr "Conexão estabelecida com sucesso no sevidor %s" + + +msgid "Could not set cookie." +msgstr "Não foi possível criar o cookie." + + +msgid "LDAP said: %s" +msgstr "O servidor LDAP respondeu: %s" + + +msgid "Error" +msgstr "Erro" + + +msgid "browse" +msgstr "procurar" + + +msgid "Delete Photo" +msgstr "Excluir imagem" + + +msgid "Your system crypt library does not support blowfish encryption." +msgstr "Sua instalação do PHP não suporta codificação blowfish." + + +msgid "Your system crypt library does not support md5crypt encryption." +msgstr "Sua instalação do PHP não suporta codificação md5crypt." + + +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "Sua instalação do PHP não tem a função mhash(). Impossível fazer transformações SHA." + + +msgid "jpegPhoto contains errors
" +msgstr "Foto jpeg contém erros
" + + +msgid "Error number: %s (%s)" +msgstr "Erro número: %s (%s)" + + +msgid "Description: %s

" +msgstr "Descrição: %s

" + + +msgid "Error number: %s

" +msgstr "Erro número: %s

" + + +msgid "Description: (no description available)
" +msgstr "Descrição: (descrição não disponível
" + + +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "Isto é um bug do phpLDAPadmin? Se for, por favor informe." + + +msgid "Unrecognized error number: " +msgstr "Número do erro desconhecido: " + + +msgid "
" +" " +" " +" " +"
" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
Please check and see if this bug has been reported here.
If it hasnt been reported, you may report this bug by clicking here.

" +msgstr "
Você encontrou um bug não-fatal no phpLDAPadmin!
Erro:%s (%s)
Arquivo:%s linha %s, solicitante %s
Versão:PLA: %s, PHP: %s, SAPI: %s
Servidor Web:%s
Por favor informe este bug clicando aqui.

" + + +msgid "Congratulations! You found a bug in phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Please report this bug by clicking below!" +msgstr "Parabéns! Você encontrou um bug no phpLDAPadmin.

Erro:%s
Nível:%s
Arquivo:%s
Linha:%s
Caller:%s
PLA Vers&atile;o:%s
PHP Vers&atile;o:%s
PHP SAPI:%s
Servidor Web:%s

Por favor informe o bug clicando abaixo!" + + +msgid "Import LDIF File" +msgstr "Importar arquivo LDIF" + + +msgid "Select an LDIF file:" +msgstr "Selecionar um arquivo LDIF" + + +msgid "Don't stop on errors" +msgstr "Não parar quando der erro" + + +msgid "Adding..." +msgstr "Inserindo..." + + +msgid "Deleting..." +msgstr "Deletando..." + + +msgid "Renaming..." +msgstr "Renomeando..." + + +msgid "Modifying..." +msgstr "Alterando..." + + +msgid "No version found. Assuming 1." +msgstr "Nenhuma versão encontrada. Assumindo 1." + + +msgid "A valid dn line is required." +msgstr "Uma linha dn válida é obrigatória." + + +msgid "Missing uploaded file." +msgstr "Arquivo carregado perdido." + + +msgid "Uploaded LDIF file is empty." +msgstr "Arquivo LDIF carregado está vazio." + + +msgid "empty" +msgstr "vazio" + + +msgid "File" +msgstr "Arquivo" + + +msgid "%s bytes" +msgstr "%s bytes" + + +msgid "Failed" +msgstr "Falhou" + + +msgid "LDIF Parse Error" +msgstr "Erro Analisando Arquivo LDIF" + + +msgid "Could not add object:" +msgstr "Não foi possível inserir objeto:" + + +msgid "Could not rename object:" +msgstr "Não foi possível renomear objeto:" + + +msgid "Could not delete object:" +msgstr "Não foi possível excluir objeto:" + + +msgid "Could not modify object:" +msgstr "Não foi possível alterar objeto:" + + +msgid "Line Number:" +msgstr "Linha Número:" + + +msgid "Line:" +msgstr "Linha:" + + +msgid "Are you sure you want to permanently delete this object?" +msgstr "Você tem certeza que deseja excluir este objeto permanentemente?" + + +msgid "Permanently delete all children also?" +msgstr "Exluir permanentemente todos os objetos filho também?" + + +msgid "List of entries to be deleted:" +msgstr "Lista de objetos a serem deletados: " + + +msgid "DN" +msgstr "DN" + + +msgid "Export format" +msgstr "Formato para exportar" + + +msgid "Line ends" +msgstr "Fins de linha" + + +msgid "You must choose an export format." +msgstr "Você deve especificar um formato para exportar" + + +msgid "Invalid export format" +msgstr "Formato para exportação inválido" + + +msgid "No available exporter found." +msgstr "Nenhum exportador de arquivos encontrado." + + +msgid "Encountered an error while performing search." +msgstr "Erro encontrado enquanto fazia a pesquisa." + + +msgid "Showing results %s through %s." +msgstr "Mostrando resultados %s através %s." + + +msgid "Searching..." +msgstr "Pesquisando..." + + +msgid "Notice, search size limit exceeded." +msgstr "Aviso, limite da pesquisa excedido." + + +msgid "Entry" +msgstr "Objeto" + + +msgid "LDIF Export for: %s" +msgstr "Exportação LDIF para: %s" + + +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "Gerado pelo phpLDAPadmin no %s" + + +msgid "Total Entries" +msgstr "Total de objetos" + + +msgid "DSLM Export for: %s" +msgstr "Exportação DSLM para: %s" + + +msgid "You left the password blank." +msgstr "Você deixou a senha vazia." + + +msgid "No one is logged in to that server." +msgstr "Ninguém está conectado neste servidor." + + +msgid "Could not logout." +msgstr "Não foi possível desconectar." + + +msgid "Unknown auth_type: %s" +msgstr "auth_type desconhecido: %s" + + +msgid "Logged out successfully from server %s" +msgstr "Desconectado com sucesso do servidor %s" + + +msgid "Authenticate to server %s" +msgstr "Autenticar no servidor %s" + + +msgid "Warning: This web connection is unencrypted." +msgstr "Aviso: Esta conexão NÃO é criptografada." + + +msgid "You are not using 'https'. Web browser will transmit login information in clear text." +msgstr "Você não está usando 'https'. O navegador internet vai transmitir as informações de login sem criptografar." + + +msgid "Login DN" +msgstr "Login DN" + + +msgid "User name" +msgstr "Nome de usuário" + + +msgid "Password" +msgstr "Senha" + + +msgid "Authenticate" +msgstr "Autenticar" + + +msgid "Entry Chooser" +msgstr "Selecionador de objeto" + + +msgid "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do so. An example config file is provided in 'config/config.php.example'" +msgstr "Você deve configurar o phpLDAPadmin. Faça isso editando o arquivo 'config.php'. Um arquivo de exemplo é fornecido em 'config.php.example'" + + +msgid "Deletes not allowed in read only mode." +msgstr "Exclusões não permitidas no modo somente leitura." + + +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "Erro chamando mass_delete.php. Faltando mass_delete nas variáveis POST." + + +msgid "mass_delete POST var is not an array." +msgstr "a variável POST mass_delete não é um conjunto" + + +msgid "Mass deletion is not enabled. Please enable it in config.php before proceeding." +msgstr "Exclusão em massa não habilitada. Por favor habilite-a no arquivo config.php antes de continuar" + + +msgid "Mass Deleting" +msgstr "Exclusão em massa" + + +msgid "Deletion progress on server \"%s\"" +msgstr "Progresso da exclusão no servidor \"%s\"" + + +msgid "Malformed mass_delete array." +msgstr "Conjunto mass_delete danificado." + + +msgid "You did not select any entries to delete." +msgstr "Você não selecionou nenhum objeto para excluir" + + +msgid "Deleting %s" +msgstr "Excluindo %s" + + +msgid "%s of %s entries failed to be deleted." +msgstr "%s de %s objetos falharam na exclusão." + + +msgid "All entries deleted successfully." +msgstr "Todos objetos foram excluídos com sucesso." + + +msgid "Confirm mass delete of %s entries on server %s" +msgstr "Confirme exclusão em massa de %s objetos no servidor %s" + + +msgid "Yes, delete!" +msgstr "Sim, excluir!" + + +msgid "You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)" +msgstr "Você não pode renomear um objeto que tem objetos filhos (isto é, a operação de renomear não é permitida em objetos não-folha)" + + +msgid "You did not change the RDN" +msgstr "Você não alterou o RDN" + + +msgid "Invalid RDN value" +msgstr "Valor RDN inválido" + + +msgid "Could not rename the entry" +msgstr "Não foi possível renomear o objeto" + -#~ msgid "Deletes not allowed in read only mode." -#~ msgstr "Exclusões não permitidas no modo somente leitura." diff --git a/locale/ru_RU/LC_MESSAGES/messages.mo b/locale/ru_RU/LC_MESSAGES/messages.mo index 739185fb69cee91365f74c88f2a7ca22e6f7fc36..5e715f406587f4dbe2f187368cc5b7188b429274 100644 GIT binary patch literal 45388 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 Lc<~7`>CyiK3k>9Y literal 60325 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 z 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\n" "Language-Team: phpLDAPadmin \n" +"Last-Translator: Sergey Saukh\n" +"POT-Creation-Date: 2005-11-29 17:45+0100\n" +"PO-Revision-Date: 2005-11-29 18:22+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-03-20 08:04+0000\n" -"X-Generator: Launchpad (build Unknown)\n" -#: ../../htdocs/mass_delete.php:86 -#, php-format -msgid "%s of %s entries failed to be deleted." -msgstr "Не удалось удалить %s из %s записей." -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "(" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../lib/HTMLTree.php:486 -msgid "(Session timed out. Automatically logged out.)" -msgstr "(Сеанс работы завершен из-за превышения времени неактивности.)" -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr ")" - -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" -msgstr ":" - -#: ../../lib/search_form_advanced.php:103 -msgid "A list of attributes to display in the results (comma-separated)" -msgstr "" -"Список атрибутов, которые отображать в результатах (разделенные запятыми)" - -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "При запросе к uidpool_dn не удалось получить корректный uidNumber." - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 -msgid "A random password was generated for you" -msgstr "Для вас сгенерирован случайный пароль" - -#: ../../lib/ldif_functions.php:532 -msgid "A valid deleteoldrdn attribute should be specified" -msgstr "Требуется указать атрибут deleteoldrdn" - -#: ../../lib/ldif_functions.php:243 -msgid "A valid dn line is required." -msgstr "Требуется правильная строка с dn." - -#: ../../lib/ldif_functions.php:538 -msgid "A valid newrdn attribute should be specified" -msgstr "Требуется указать атрибут newrdn" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 -msgid "Add" -msgstr "Добавить" - -#: ../../htdocs/add_value_form.php:182 -msgid "Add New Value" -msgstr "Добавить новое значение" - -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 -msgid "Add ObjectClass and Attributes" -msgstr "Добавить объект и атрибуты" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "Добавить все" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 -#, php-format -msgid "Add an additional value to attribute '%s'" -msgstr "Добавить дополнительное значение для атрибута '%s'" - -#: ../../htdocs/add_value_form.php:93 -msgid "Add new" -msgstr "Добавить новый" - -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 -msgid "Add new ObjectClass" -msgstr "Добавить новый объект" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 -msgid "Add new attribute" -msgstr "Добавить новый атрибут" - -#: ../../htdocs/add_attr_form.php:114 -msgid "Add new binary attribute" -msgstr "Добавить новый бинарный атрибут" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "Добавить выделенные" - -#: ../../htdocs/ldif_import.php:62 -msgid "Adding..." -msgstr "Добавляю..." - -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 -msgid "Advanced Search Form" -msgstr "Расширенная форма поиска" - -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "Синоним для" - -#: ../../htdocs/schema.php:110 -msgid "Aliases" -msgstr "Алиасы" - -#: ../../htdocs/mass_delete.php:88 -msgid "All entries deleted successfully." -msgstr "Все записи успешно удалены." - -#: ../../lib/EntryWriter1.php:825 -#, php-format -msgid "An attribute (%s) was modified and is highlighted below." -msgstr "Атрибут (%s) был изменен и теперь подсвечен ниже." - -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "У каждого объекта должен быть ровно один структурный класс." - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "Анонимно" - -#: ../../htdocs/login.php:164 -msgid "Anonymous Bind" -msgstr "Анонимная привязка" - -#: ../../htdocs/delete_form.php:102 -msgid "Are you sure you want to permanently delete this object?" -msgstr "Вы уверены, что хотите окончательно удалить этот объект?" - -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 -msgid "Attribute" -msgstr "Атрибут" - -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "Типы атрибутов" - -#: ../../lib/ldif_functions.php:455 -msgid "Attribute is not valid" -msgstr "Недопустимый атрибут" - -#: ../../lib/ldif_functions.php:375 -msgid "Attribute not well formed" -msgstr "Недопустимое значение атрибута" - -#: ../../htdocs/login_form.php:63 -msgid "Authenticate" -msgstr "Авторизация" - -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "Аутентификация на сервере" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "Доступные пользователи" - -#: ../../htdocs/entry_chooser.php:65 -msgid "Back Up..." -msgstr "Назад..." - -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 -msgid "Bad username or password. Please try again." -msgstr "Неверное имя или пароль. Попробуйте еще раз." - -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 -msgid "Base (base dn only)" -msgstr "База (только базовый dn)" - -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 -msgid "Base DN" -msgstr "Базовый DN" - -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 -msgid "Binary value" -msgstr "Бинарное значение" - -#: ../../htdocs/copy.php:61 -msgid "Building snapshot of tree to copy... " -msgstr "Создаю копию состояния дерева для копирования... " - -#: ../../lib/export_functions.php:38 -msgid "CSV (Spreadsheet)" -msgstr "CSV (Таблица)" - -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "Не могу найти указанный класс" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 -msgid "Cancel" -msgstr "Отменить" - -#: ../../htdocs/compare.php:343 -msgid "Check password" -msgstr "Проверка пароля" - -#: ../../lib/EntryWriter1.php:2427 -msgid "Check password..." -msgstr "Проверка пароля..." - -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "Проверка паролей" - -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "Потомки" - -#: ../../lib/functions.php:3223 -msgid "Click to popup a dialog to select a date graphically" -msgstr "Нажмите для графического выбора даты" - -#: ../../lib/functions.php:2239 -msgid "Click to popup a dialog to select an entry (DN) graphically" -msgstr "Нажмите чтобы вызвать диалог для визуального выбора записи(DN)" - -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 -#, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "Нажмите, чтобы посмотреть определение схемы для атрибута '%s'" - -#: ../../htdocs/schema.php:106 -msgid "Collective" -msgstr "Совместный" - -#: ../../htdocs/update_confirm.php:303 -msgid "Commit" -msgstr "Подтвердить" - -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 -msgid "Compare" -msgstr "Сравнить" - -#: ../../htdocs/compare_form.php:21 -msgid "Compare another DN with" -msgstr "Сравнить другой DN с" - -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 -msgid "Compare this DN with another" -msgstr "Сравнить этот DN с другим" - -#: ../../lib/EntryWriter1.php:776 -msgid "Compare with another entry" -msgstr "Сравнить с другой записью" - -#: ../../htdocs/compare.php:42 -msgid "Comparing the following DNs" -msgstr "Сравниваем следующие DN" - -#: ../../htdocs/export_form.php:84 -msgid "Compress" -msgstr "Сжать" - -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "Кеш конфигурации устарел" - -#: ../../htdocs/mass_delete.php:92 -#, php-format -msgid "Confirm mass delete of %s entries on server %s" -msgstr "Подтвердите массовое удаление %s записей на сервере %s" - -#: ../../lib/EntryWriter1.php:327 -msgid "Container" -msgstr "Контейнер" - -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "Контейнер и класс(ы)" - -#: ../../lib/ldif_functions.php:525 -msgid "Container is null" -msgstr "Контейнер пуст" - -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 -msgid "Copy" -msgstr "Копировать" - -#: ../../htdocs/copy_form.php:96 -msgid "Copy " -msgstr "Копировать " - -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "Копирование записи" - -#: ../../lib/EntryWriter1.php:741 -msgid "Copy or move this entry" -msgstr "Скопировать эту запись" - -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "Копирование прошло успешно!" - -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "" -"Копировать этот объект в другой контейнер, с другим DN, или на другой сервер" - -#: ../../htdocs/copy.php:57 -msgid "Copying " -msgstr "Сопирую " - -#: ../../htdocs/ldif_import.php:70 -msgid "Could not add object:" -msgstr "Не удалось добавить объект:" - -#: ../../htdocs/create.php:133 -msgid "Could not add the object to the LDAP server." -msgstr "Не удалось добавить объект на LDAP-сервер." - -#: ../../htdocs/login.php:137 -msgid "Could not bind anonymously to server." -msgstr "Не могу анонимно привязаться к серверу." - -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "Не удалось привязаться к LDAP серверу (%s)." - -#: ../../lib/server_functions.php:347 -#, php-format -msgid "Could not connect to \"%s\" on port \"%s\"" -msgstr "Не могу подключиться к \"%s\" на порт \"%s\"" - -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "Не удалось соединиться с LDAP сервером" - -#: ../../htdocs/ldif_import.php:71 -msgid "Could not delete object:" -msgstr "Не удалось удалить объект:" - -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 -#, php-format -msgid "Could not delete the entry: %s" -msgstr "Не удалось удалить запись: %s" - -#: ../../htdocs/entry_chooser.php:101 -msgid "Could not determine base DN" -msgstr "Не могу выяснить основной DN" - -#: ../../lib/HTMLTree.php:82 -msgid "Could not determine the root of your LDAP tree." -msgstr "Не могу найти корень вашего LDAP дерева." - -#: ../../lib/functions.php:1849 -#, php-format -msgid "Could not fetch jpeg data from LDAP server for attribute %s." -msgstr "Не удалось получить фото jpeg с LDAP сервера для атрибута %s." - -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 -msgid "Could not logout." -msgstr "Не удалось выйти." - -#: ../../htdocs/ldif_import.php:74 -msgid "Could not modify object:" -msgstr "Не удалось изменить объект:" - -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 -msgid "Could not perform ldap_mod_add operation." -msgstr "Не удалось произвести операцию ldap_mod_add." - -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 -msgid "Could not perform ldap_modify operation." -msgstr "Не удалось произвести операцию ldap_modify." - -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 -msgid "Could not rename object:" -msgstr "Не удалось переименовать объект:" - -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 -msgid "Could not rename the entry" -msgstr "Не удалось переименовать запись" - -#: ../../htdocs/schema.php:31 -msgid "Could not retrieve schema from" -msgstr "Не могу получить схему из" - -#: ../../htdocs/login.php:152 -msgid "Could not set cookie." -msgstr "Не удалось установить cookie." - -#: ../../lib/server_functions.php:265 -msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "Не могу запустить TLS. Проверьте конфигурацию Вашего LDAP-сервера." - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "" -"Не удается записать в папку %s, заданную переменной $jpeg_temp_dir. " -"Проверьте, что у вебсервера есть право записи в нее." - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "Создать" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "Создание объекта" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "Создать объект" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "Создать потомка" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "Создать новую запись в" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "Создать еще одну запись" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "Создать ?" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "Создать новый" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "Успешно!" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "Создатели" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "Текущий список" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "Вырезать" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "DN" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "DN недоступен" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "DSLM экспорт для: %s" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "По умолчанию" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "Удалить" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "Удалить %s" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "Удалить отмеченные записи" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "Удалить DN" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "Удалить фото" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "Удалить после копирования (перемещения):" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "Удалить все %s объектов" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "Удалить фото" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "Удалить эту запись" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "Удаление" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "Удаляю %s" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "Удаляю..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "Прогресс удаления на сервере \"%s\"" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "Описание" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "Конечный DN" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "Конечный сервер" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "Сервер назначения доступен только для чтения" - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "Показать созданную запись" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "Отличительное имя" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "Подтверждаете удаление %s %s %s" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "Вы действительно хотите произвести эти изменения?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "Документация" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "Не останавливаться на ошибках" - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "Спонсировать" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "Произошла ошибка во время поиска." - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "Введите значение, которое Вы хотите добавить:" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "Найдено записей" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "Запись" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "Запись %s и ее потомки успешно удалены." - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "Выбор записи" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "Запись создана" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "Равенство" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "Ошибка" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "" -"Ошибка вызова mass_delete.php. Отсутствует mass_delete в POST переменных." - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "Код ошибки" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "Номер ошибки" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" -"Ошибка в конфигурационном файле. Для переменной auth_type допустимы " -"следующие три значения: 'session', 'cookie', 'config' и 'http'. Вы указали " -"'%s', что является недопустимым." - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "Экспорт" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "Экспортировать" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "Формат экспорта" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "Экспортировать ветвь" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "Не удалось" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "Не удалось добавить атрибут." - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "Не удалось скопировать DN: " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "Не удалось удалить запись %s" - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "Файл" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "Фильтр" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "Фильтр" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "Согласно конфигурации, считаем, что равно MAY" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "Формат" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "Функция" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "Сгенерировано phpLDAPadmin %s" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "Общая ошибка" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "Перейти" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "Вернуться" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "Перейти к" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "Перейти к %s" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "Состав группы" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "Справка" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "Скрыть" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "Скрыть служебные атрибуты" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "Подсказка" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "" -"Подсказка: Копирование между различными серверами сработает, если между ними " -"нет противоречий в схемах" - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "" -"Подсказка: Чтобы удалить атрибут - очистите текстовое поле и нажмите " -"\"сохранить\"" - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "" -"Подсказка: Чтобы просмотреть схему атрибута - нажмите на его названии." - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "Подсказка: Вы должны выбрать как минимум один структурный класс" - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "Домой" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please report it." -msgstr "Если да, пожалуйста, отправьте отчет." - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "" -"Если Вы хотите добавить свои критерии поиска в список, отредактируйте " -"search.php, чтобы они поддерживались. Выхожу." - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "Иморт LDIF файла" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "Импортировать записи из LDIF-файла" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "Для того, чтобы добавить данные класс(ы), необходимо заполнить" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "Отключение по неактивности в %s" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "в том числе служебные" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "Неправильная версия PHP" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "Заимствован из" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "Заимствует из" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "Указания" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "Недостаточные права доступа." - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "Неверное значение RDN" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "Неверный формат экспорта" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "Это баг в pdpLDAPadmin ?" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "" -"Похоже что ваш LDAP сервер сконфигурирован не показывать свой корень." - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" -"Похоже, что sasl_authz_id_regex \"%s\".\" содержит некорректное выражение в " -"формате PCRE." - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "Перейти к правилам соответствия" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "Перейти к типам атрибутов" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "Перейти к объекту" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "Перейти к определению этого объекта" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "Сообщение LDAP" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "LDIF экспорт для: %s" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "Ошибка интерпретации LDIF файла" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "импорт LDIF" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "строка" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "Номер строки" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "Конец строки" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "Список записей на удаление:" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "Вошли под именем" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "Войти" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "Login DN" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "Вход..." - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "Выйти" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "Выйти из этого сервера" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "Контекст" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "Почта" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "Убедитесь, что фильтр (выше) захватывает всех потомков." - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "Неправильно сформированный массив mass_delete." - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "Массовое удаление" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "" -"Массовое удаление не разрешено. Испровьте это в config.php перед тем как " -"продолжить." - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "OID правила соответствия" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "Правила соответствия" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "Максимальная длина" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "Максимальный размер файла" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "Недостаточно памяти." - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "В XML файле пропущено %s." - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "Пропущены атрибуты для атрибута changetype записи." - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "Недостающие атрибуты для записи" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "Недостающая обязательная конфигурация" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "Недостающее обязательное расширение" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "Отсутствует загруженный файл." - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "Изменения успешно произведены!" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "Редактирование группы" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "Редактировать состав '%s'" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "Изменяю..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "Имя" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "Новые обязательные атрибуты" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "Новое значение" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "Нет" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "Не указан DN" - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "Не указан файл с данными LDIF. Попробуйте еще раз." - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "Без шаблона" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "Значение не указано" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "Не указано имя атрибута." - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "Нет доступных экспортеров." - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "Кеш уже пуст." - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "Атрибуту не присвоено значение" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "Нет внутренних атрибутов" - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "На этом сервере сейчас никого нет." - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "Не определено ни одного запроса в config.php." - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "Нет такой записи: %s" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "Нет такого файла" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "Схема не содержит элемента: \"%s\"" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "Не найдено номера версии. Предполагаю 1." - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "" -"Недостаточно информации чтобы подключиться к серверу. Проверьте Вашу " -"конфигурацию." - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "Заметьте" - -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "" -"Внимание: Вам может потребоваться ввести новые атрибуты, которые требует " -"этот объект" - -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" -"Внимание: это потенциально очень опасно и вы делаете это на свой собственный " -"риск. Эта операция не может быть отменена. Примите во внимание алиасы, " -"ссылки и другие вещи, которые могум вызвать проблемы." - -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "Внимание, превышен размер поиска." - -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" - -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 -msgid "ObjectClasses" -msgstr "Объекты" - -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" -"В конфигурации phpLDAPadmin классы объектов помечены только для чтения." - -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "Классы объектов из XML не поддерживаются LDAP сервером." - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "Устаревший" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "Старое значение" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "Один (один уровень под базовым)" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "Необязательные атрибуты" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "" -"Или, в крайнем случае, ваш LDAP сервер не предоставил эту информацию." - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "Или скопируйте данные LDIF непосредственно сюда" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "Сортировать по" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "Сортировка" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "Безопасный режим (Safe Mode) PHP" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "Страница %d" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "Родитель для" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "Пароль" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "Проверка пароля" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "Не совпадают!" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "Совпадают!" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "Также окончательно удалить всех потомков?" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "Вдруг это известная ошибка ? Перейдите по ссылке, чтобы проверить" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "" -"Пожалуйста, установите переменную $jpeg_temp_dir в config.php в папку, " -"доступную по записи" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "Укажите это в config.php" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "Предопределенные поиски" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 -msgid "Proceed >>" -msgstr "Далее >>" - -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "Далее >>" - -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "" -"Очистить закешированные данные в phpLDAPadmin, включая схемы сервера." - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "Очистка кеша" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "Очистить кеш" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "Высвобождено %s байтов." - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "Действительно удалить значение" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "Рекурсивное копирование" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "Прогресс рекурсивного копирования" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "Прогресс рекурсивного удаления" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "Рекурсивно скопировать и всех потомков этого объекта." - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "Обновить" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "Обновить все открытые контейнеры для" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "Обновить эту запись" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "Удалить выделенные" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "Переименовать" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "Переименовать запись" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "Успешно переименовано!" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "Переименовываю..." - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "Сообщить об ошибке" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "У меня идея!" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "Обязательные атрибуты" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "Обязательный атрибут для класса(ов) %s" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "Запрашиваю DN" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "Сохранить" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "Сохранить изменения" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "Сохранить дамп этого объекта" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "Сохранить дамп этого объекта и всех его потомков" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "Сохранить как файл" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "Сохранить изменения" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "Схема для сервера" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "Поиск" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "Фильтр поиска" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "Область поиска" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "Искать записи, которые:" - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "Недостаточно прав для выполнения поиска" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "" -"Ошибка безопасности: Файл который Вы загрузили может иметь вредоносный код." - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "Выбрать предопределенный поиск" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "Выберите шаблон для создания объекта" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "Укажите шаблон для редактирования записи" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "Выберите файл, содержащий данные в формате LDIF" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "Сервер" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "Выбор сервера" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "Информация о сервере: " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "Сервер сообщил о себе следующую информацию" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "Показать" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "Показать атрибуты" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "Показать кеш" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "Показать служебные атрибуты" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "Показываю результаты с %s по %s." - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 msgid "Simple Search Form" msgstr "Простая форма поиска" -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "" -"Т.к. Вы изменили свой пароль, Вы должны войти заново, используя свой новый " -"пароль." -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "Однозначный" +msgid "Advanced Search Form" +msgstr "Расширенная форма поиска" -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "Пропустить" -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "Некоторые атрибуты (%s) были изменены и теперь подсвечены ниже." +msgid "Server" +msgstr "Сервер" -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "" -"Извините, вам не разрешено использовать phpLDAPadmin с данным сервером LDAP." -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "Исходный DN" +msgid "Search for entries whose" +msgstr "Искать записи, которые:" -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "Укажите атрибуты и значения" -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "" -"Стандартный фильтр поиска LDAP. Пример: (&(sn=Smith)(givenname=David))" +msgid "Base DN" +msgstr "Базовый DN" -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "Шаг %s из %s" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "Все (все поддерево)" - -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "Правило подстроки" - -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "Успешно" - -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "Успешно удален DN " - -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "Успешный вход на сервер" - -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "Переключить запись" - -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "Синтакс" - -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "OID синтаксиса" - -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "Синтаксисы" - -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "Шаблон" - -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "Ошибка значения шаблона" - -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "Шаблоны" - -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "Атрибут Rdn (%s) не существует." - -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "" -"Этот атрибут \"%s\" установлен \"только для чтения\" в конфигурации " -"phpLDAPadmin." - -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "Атрибут (%s) доступен только для чтения." - -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "Имя атрибута должно быть add, delete или replace" - -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "Имя атрибута должно быть newsuperior" - -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "Изменяемый атрибут не соответствует указанному в атрибуте %s." - -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "Контейнер (%s) является листом." - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "Указанного вами контейнера (%s) не существует." - -#: ../../htdocs/create.php:39 -#, php-format -msgid "The container you specified (%s) does not exist. Please try again." -msgstr "" -"Контейнер, который Вы указали (%s) не существует. Попробуйте еще раз." - -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "Удаление класса(ов)" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "Конечный контейнер (%s) не существует." - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "Конечная запись (%s) уже сужествует." - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "Записи (%s) не существует." - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "Запись (%s) доступна только по чтению." - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "Запись некорректна" - -#: ../../htdocs/add_attr.php:56 -msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "" -"Файл, который Вы выбрали или не существует или пуст. Пожалуйста вернитесь и " -"попробуйте еще раз." - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "" -"Файл, который Вы выбрали был загружен только частично, вероятно из-за ошибки " -"в сети." - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "" -"Файл, который Вы загрузили слишком велик. Проверьте php.ini, опцию " -"upload_max_size" - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" -msgstr "Полный DN новой записи будет создан при копировании исходной" - -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" +msgid "Search Scope" msgstr "Область поиска" -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "Ничего не найдено по вашему запросу." -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "Этот сервер не полностью поддерживает LDAP протокол." +msgid "Show Attributtes" +msgstr "Показать атрибуты" -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "Исходный и конечный DN одинаковы." -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "Значение атрибута url должно начинаться с file:///" +msgid "Search" +msgstr "Поиск" -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "Всего" -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "Для uidpool найдено более одного dn, пожалуйста, исправьте фильтр" +msgid "Select a predefined search" +msgstr "Выбрать предопределенный поиск" -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "Это действие требует добавить" -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "Этот атрибут установлен администратором только для чтения" +msgid "Predefined Searches" +msgstr "Предопределенные поиски" -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "Согласно конфигурации этот атрибут установлен в значение MAY" -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "Обязательный атрибут" +msgid "No queries have been defined in config.php." +msgstr "Не определено ни одного запроса в config.php." -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "Данный атрибут необходим для RDN." -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "Данная базовая запись не существует." +msgid "Request feature" +msgstr "Запросить фичу" -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "Это могло случится по нескольким причинам, наиболее вероятные это:" -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "Записи не существует." +msgid "Report a bug" +msgstr "Сообщить об ошибке" -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "Эта запись не имеет атрибутов" -#: ../../htdocs/delete_form.php:46 -#, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "Эта запись является корнем дерева содержащего %s записей." - -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "Этот класс является структурным и его нельзя удалить." - -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "Это не является корректным DN." - -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "Этот объект устарел." - -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "Данная операция запрещена конфигурацией" - -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "Этому серверу нечего о себе сообщить." - -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "Указанный шаблон нельзя применять для этого контейнера." - -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "Соединение с сервером нешифровано" - -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "С" - -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "Чтобы войти заново, перейдите по ссылке:" - -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "Всего записей" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "Корзина" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "Тип" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "URL" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "Не найден dn для uidpool, пожалуйста, исправьте фильтр" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 -#, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "" -"Не могу привязаться к %s с Вашими auto_uid данными. Проверьте Ваш " -"файл конфигурации." - -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "" -"Не удалось привязаться к %s с учетными данными with unique_attrs. " -"Проверьте конфигурацию." - -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "Удалить нельзя, поскольку сервер в режиме READ-ONLY." - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "Не удалось открыть файл" - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "Не удалось прочитать файл" - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "Неизвестный auth_type: %s" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "Неизвестный тип uidpool." - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "Нераспознанный критерий поиска: " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "Неизвестный номер ошибки" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "Неизвестный формат результатов поиска: %s." - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "Небезопасное имя файла" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "Загруженный LDIF файл пуст." - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "Использование" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "Используйте меню слева для навигации" - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "Использован атрибутами" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "Используется объектами" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "Изменение пользователем" - -#: ../../lib/EntryWriter1.php:797 -#, php-format -msgid "View %s children" -msgstr "Просмотреть %s потомков" - -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "Просмотреть 1 потомка" - -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "Просмотреть схему для" - -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "Просмотреть информацию с сервера" - -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "Посмотреть схему для данного класса" - -#: ../../lib/EntryWriter1.php:819 -msgid "Viewing entry in read-only mode." -msgstr "Просмотр записи в режиме \"только для чтения\"." - -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" -"ВНИМАНИЕ: Нельзя одновременно применять сжатие в PHP и в phpLDAPadmin. " -"Пожалуйста, либо отключите zlib.output_compression или установите $config-" -">custom->appearance['compress']=false" - -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "Внимание" - -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "" -"Если производите рекурсивное копирование - копируйте только те записи, " -"которые соответствуют этому фильтру" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "Да" - -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "Да, удалить!" - -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "" -"Вы не используете 'https'. Web-браузер передает авторизационные данные " -"открытым текстом." - -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 -msgid "You cannot perform updates while server is in read-only mode" -msgstr "" -"Вы не можете производить обновления до тех пор, пока сервер находится в " -"режиме \"только для чтения\"" - -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "" -"Вы не можете переименовать запись, которая имеет потомков (т.е., операция " -"переименования не допустима для дерева)" - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "Вы не изменили RDN" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "" -"Вы не выбрали ни одного класса для этого объекта. Вернитесь и сделайте это." - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "Вы не выбрали ни одной записи для удаления." - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "Вы не указали класс для данного объекта." - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "Некритичная ошибка phpLDAPadmin!" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" -"Включен безопасный режим (safe mode) на PHP. В этом режиме PLA может " -"работать непредсказуемо." - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "" -"Вы еще на вошли на выбранный сервер, поэтому Вы не можете производить на нем " -"поиск." - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "Вы указали два разных пароля" - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "Вы оставили RDN поле пустым." - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 -msgid "You left the attribute value blank. Please go back and try again." -msgstr "" -"Вы оставили значение атрибута пустым. Вернитесь и попробуйте еще раз." - -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "Вы не заполнили конечный DN." - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "Вы не ввели пароль." - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "Вы оставили пустым значение для требуемого атрибута (%s)." - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "Вы не сделали никаких изменений" - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "Вы должны выбрать формат экспорта." - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "" -"Надо либо загрузить файл, либо скопировать содержимое LDIF в область ввода." - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "Вы должны указать DN" - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "Чтобы добавить атрибут %s, требуется один из следующих классов." - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" -"Вам надо сконфигурировать %s. Для этого отредактируйте файл \"%s\". Пример " -"файла конфигурации называется \"%s.example\"." - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" -"Указано неверное значение для auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tв файле конфигурации. Допустимы значения \"uidpool\" и \"search\".\n" -"\t\t\t\tПожалуйста, устраните данную проблему." - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" -"Для параметра \"auto_uid_number_mechanism\" выбрано значение \"search\" в\n" -"\t\t\t\t\t\tфайле конфигурации для сервера %s, но не указан параметр\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Пожалуйста, устраните данную " -"проблему." - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "Вас попросят подтвердить Ваше решение" - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "" -"Ваша конфигурация PHP запрещает загрузку файлов. Проверьте php.ini перед тем " -"как продолжить." - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" -"Ваша установленная версия PHP не имеет функцию mhash(). Не могу создать хэши " -"SHA." - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "Ваша установленная версия PHP не поддерживает TLS." - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" -"PHP не содержит функции ldap_sasl_bind(). Чтобы добавить поддержку данной " -"функции на PHP 5.x пересоберите его с ключом --with-ldap-sasl." - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "" -"Ваша конфигурация PHP не содержит параметра file_uploads = ON. Разрешите " -"загрузку файлов в PHP." - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "Ваш сеанс завершен по истечении" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" -"Попытка добавить %s (%s) к
%s
ОТКЛОНЕНА. Данные " -"атрибут/значение принадлежат другой записи.

Вы можете поискать эту запись." - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" -"Попытка добавить %s (%s) к
%s
ОТКЛОНЕНА. Данные " -"атрибут/значение принадлежат другой записи.

Вы можете поискать эту запись." - -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "Конфигурация была автоматически обновлена." - -#: ../../lib/functions.php:1172 -#, php-format -msgid "" -"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " -"for server %s" -msgstr "" -"В Вашей конфигурации phpLDAPadmin указано неверное значение для " -"auto_uid_search_base для сервера %s" - -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "Ваша версия PHP не поддерживает шифрование blowfish." - -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 -msgid "Your system crypt library does not support extended DES encryption." -msgstr "Ваша библиотека crypt не поддерживает раширенное шифрование DES." - -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 -msgid "Your system crypt library does not support md5crypt encryption." -msgstr "Ваша версия PHP не поддерживает шифрование md5crypt." - -#: ../../lib/template_functions.php:984 -#, php-format -msgid "" -"Your template calls php.Function for a default value, however (%s) is NOT " -"available in the POST FORM variables. The following variables are available " -"[%s]." -msgstr "" -"Ваш шаблон обращается к php. Однако функция (%s) не содержится среди POST " -"переменных формы. Доступны следующие переменные [%s]." - -#: ../../lib/EntryReader.php:262 -#, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "Ваш шаблон содержит неизвестную функцию post (%s)." - -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "В шаблоне не хватает переменной (%s)" - -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "Ваша версия PHP неправильно обработала запрос." - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[атрибут удален]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "[значение не указано]" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "добавить атрибут" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "добавить значение атрибута" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "добавить значение" - -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "расширенный поиск" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "синоним" - -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "просмотр" - -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "ошибка" - -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "байтов" - -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "вызов из" - -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "символ" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "символы" - -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "подтвердить" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "копировать запись" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "создать запись" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "удалить атрибут" - -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "удалить запись" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "массовое удаление записей" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "загрузить значение" - -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "пуст" - -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "записи" - -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "запись" - -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "экспорт" - -#: ../../htdocs/search.php:273 -msgid "export results" -msgstr "экспортировать" - -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "ложь" - -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "создан." - -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "подсказка" - -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "импорт" - -#: ../../lib/HTMLTree.php:248 -msgid "info" -msgstr "инфо" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "синоним для" - -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "jpegPhoto содержит ошибки
" - -#: ../../lib/functions.php:351 -msgid "light" -msgstr "свет" - -#: ../../lib/functions.php:132 -msgid "line" -msgstr "строка" - -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "войти" - -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "выйти" - -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "POST переменная mass_delete не в массиве." - -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "пользователей в группе" - -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "минут неактивности. Сеанс завершен автоматически." - -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "изменить значения атрибутов" - -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "релактировать состав группы" - -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "новая" - -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "новые атрибуты" - -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "нет описания" - -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "описание отсутствует" - -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "нет записей" - -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "для этой записи нет доступных новых атрибутов" - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "для этой записи нет доступных новых бинарных атрибутов" - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "нет" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "пусто, удалите значение" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "неприменимый" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "не указано" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" -"phpLDAPadmin может рекурсивно удалить эту запись и %s его потомков. Ниже " -"список всех записей, которые будут удалены. Вы действительно хотите это " -"сделать?" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "Или phpLDAPadmin не знает как получить схему для вашего сервера." - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "логотип phpLDAPadmin" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "поиск по шаблону" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "очистить" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "только для чтения" - -#: ../../lib/HTMLTree.php:240 -msgid "refresh" -msgstr "обновить" - -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "обновить сервер" - -#: ../../lib/EntryWriter1.php:1829 -msgid "rename" -msgstr "переименовать" - -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "переименовать запись" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "обязательный" - -#: ../../lib/HTMLTree.php:224 msgid "schema" msgstr "схема" -#: ../../lib/HTMLTree.php:232 + msgid "search" msgstr "поиск" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "секунд" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "укажите атрибут rdn" +msgid "create" +msgstr "создать" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "простой поиск" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "шаг %s из %s" +msgid "info" +msgstr "инфо" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "структурный" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "которые являются обязательными." +msgid "import" +msgstr "импорт" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "эти" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "этот" +msgid "refresh" +msgstr "обновить" + + +msgid "logout" +msgstr "выйти" + + +msgid "Create new entry here" +msgstr "Создать новый" + + +msgid "View schema for" +msgstr "Просмотреть схему для" + + +msgid "Refresh all expanded containers for" +msgstr "Обновить все открытые контейнеры для" + + +msgid "Create a new entry on" +msgstr "Создать новую запись на" + + +msgid "new" +msgstr "новая" + + +msgid "View server-supplied information" +msgstr "Просмотреть информацию с сервера" + + +msgid "Import entries from an LDIF file" +msgstr "Импортировать записи из LDIF-файла" + + +msgid "Logout of this server" +msgstr "Выйти из этого сервера" + + +msgid "Logged in as: " +msgstr "Вошли как: " + + +msgid "read only" +msgstr "только для чтения" + + +msgid "This attribute has been flagged as read only by the phpLDAPadmin administrator" +msgstr "Этот атрибут установлен администратором только для чтения" + + +msgid "Could not determine the root of your LDAP tree." +msgstr "Не могу найти корень вашего LDAP дерева." + + +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "Похоже что ваш LDAP сервер сконфигурирован не показывать свой корень." + + +msgid "Please specify it in config.php" +msgstr "Укажите это в config.php" + + +msgid "Create a new entry in" +msgstr "Создать новую запись в" + + +msgid "Login..." +msgstr "Вход..." + + +msgid "login" +msgstr "войти" + + +msgid "Delete this entry" +msgstr "Удалить эту запись" + + +msgid "You will be prompted to confirm this decision" +msgstr "Вас попросят подтвердить Ваше решение" + + +msgid "Copy or move this entry" +msgstr "Скопировать эту запись" + + +msgid "Copy this object to another location, a new DN, or another server" +msgstr "Скопировать этот объект в другое место, в новый DN или на другой сервер" + + +msgid "Export" +msgstr "Экспорт" + + +msgid "Save a dump of this object" +msgstr "Сохранить дамп этого объекта" + + +msgid "Save a dump of this object and all of its children" +msgstr "Сохранить дамп этого объекта и всех его потомков" + + +msgid "Export subtree" +msgstr "Экспортировать ветвь" + + +msgid "Create a child entry" +msgstr "Создать потомка" + + +msgid "Rename Entry" +msgstr "Переименовать запись" + + +msgid "Rename" +msgstr "Переименовать" + + +msgid "rename" +msgstr "ПереОЌеМПвать" + + +msgid "Add" +msgstr "Добавить" + + +msgid "View" +msgstr "Просмотреть" + + +msgid "View 1 child" +msgstr "Просмотреть 1 потомка" + + +msgid "View %s children" +msgstr "Просмотреть %s потомков" + + +msgid "Add new attribute" +msgstr "Добавить новый атрибут" + + +msgid "Add new ObjectClass" +msgstr "Добавить новый объект" + + +msgid "Hide internal attributes" +msgstr "Скрыть внутренние атрибуты" + + +msgid "Show internal attributes" +msgstr "Показать внутренние атрибуты" + + +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "Нажмите чтобы просмотреть описание схемы для атрибута '%s'" + + +msgid "none" +msgstr "нет" + + +msgid "No internal attributes" +msgstr "Нет внутренних атрибутов" + + +msgid "This entry has no attributes" +msgstr "Эта запись не имеет атрибутов" + + +msgid "Save Changes" +msgstr "Сохранить изменения" + + +msgid "add value" +msgstr "добавить значение" + + +msgid "Add an additional value to attribute '%s'" +msgstr "Добавить дополнительное значение для атрибута '%s'" + + +msgid "Refresh" +msgstr "Обновить" + + +msgid "Refresh this entry" +msgstr "Обновить эту запись" + + +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "Подсказка: Чтобы удалить атрибут - очистите текстовое поле и нажмите \"сохранить\"" + + +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "Подсказка: Чтобы просмотреть схему атрибута - нажмите на его названии." + + +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "Некоторые атрибуты (%s) были модифицированы и теперь подсвечены ниже." + + +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "Атрибут (%s) был модифицирован и теперь подсвечен ниже." + + +msgid "Viewing entry in read-only mode." +msgstr "Просмотр записи в режиме \"только для чтения\"." + + +msgid "no new attributes available for this entry" +msgstr "для этой записи нет доступных новых атрибутов" + + +msgid "no new binary attributes available for this entry" +msgstr "для этой записи нет доступных новых бинарных атрибутов" + + +msgid "Binary value" +msgstr "Бинарное значение" + + +msgid "Add new binary attribute" +msgstr "Добавить новый бинарный атрибут" + + +msgid "Note: '%s' is an alias for '%s'" +msgstr "Алиас для %s" + + +msgid "download value" +msgstr "загрузить значение" + + +msgid "delete attribute" +msgstr "удалить атрибут" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "в новый объект" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 msgid "true" -msgstr "истина" +msgstr "правда" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" -"uidpool_dn не найден. Проверьте, указан ли данный параметр в файле " -"конфигурации" -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "" -"неправильно сформирован update_array. Возможно это ошибка phpLDAPadmin. " -"Сообщите о ней." +msgid "false" +msgstr "ложь" -#: ../../htdocs/add_value_form.php:93 -msgid "value to" -msgstr "значение для" -#: ../../htdocs/add_value_form.php:112 -msgid "values for attribute" -msgstr "значений атрибутов" +msgid "none, remove value" +msgstr "пусто, удалите значение" + + +msgid "Really delete attribute" +msgstr "Действительно удалить значение" + + +msgid "Add New Value" +msgstr "Добавить новое значение" + + +msgid "The server does not fully support the LDAP protocol." +msgstr "Этот сервер не полностью поддерживает LDAP протокол." + + +msgid "Your version of PHP does not correctly perform the query." +msgstr "Ваша версия PHP неправильно обработала запрос." + + +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "Или phpLDAPadmin не знает как получить схему для вашего сервера." + + +msgid "Jump to an objectClass" +msgstr "Перейти к объекту" + + +msgid "Jump to an attribute type" +msgstr "Перейти к типам атрибутов" + + +msgid "Jump to a matching rule" +msgstr "Перейти к правилам соответствия" + + +msgid "Schema for server" +msgstr "Схема для сервера" + + +msgid "Required Attributes" +msgstr "Требуемые атрибуты" + + +msgid "Optional Attributes" +msgstr "Необязательные атрибуты" + + +msgid "Optional Binary Attributes" +msgstr "Необязательные бинарные атрибуты" + + +msgid "OID" +msgstr "OID" + + +msgid "Aliases" +msgstr "Алиасы" + + +msgid "Description" +msgstr "Описание" + + +msgid "no description" +msgstr "нет описания" + + +msgid "Name" +msgstr "Имя" + + +msgid "Equality" +msgstr "Равенство" + + +msgid "This objectClass is obsolete." +msgstr "Этот объект устарел." + + +msgid "Inherits from" +msgstr "Заимствует из" + + +msgid "Inherited from" +msgstr "Заимствован из" + + +msgid "Parent to" +msgstr "Родитель для" + + +msgid "Jump to this objectClass definition" +msgstr "Перейти к определению этого объекта" + + +msgid "Matching Rule OID" +msgstr "OID правила соответствия" + + +msgid "Syntax OID" +msgstr "OID синтаксиса" + + +msgid "not applicable" +msgstr "неприменимый" + + +msgid "not specified" +msgstr "не указано" + + +msgid "character" +msgstr "символ" + + +msgid "characters" +msgstr "символы" + + +msgid "Used by objectClasses" +msgstr "Используется объектами" + + +msgid "Used by Attributes" +msgstr "Использован атрибутами" + + +msgid "Maximum Length" +msgstr "Максимальная длина" + + +msgid "Syntaxes" +msgstr "Синтаксисы" + + +msgid "Matching Rules" +msgstr "Правила соответствия" + + +msgid "Obsolete" +msgstr "Устаревший" + + +msgid "Ordering" +msgstr "Сортировка" + + +msgid "Substring Rule" +msgstr "Правило подстроки" + + +msgid "Single Valued" +msgstr "Однозначный" + + +msgid "Collective" +msgstr "Совместный" + + +msgid "User Modification" +msgstr "Изменение пользователем" + + +msgid "Usage" +msgstr "Использование" + + +msgid "Could not retrieve schema from" +msgstr "Не могу получить схему из" + + +msgid "Type" +msgstr "Тип" + + +msgid "Entry %s deleted successfully." +msgstr "Запись %s успешно удалена." + + +msgid "You must specify a DN" +msgstr "Вы должны указать DN" + + +msgid "Could not delete the entry: %s" +msgstr "Не удалось удалить запись: %s" + + +msgid "No such entry: %s" +msgstr "Нет такой записи: %s" + + +msgid "Delete %s" +msgstr "Удалить %s" + + +msgid "Permanently delete all children also?" +msgstr "Также окончательно удалить всех потомков?" + + +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "Эта запись является корнем дерева содержащего %s записей." + -#: ../../htdocs/delete_form.php:48 msgid "view entries" msgstr "просмотреть записи" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "посмотреть схему" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "посмотреть информацию о сервере" +msgid "phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?" +msgstr "phpLDAPadmin может рекурсивно удалить эту запись и %s его потомков. Ниже список всех записей, которые будут удалены. Вы действительно хотите это сделать?" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "приведет к удалению атрибута(ов)" -#: ../../htdocs/compare_form.php:29 -msgid "with " -msgstr "с " +msgid "Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems." +msgstr "Внимание: это потенциально очень опасно и вы делаете это на свой собственный риск. Эта операция не может быть отменена. Примите во внимание алиасы, ссылки и другие вещи, которые могум вызвать проблемы." -#~ msgid "equals" -#~ msgstr "равны" -#~ msgid "contains" -#~ msgstr "содержат" +msgid "Delete all %s objects" +msgstr "Удалить все %s объектов" -#~ msgid "create" -#~ msgstr "создать" -#~ msgid "Create a new entry on" -#~ msgstr "Создать новую запись на" +msgid "Recursive delete progress" +msgstr "Прогресс рекурсивного удаления" -#~ msgid "Logged in as: " -#~ msgstr "Вошли как: " -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "" -#~ "Скопировать этот объект в другое место, в новый DN или на другой сервер" +msgid "Entry %s and sub-tree deleted successfully." +msgstr "Запись %s и ее потомки успешно удалены." -#~ msgid "View" -#~ msgstr "Просмотреть" -#~ msgid "Click to view the schema defintion for attribute type '%s'" -#~ msgstr "Нажмите чтобы просмотреть описание схемы для атрибута '%s'" +msgid "Failed to delete entry %s" +msgstr "Не удалось удалить запись %s" -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "Алиас для %s" -#~ msgid "Entry %s deleted successfully." -#~ msgstr "Запись %s успешно удалена." +msgid "List of entries to be deleted:" +msgstr "Список записей на удаление:" -#~ msgid "" -#~ "Instructions: In order to add these objectClass(es) to this entry, you must " -#~ "specify" -#~ msgstr "" -#~ "Инструкция: Чтобы добавить этот объект к этой записи, Вы должны указать" -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "что требует этот объект. Вы можете это сделать в этой форме." +msgid "Are you sure you want to permanently delete this object?" +msgstr "Вы уверены, что хотите окончательно удалить этот объект?" -#~ msgid "Bad server id" -#~ msgstr "Неправильный id сервера" -#~ msgid "Could not connect to LDAP server." -#~ msgstr "Не могу подключиться к LDAP-серверу." - -#~ msgid "Server: " -#~ msgstr "Сервер: " - -#~ msgid "Looking in: " -#~ msgstr "Ищу в: " - -#~ msgid "No DN specified in query string!" -#~ msgstr "Не указан DN в строке запроса!" - -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "Внимание: Вы получите ошибку \"неподходящее соответствие\", если Вы " -#~ "выставили правило \"равенство\"(EQUALITY) на Вашем LDAP-сервере для этого " -#~ "атрибута." - -#~ msgid "Copy successful! Would you like to " -#~ msgstr "Копирование прошло успешно! Вы хотите " - -#~ msgid "view the new entry" -#~ msgstr "просмотреть новую запись" - -#~ msgid "Choose a template" -#~ msgstr "Выберите шаблон" - -#~ msgid "Click here to go to the login form" -#~ msgstr "Нажмите здесь чтобы перейти на форму входа на сервер" - -#~ msgid "Entries found: " -#~ msgstr "Найдено записей: " - -#~ msgid "Filter performed: " -#~ msgstr "Применен фильтр: " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "phpLDAPadmin произвел поиск за" - -#~ msgid "starts with" -#~ msgstr "начинаются с" - -#~ msgid "ends with" -#~ msgstr "заканчиваются на" - -#~ msgid "sounds like" -#~ msgstr "похожи на" - -#~ msgid "" -#~ "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP " -#~ "or perhaps your LDAP server has access control specified that prevents LDAP " -#~ "clients from accessing the RootDSE." -#~ msgstr "Не могу получить LDAP-информацию с сервера" - -#~ msgid "ChangeLog" -#~ msgstr "Список изменений" - -#~ msgid "Unsafe file name: " -#~ msgstr "Небезопастное имя файла: " - -#~ msgid "No such file: " -#~ msgstr "Нет такого файла: " - -#~ msgid "" -#~ "You have enabled auto_uid_numbers for %s in your configuration, " -#~ " but you have not specified the " -#~ "auto_uid_number_mechanism. Please correct " -#~ "this problem." -#~ msgstr "" -#~ "Вы разрешили auto_uid_numbers для %s в Вашей конфигурации, " -#~ " но Вы не указали auto_uid_number_mechanism. Пожалуйста " -#~ "исправьте эту проблему." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool\" " -#~ " in your configuration for server %s, but you did not " -#~ "specify the audo_uid_number_uid_pool_dn. Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "Вы указали \"auto_uid_number_mechanism\" как \"uidpool\" " -#~ " в Вашей конфигурации для сервера %s, но не указали " -#~ " audo_uid_number_uid_pool_dn. Исправьте это перед тем как " -#~ "продолжить." - -#~ msgid "" -#~ "It appears that the uidPool you specified in your configuration (\"%s\") " -#~ " does not exist." -#~ msgstr "" -#~ "Похоже что uidPool, который Вы указали в Вашей конфигурации (\"%s\") " -#~ " не существует." - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"search\" in your " -#~ " configuration for server %s, but you did not " -#~ "specify the \"auto_uid_number_search_base\". " -#~ "Please specify it before proceeding." -#~ msgstr "" -#~ "Вы указали \"auto_uid_number_mechanism\" как \"search\" в Вашей кофигурации " -#~ " для сервера %s, но не указали " -#~ " \"auto_uid_number_search_base\". Исправьте это перед тем " -#~ "как продолжить." - -#~ msgid "" -#~ "You specified an invalid value for auto_uid_number_mechanism (\"%s\") " -#~ " in your configration. Only \"uidpool\" and " -#~ "\"search\" are valid. Please correct this " -#~ "problem." -#~ msgstr "" -#~ "Вы указали неверное значение для auto_uid_number_mechanism (\"%s\") " -#~ " в Вашей конфигурации. Возможны только \"uidpool\" и " -#~ "\"search\". Пожалуйста исправьте эту " -#~ "проблему." - -#~ msgid "" -#~ "Error: You have an error in your config file. The only three allowed values " -#~ " for auth_type in the $servers section are " -#~ "'session', 'cookie', and 'config'. You entered '%s', " -#~ " which is not allowed. " -#~ msgstr "" -#~ "Ошибка: В Вашем конфигурационном файле ошибка. Единственные три допустимых " -#~ "значения для auth_type в секции $servers -" -#~ " 'session', 'cookie', и 'config'. Вы ввели '%s', " -#~ " что недопустимо. " - -#~ msgid "LDAP said: %s" -#~ msgstr "LDAP ответил: %s" - -#~ msgid "Error number: %s (%s)" -#~ msgstr "Номер ошибки: %s (%s)" - -#~ msgid "Description: %s

" -#~ msgstr "Описание: %s

" - -#~ msgid "Error number: %s

" -#~ msgstr "Номер ошибки: %s

" - -#~ msgid "Description: (no description available)
" -#~ msgstr "Описание: (нет описания)
" - -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "" -#~ "Если это ошибка phpLDAPadmin - пожалуйста, сообщите о ней." - -#~ msgid "Unrecognized error number: " -#~ msgstr "Нераспознанная ошибка: " - -#~ msgid "" -#~ "

\t\t\t
You found " -#~ "a non-fatal phpLDAPadmin bug!
Error:%s " -#~ "(%s)
File: %s line " -#~ "%s, caller %s
Versions:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "server:%s
Please check and see if this bug has been reported " -#~ "here.
If it hasnt been reported, you may report this bug by clicking " -#~ "here.

" -#~ msgstr "" -#~ "
Вы нашли " -#~ "нефатальную ошибку " -#~ "phpLDAPadmin!
Ошибка:%s " -#~ "(%s)
Файл: %s строка " -#~ "%s, вызвано %s
Версии:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "сервер:%s
Сообщите об этой ошибке нажав " -#~ "здесь.

" - -#~ msgid "" -#~ "Congratulations! You found a bug in phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA " -#~ "Version:%s
PHP " -#~ "Version:%s
PHP " -#~ "SAPI:%s
Web " -#~ "server:%s
\t
\t Please " -#~ "report this bug by clicking below!" -#~ msgstr "" -#~ "Поздравляем! Вы нашли ошибку в phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Ошибка:%s
Уровень:%s
Файл:%s
Строка:%s
Вызвано:%s
PLA " -#~ "Версия:%s
PHP " -#~ "Версия:%s
PHP " -#~ "SAPI:%s
Web " -#~ "сервер:%s
\t
\t " -#~ "Сообщите об этой ошибке нажав ниже!" - -#~ msgid "Select an LDIF file:" -#~ msgstr "Выберите LDIF файл:" - -#~ msgid "Line Number:" -#~ msgstr "Номер строки:" - -#~ msgid "Line:" -#~ msgstr "Строка:" - -#~ msgid "Optional Binary Attributes" -#~ msgstr "Необязательные бинарные атрибуты" - -#~ msgid "Maximum file size: %s" -#~ msgstr "Максимальный размер файла: %s" - -#~ msgid "Back" -#~ msgstr "Назад" - -#~ msgid "object" -#~ msgstr "объект" - -#~ msgid "Delete all" -#~ msgstr "Удалить все" - -#~ msgid "warning" -#~ msgstr "предупреждение" - -#~ msgid "using template" -#~ msgstr "использую шаблон" - -#~ msgid "Redirecting..." -#~ msgstr "Переназначаю..." - -#~ msgid "here" -#~ msgstr "сюда" - -#~ msgid "Step 1 of 2: Name and ObjectClass(es)" -#~ msgstr "Шаг 1 из 2: Имя и класс(ы) объекта" - -#~ msgid "Step 2 of 2: Specify attributes and values" -#~ msgstr "Шаг 2 из 2: Определение атрибутов и значений" - -#~ msgid "Relative Distinguished Name" -#~ msgstr "Относительное оттличительное имя" - -#~ msgid "RDN" -#~ msgstr "RDN" - -#~ msgid "(example: cn=MyNewPerson)" -#~ msgstr "(пример: cn=MyNewPerson)" - -#~ msgid "Could not bind to the LDAP server." -#~ msgstr "Не удалось привязаться к LDAP-серверу." - -#~ msgid "Successfully logged into server %s" -#~ msgstr "Успешно вошли на сервер %s" - -#~ msgid "%s bytes" -#~ msgstr "%s байт" - -#~ msgid "Searching..." -#~ msgstr "Поиск..." - -#~ msgid "Logged out successfully from server %s" -#~ msgstr "Успешно вышли с сервера %s" - -#~ msgid "Authenticate to server %s" -#~ msgstr "Авторизация на сервере %s" - -#~ msgid "Warning: This web connection is unencrypted." -#~ msgstr "Предупреждение: Это web-соединение нешифровано." +msgid "DN" +msgstr "DN" -#~ msgid "User name" -#~ msgstr "Имя пользователя" -#~ msgid "" -#~ "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do " -#~ "so. An example config file is provided in 'config/config.php.example'" -#~ msgstr "" -#~ "Вам надо сконфигурировать phpLDAPadmin. Отредактируйте файл 'config.php'. " -#~ "Примерный файл настроек - 'config.php.example'" +msgid "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin configuration." +msgstr "Этот атрибут \"%s\" установлен \"только для чтения\" в конфигурации phpLDAPadmin." + + +msgid "No attribute name specified." +msgstr "Не указано имя атрибута." + + +msgid "No DN specified" +msgstr "Не указан DN" + + +msgid "You left the attribute value blank. Please go back and try again." +msgstr "Вы оставили значение атрибута пустым. Вернитесь и попробуйте еще раз." + + +msgid "Failed to add the attribute." +msgstr "Не удалось добавить атрибут." + + +msgid "The file you chose is either empty or does not exist. Please go back and try again." +msgstr "Файл, который Вы выбрали или не существует или пуст. Пожалуйста вернитесь и попробуйте еще раз." + + +msgid "Security error: The file being uploaded may be malicious." +msgstr "Ошибка безопасности: Файл который Вы загрузили может иметь вредоносный код." + + +msgid "Your PHP configuration has disabled file uploads. Please check php.ini before proceeding." +msgstr "Ваша конфигурация PHP запрещает загрузку файлов. Проверьте php.ini перед тем как продолжить." + + +msgid "The file you uploaded is too large. Please check php.ini, upload_max_size setting" +msgstr "Файл, который Вы загрузили слишком велик. Проверьте php.ini, опцию upload_max_size" + + +msgid "The file you selected was only partially uploaded, likley due to a network error." +msgstr "Файл, который Вы выбрали был загружен только частично, вероятно из-за ошибки в сети." + + +msgid "Maximum file size: %s" +msgstr "Максимальный размер файла: %s" + + +msgid "Modification successful!" +msgstr "Изменения успешно произведены!" + + +msgid "Since you changed your password, you must now login again with your new password." +msgstr "Т.к. Вы изменили свой пароль, Вы должны войти заново, используя свой новый пароль." + + +msgid "New Required Attributes" +msgstr "Новые требуемые атрибуты" + + +msgid "This action requires you to add" +msgstr "Это действие требует добавить" + + +msgid "new attributes" +msgstr "новые атрибуты" + + +msgid "Instructions: In order to add these objectClass(es) to this entry, you must specify" +msgstr "Инструкция: Чтобы добавить этот объект к этой записи, Вы должны указать" + + +msgid "that this objectClass requires. You can do so in this form." +msgstr "что требует этот объект. Вы можете это сделать в этой форме." + + +msgid "Add ObjectClass and Attributes" +msgstr "Добавить объект и атрибуты" + + +msgid "ObjectClasses" +msgstr "Объекты" + + +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "Нажмите чтобы вызвать диалог для визуального выбора записи(DN)" + + +msgid "You cannot perform updates while server is in read-only mode" +msgstr "Вы не можете производить обновления до тех пор, пока сервер находится в режиме \"только для чтения\"" + + +msgid "Bad server id" +msgstr "Неправильный id сервера" + + +msgid "Not enough information to login to server. Please check your configuration." +msgstr "Недостаточно информации чтобы подключиться к серверу. Проверьте Вашу конфигурацию." + + +msgid "Could not connect to LDAP server." +msgstr "Не могу подключиться к LDAP-серверу." + + +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "Не могу подключиться к \"%s\" на порт \"%s\"" + + +msgid "Could not perform ldap_mod_add operation." +msgstr "Не удалось произвести операцию ldap_mod_add." + + +msgid "Success" +msgstr "Успешно" + + +msgid "Server: " +msgstr "Сервер: " + + +msgid "Looking in: " +msgstr "Ищу в: " + + +msgid "No DN specified in query string!" +msgstr "Не указан DN в строке запроса!" + + +msgid "Back Up..." +msgstr "Back Up..." + + +msgid "no entries" +msgstr "нет записей" + + +msgid "Could not determine base DN" +msgstr "Не могу выяснить основной DN" + + +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "Это могло случится по нескольким причинам, наиболее вероятные это:" + + +msgid "Yes" +msgstr "Да" + + +msgid "No" +msgstr "Нет" + + +msgid "Go" +msgstr "Перейти" + + +msgid "Delete" +msgstr "Удалить" + + +msgid "Back" +msgstr "Назад" + + +msgid "object" +msgstr "объект" + + +msgid "Delete all" +msgstr "Удалить все" + + +msgid "hint" +msgstr "подсказка" + + +msgid "bug" +msgstr "ошибка" + + +msgid "warning" +msgstr "предупреждение" + + +msgid "light" +msgstr "свет" + + +msgid "Proceed >>" +msgstr "Далее >>" + + +msgid "Add new" +msgstr "Добавить новый" + + +msgid "value to" +msgstr "значение для" + + +msgid "Distinguished Name" +msgstr "Отличительное имя" + + +msgid "Current list of" +msgstr "Текущий список" + + +msgid "values for attribute" +msgstr "значений атрибутов" + + +msgid "Note: You will get an \"inappropriate matching\" error if you have not setup an EQUALITY rule on your LDAP server for this attribute." +msgstr "Внимание: Вы получите ошибку \"неподходящее соответствие\", если Вы выставили правило \"равенство\"(EQUALITY) на Вашем LDAP-сервере для этого атрибута." + + +msgid "Enter the value you would like to add:" +msgstr "Введите значение, которое Вы хотите добавить:" + + +msgid "Note: You may be required to enter new attributes that these objectClass(es) require" +msgstr "Внимание: Вам может потребоваться ввести новые атрибуты, которые требует этот объект" + + +msgid "Syntax" +msgstr "Синтакс" + + +msgid "You left the destination DN blank." +msgstr "Вы не заполнили конечный DN." + + +msgid "The destination entry (%s) already exists." +msgstr "Конечная запись (%s) уже сужествует." + + +msgid "The destination container (%s) does not exist." +msgstr "Конечный контейнер (%s) не существует." + + +msgid "The source and destination DN are the same." +msgstr "Исходный и конечный DN одинаковы." + + +msgid "Copying " +msgstr "Сопирую " + + +msgid "Recursive copy progress" +msgstr "Прогресс рекурсивного копирования" + + +msgid "Building snapshot of tree to copy... " +msgstr "Создаю копию состояния дерева для копирования... " + + +msgid "Copy successful! Would you like to " +msgstr "Копирование прошло успешно! Вы хотите " + + +msgid "view the new entry" +msgstr "просмотреть новую запись" + + +msgid "Failed to copy DN: " +msgstr "Не удалось скопировать DN: " + + +msgid "Template" +msgstr "Шаблон" + + +msgid "using template" +msgstr "использую шаблон" + + +msgid "Go to %s" +msgstr "Перейти к %s" + + +msgid "Copy " +msgstr "Копировать " + + +msgid "to a new object" +msgstr "в новый объект" + + +msgid "Destination DN" +msgstr "Конечный DN" + + +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "Полный DN новой записи будет создан при копировании исходной" + + +msgid "Destination Server" +msgstr "Конечный сервер" + + +msgid "Hint: Copying between different servers only works if there are no schema violations" +msgstr "Подсказка: Копирование между различными серверами сработает, если между ними нет противоречий в схемах" + + +msgid "Recursively copy all children of this object as well." +msgstr "Рекурсивно скопировать и всех потомков этого объекта." + + +msgid "Recursive copy" +msgstr "Рекурсивное копирование" + + +msgid "Filter" +msgstr "Фильтр" + + +msgid "When performing a recursive copy, only copy those entries which match this filter" +msgstr "Если производите рекурсивное копирование - копируйте только те записи, которые соответствуют этому фильтру" + + +msgid "You left the value blank for required attribute (%s)." +msgstr "Вы оставили пустым значение для требуемого атрибута (%s)." + + +msgid "Redirecting..." +msgstr "Переназначаю..." + + +msgid "here" +msgstr "сюда" + + +msgid "Could not add the object to the LDAP server." +msgstr "Не удалось добавить объект на LDAP-сервер." + + +msgid "Create Object" +msgstr "Создать объект" + + +msgid "Choose a template" +msgstr "Выберите шаблон" + + +msgid "Select a template for the creation process" +msgstr "Выберите шаблон для создания объекта" + + +msgid "You left the RDN field blank." +msgstr "Вы оставили RDN поле пустым." + + +msgid "The container you specified (%s) does not exist. Please try again." +msgstr "Контейнер, который Вы указали (%s) не существует. Попробуйте еще раз." + + +msgid "You did not select any ObjectClasses for this object. Please go back and do so." +msgstr "Вы не выбрали ни одного класса для этого объекта. Вернитесь и сделайте это." + + +msgid "Hint: You must choose exactly one structural objectClass (shown in bold above)" +msgstr "Подсказка: Вы должны выбрать как минимум один структурный класс" + + +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "Шаг 1 из 2: Имя и класс(ы) объекта" + + +msgid "Step 2 of 2: Specify attributes and values" +msgstr "Шаг 2 из 2: Определение атрибутов и значений" + + +msgid "Relative Distinguished Name" +msgstr "Относительное оттличительное имя" + + +msgid "RDN" +msgstr "RDN" + + +msgid "(example: cn=MyNewPerson)" +msgstr "(пример: cn=MyNewPerson)" + + +msgid "Container" +msgstr "Контейнер" + + +msgid "You have not logged into the selected server yet, so you cannot perform searches on it." +msgstr "Вы еще на вошли на выбранный сервер, поэтому Вы не можете производить на нем поиск." + + +msgid "Click here to go to the login form" +msgstr "Нажмите здесь чтобы перейти на форму входа на сервер" + + +msgid "Unrecognized criteria option: " +msgstr "Нераспознанный критерий поиска: " + + +msgid "If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting." +msgstr "Если Вы хотите добавить свои критерии поиска в список, отредактируйте search.php, чтобы они поддерживались. Выхожу." + + +msgid "Entries found: " +msgstr "Найдено записей: " + + +msgid "Filter performed: " +msgstr "Применен фильтр: " + + +msgid "Search performed by phpLDAPadmin in" +msgstr "phpLDAPadmin произвел поиск за" + + +msgid "seconds" +msgstr "секунд" + + +msgid "Sub (entire subtree)" +msgstr "Все (все поддерево)" + + +msgid "One (one level beneath base)" +msgstr "Один (один уровень под базовым)" + + +msgid "Base (base dn only)" +msgstr "База (только базовый dn)" + + +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "Стандартный фильтр поиска LDAP. Пример: (&(sn=Smith)(givenname=David))" + + +msgid "Search Filter" +msgstr "Фильтр поиска" + + +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "Список атрибутов, которые отображать в результатах (разделенные запятыми)" + + +msgid "equals" +msgstr "равны" + + +msgid "starts with" +msgstr "начинаются с" + + +msgid "contains" +msgstr "содержат" + + +msgid "ends with" +msgstr "заканчиваются на" + + +msgid "sounds like" +msgstr "похожи на" + + +msgid "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE." +msgstr "Не могу получить LDAP-информацию с сервера" + + +msgid "Server info for: " +msgstr "Информация о сервере: " + + +msgid "Server reports the following information about itself" +msgstr "Сервер сообщил о себе следующую информацию" + + +msgid "This server has nothing to report." +msgstr "Этому серверу нечего о себе сообщить." + + +msgid "update_array is malformed. This might be a phpLDAPadmin bug. Please report it." +msgstr "неправильно сформирован update_array. Возможно это ошибка phpLDAPadmin. Сообщите о ней." + + +msgid "Could not perform ldap_modify operation." +msgstr "Не удалось произвести операцию ldap_modify." + + +msgid "Do you want to make these changes?" +msgstr "Вы действительно хотите произвести эти изменения?" + + +msgid "Attribute" +msgstr "Атрибут" + + +msgid "Old Value" +msgstr "Старое значение" + + +msgid "New Value" +msgstr "Новое значение" + + +msgid "[attribute deleted]" +msgstr "[атрибут удален]" + + +msgid "Commit" +msgstr "Подтвердить" + + +msgid "Cancel" +msgstr "Отменить" + + +msgid "You made no changes" +msgstr "Вы не сделали никаких изменений" + + +msgid "Go back" +msgstr "Вернуться" + + +msgid "Use the menu to the left to navigate" +msgstr "Используйте меню слева для навигации" + + +msgid "Credits" +msgstr "Создатели" + + +msgid "ChangeLog" +msgstr "Список изменений" + + +msgid "Donate" +msgstr "Спонсировать" + + +msgid "Unsafe file name: " +msgstr "Небезопастное имя файла: " + + +msgid "No such file: " +msgstr "Нет такого файла: " + + +msgid "You have enabled auto_uid_numbers for %s in your configuration," +" but you have not specified the auto_uid_number_mechanism. Please correct" +" this problem." +msgstr "Вы разрешили auto_uid_numbers для %s в Вашей конфигурации," +" но Вы не указали auto_uid_number_mechanism. Пожалуйста исправьте эту проблему." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"uidpool\"" +" in your configuration for server %s, but you did not specify the" +" audo_uid_number_uid_pool_dn. Please specify it before proceeding." +msgstr "Вы указали \"auto_uid_number_mechanism\" как \"uidpool\"" +" в Вашей конфигурации для сервера %s, но не указали" +" audo_uid_number_uid_pool_dn. Исправьте это перед тем как продолжить." + + +msgid "It appears that the uidPool you specified in your configuration (\"%s\")" +" does not exist." +msgstr "Похоже что uidPool, который Вы указали в Вашей конфигурации (\"%s\")" +" не существует." + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"search\" in your" +" configuration for server %s, but you did not specify the" +" \"auto_uid_number_search_base\". Please specify it before proceeding." +msgstr "Вы указали \"auto_uid_number_mechanism\" как \"search\" в Вашей кофигурации" +" для сервера %s, но не указали" +" \"auto_uid_number_search_base\". Исправьте это перед тем как продолжить." + + +msgid "Unable to bind to %s with your with auto_uid credentials. Please check your configuration file." +msgstr "Не могу привязаться к %s с Вашими auto_uid данными. Проверьте Ваш файл конфигурации." + + +msgid "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s" +msgstr "В Вашей конфигурации phpLDAPadmin указано неверное значение для auto_uid_search_base для сервера %s" + + +msgid "You specified an invalid value for auto_uid_number_mechanism (\"%s\")" +" in your configration. Only \"uidpool\" and \"search\" are valid." +" Please correct this problem." +msgstr "Вы указали неверное значение для auto_uid_number_mechanism (\"%s\")" +" в Вашей конфигурации. Возможны только \"uidpool\" и \"search\"." +" Пожалуйста исправьте эту проблему." + + +msgid "Error: You have an error in your config file. The only three allowed values" +" for auth_type in the $servers section are 'session', 'cookie', and 'config'. You entered '%s'," +" which is not allowed. " +msgstr "Ошибка: В Вашем конфигурационном файле ошибка. Единственные три допустимых значения" +" для auth_type в секции $servers - 'session', 'cookie', и 'config'. Вы ввели '%s'," +" что недопустимо. " + + +msgid "Your PHP install does not support TLS." +msgstr "Ваша установленная версия PHP не поддерживает TLS." + + +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "Не могу запустить TLS. Проверьте конфигурацию Вашего LDAP-сервера." + + +msgid "Could not bind anonymously to server." +msgstr "Не могу анонимно привязаться к серверу." + + +msgid "Could not bind to the LDAP server." +msgstr "Не удалось привязаться к LDAP-серверу." + + +msgid "Anonymous Bind" +msgstr "Анонимная привязка" + + +msgid "Bad username or password. Please try again." +msgstr "Неверное имя или пароль. Попробуйте еще раз." + + +msgid "Successfully logged into server %s" +msgstr "Успешно вошли на сервер %s" + + +msgid "Could not set cookie." +msgstr "Не удалось установить cookie." + + +msgid "LDAP said: %s" +msgstr "LDAP ответил: %s" + + +msgid "Error" +msgstr "Ошибка" + + +msgid "browse" +msgstr "просмотр" + + +msgid "Delete Photo" +msgstr "Удалить фотографию" + + +msgid "Your system crypt library does not support blowfish encryption." +msgstr "Ваша установленная версия PHP не поддерживает шифрование blowfish." + + +msgid "Your system crypt library does not support md5crypt encryption." +msgstr "Ваша установленная версия PHP не поддерживает шифрование md5crypt." + + +msgid "Your PHP install does not have the mhash() function. Cannot do SHA hashes." +msgstr "Ваша установленная версия PHP не имеет функцию mhash(). Не могу создать хэши SHA." + + +msgid "jpegPhoto contains errors
" +msgstr "jpegPhoto содержит ошибки
" + + +msgid "Error number: %s (%s)" +msgstr "Номер ошибки: %s (%s)" + + +msgid "Description: %s

" +msgstr "Описание: %s

" + + +msgid "Error number: %s

" +msgstr "Номер ошибки: %s

" + + +msgid "Description: (no description available)
" +msgstr "Описание: (нет описания)
" + + +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "Если это ошибка phpLDAPadmin - пожалуйста, сообщите о ней." + + +msgid "Unrecognized error number: " +msgstr "Нераспознанная ошибка: " + + +msgid "
" +" " +" " +" " +"
" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
Please check and see if this bug has been reported here.
If it hasnt been reported, you may report this bug by clicking here.

" +msgstr "
" +"
" +" Вы нашли нефатальную ошибку phpLDAPadmin!
Ошибка:%s (%s)
Файл:%s строка %s, вызвано %s
Версии:PLA: %s, PHP: %s, SAPI: %s" +"
Web сервер:%s
" +" Сообщите об этой ошибке нажав здесь.

" + + +msgid "Congratulations! You found a bug in phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Please report this bug by clicking below!" +msgstr "Поздравляем! Вы нашли ошибку в phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Ошибка:%s
Уровень:%s
Файл:%s
Строка:%s
Вызвано:%s
PLA Версия:%s
PHP Версия:%s
PHP SAPI:%s
Web сервер:%s
" +"
" +" Сообщите об этой ошибке нажав ниже!" + + +msgid "Import LDIF File" +msgstr "Иморт LDIF файла" + + +msgid "Select an LDIF file:" +msgstr "Выберите LDIF файл:" + + +msgid "Don't stop on errors" +msgstr "Не останавливаться на ошибках" + + +msgid "Adding..." +msgstr "Добавляю..." + + +msgid "Deleting..." +msgstr "Удаляю..." + + +msgid "Renaming..." +msgstr "Переименовываю..." + + +msgid "Modifying..." +msgstr "Изменяю..." + + +msgid "No version found. Assuming 1." +msgstr "Не найдено номера версии. Предполагаю 1." + + +msgid "A valid dn line is required." +msgstr "Требуется правильная строка с dn." + + +msgid "Missing uploaded file." +msgstr "Отсутствует загруженный файл." + + +msgid "Uploaded LDIF file is empty." +msgstr "Загруженный LDIF файл пуст." + + +msgid "empty" +msgstr "пуст" + + +msgid "File" +msgstr "Файл" + + +msgid "%s bytes" +msgstr "%s байт" + + +msgid "Failed" +msgstr "Не удалось" + + +msgid "LDIF Parse Error" +msgstr "Ошибка интерпретации LDIF файла" + + +msgid "Could not add object:" +msgstr "Не удалось добавить объект:" + + +msgid "Could not rename object:" +msgstr "Не удалось переименовать объект:" + + +msgid "Could not delete object:" +msgstr "Не удалось удалить объект:" + + +msgid "Could not modify object:" +msgstr "Не удалось изменить объект:" + + +msgid "Line Number:" +msgstr "Номер строки:" + + +msgid "Line:" +msgstr "Строка:" + + +msgid "Export format" +msgstr "Формат экспорта" + + +msgid "Line ends" +msgstr "Конец строки" + + +msgid "You must choose an export format." +msgstr "Вы должны выбрать формат экспорта." + + +msgid "Invalid export format" +msgstr "Неверный формат экспорта" + + +msgid "No available exporter found." +msgstr "Нет доступных экспортеров." + + +msgid "Encountered an error while performing search." +msgstr "Произошла ошибка во время поиска." + + +msgid "Showing results %s through %s." +msgstr "Показываю результаты с %s по %s." + + +msgid "Searching..." +msgstr "Поиск..." + + +msgid "Notice, search size limit exceeded." +msgstr "Внимание, превышен размер поиска." + + +msgid "Entry" +msgstr "Запись" + + +msgid "LDIF Export for: %s" +msgstr "LDIF экспорт для: %s" + + +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "Сгенерировано phpLDAPadmin %s" + + +msgid "Total Entries" +msgstr "Всего записей" + + +msgid "DSLM Export for: %s" +msgstr "DSLM экспорт для: %s" + + +msgid "You left the password blank." +msgstr "Вы не ввели пароль." + + +msgid "No one is logged in to that server." +msgstr "На этом сервере сейчас никого нет." + + +msgid "Could not logout." +msgstr "Не удалось выйти." + + +msgid "Unknown auth_type: %s" +msgstr "Неизвестный auth_type: %s" + + +msgid "Logged out successfully from server %s" +msgstr "Успешно вышли с сервера %s" + + +msgid "Authenticate to server %s" +msgstr "Авторизация на сервере %s" + + +msgid "Warning: This web connection is unencrypted." +msgstr "Предупреждение: Это web-соединение нешифровано." + + +msgid "You are not using 'https'. Web browser will transmit login information in clear text." +msgstr "Вы не используете 'https'. Web-браузер передает авторизационные данные открытым текстом." + + +msgid "Login DN" +msgstr "Login DN" + + +msgid "User name" +msgstr "Имя пользователя" + + +msgid "Password" +msgstr "Пароль" + + +msgid "Authenticate" +msgstr "Авторизация" + + +msgid "Entry Chooser" +msgstr "Выбор записи" + + +msgid "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do so. An example config file is provided in 'config/config.php.example'" +msgstr "Вам надо сконфигурировать phpLDAPadmin. Отредактируйте файл 'config.php'. Примерный файл настроек - 'config.php.example'" + + +msgid "Deletes not allowed in read only mode." +msgstr "Удаление невозможно в режиме \"только для чтения\"." + + +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "Ошибка вызова mass_delete.php. Отсутствует mass_delete в POST переменных." + + +msgid "mass_delete POST var is not an array." +msgstr "POST переменная mass_delete не в массиве." + + +msgid "Mass deletion is not enabled. Please enable it in config.php before proceeding." +msgstr "Массовое удаление не разрешено. Испровьте это в config.php перед тем как продолжить." + + +msgid "Mass Deleting" +msgstr "Массовое удаление" + + +msgid "Deletion progress on server \"%s\"" +msgstr "Прогресс удаления на сервере \"%s\"" + + +msgid "Malformed mass_delete array." +msgstr "Неправильно сформированный массив mass_delete." + + +msgid "You did not select any entries to delete." +msgstr "Вы не выбрали ни одной записи для удаления." + + +msgid "Deleting %s" +msgstr "Удаляю %s" + + +msgid "%s of %s entries failed to be deleted." +msgstr "Не удалось удалить %s из %s записей." + + +msgid "All entries deleted successfully." +msgstr "Все записи успешно удалены." + + +msgid "Confirm mass delete of %s entries on server %s" +msgstr "Подтвердите массовое удаление %s записей на сервере %s" + + +msgid "Yes, delete!" +msgstr "Да, удалить!" + + +msgid "You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)" +msgstr "Вы не можете переименовать запись, которая имеет потомков (т.е., операция переименования не допустима для дерева)" + + +msgid "You did not change the RDN" +msgstr "Вы не изменили RDN" + + +msgid "Invalid RDN value" +msgstr "Неверное значение RDN" + + +msgid "Could not rename the entry" +msgstr "Не удалось переименовать запись" + -#~ msgid "Deletes not allowed in read only mode." -#~ msgstr "Удаление невозможно в режиме \"только для чтения\"." diff --git a/locale/zh_CN/LC_MESSAGES/messages.mo b/locale/zh_CN/LC_MESSAGES/messages.mo index 7ce600c2ab8c25547f446ff3d2d726c22b2f3dfc..c26c8b83218682e20a0668aefdf284cb2e84592c 100644 GIT binary patch literal 45880 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 diff --git a/locale/zh_CN/LC_MESSAGES/messages.po b/locale/zh_CN/LC_MESSAGES/messages.po index 17842f6..c96e75b 100644 --- a/locale/zh_CN/LC_MESSAGES/messages.po +++ b/locale/zh_CN/LC_MESSAGES/messages.po @@ -1,3109 +1,2121 @@ # : $ + + msgid "" msgstr "" "Project-Id-Version: messages\n" "Report-Msgid-Bugs-To: phpldapadmin-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2004-01-14 17:45+0200\n" -"PO-Revision-Date: 2008-09-26 14:23+0000\n" -"Last-Translator: Aron Xu \n" "Language-Team: phpLDAPadmin \n" +"Last-Translator: Alvis Zhang \n" +"POT-Creation-Date: 2005-11-29 17:45+0100\n" +"PO-Revision-Date: 2007-04-11 17:00+0800\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-11-29 23:48+0000\n" -"X-Generator: Launchpad (build Unknown)\n" -#: ../../htdocs/mass_delete.php:86 -#, php-format -msgid "%s of %s entries failed to be deleted." -msgstr "删除条目%s(属于%s)失败。" -#: ../../lib/EntryWriter1.php:960 -msgid "(" -msgstr "(" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../../lib/HTMLTree.php:486 -msgid "(Session timed out. Automatically logged out.)" -msgstr "(会话超时,自动退出。)" -#: ../../lib/EntryWriter1.php:962 -msgid ")" -msgstr ")" - -#: ../../lib/HTMLTree.php:279 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:254 ../../lib/EntryWriter1.php:261 -#: ../../lib/EntryWriter1.php:507 ../../lib/EntryWriter1.php:513 -#: ../../lib/EntryWriter1.php:520 ../../lib/EntryWriter1.php:1033 -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -#: ../../lib/EntryWriter1.php:1418 ../../lib/EntryWriter1.php:2463 -#: ../../lib/EntryWriter2.php:21 ../../lib/EntryWriter2.php:175 -#: ../../lib/page.php:200 ../../htdocs/create.php:25 -#: ../../htdocs/create.php:115 ../../htdocs/update_confirm.php:309 -#: ../../htdocs/update_confirm.php:312 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_value_form.php:112 -#: ../../htdocs/server_info.php:16 ../../htdocs/purge_cache.php:13 -#: ../../htdocs/view_jpeg_photo.php:25 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/copy.php:76 ../../htdocs/add_value.php:24 -#: ../../htdocs/search.php:120 ../../htdocs/search.php:124 -#: ../../htdocs/search.php:128 ../../htdocs/search.php:265 -#: ../../htdocs/search.php:276 ../../htdocs/search.php:295 -#: ../../htdocs/search.php:299 ../../htdocs/export.php:18 -#: ../../htdocs/ldif_import.php:19 ../../htdocs/refresh.php:17 -#: ../../htdocs/rdelete.php:21 ../../htdocs/add_attr.php:25 -msgid ":" -msgstr ":" - -#: ../../lib/search_form_advanced.php:103 -msgid "A list of attributes to display in the results (comma-separated)" -msgstr "用于显示在结果中的属性列表(以逗号隔开)" - -#: ../../lib/functions.php:1292 -msgid "A query on the uidpool_dn did return a valid uidNumber." -msgstr "" - -#: ../../lib/EntryWriter1.php:2463 ../../lib/template_functions.php:962 -msgid "A random password was generated for you" -msgstr "" - -#: ../../lib/ldif_functions.php:532 -msgid "A valid deleteoldrdn attribute should be specified" -msgstr "" - -#: ../../lib/ldif_functions.php:243 -msgid "A valid dn line is required." -msgstr "要求一个合法的dn行。" - -#: ../../lib/ldif_functions.php:538 -msgid "A valid newrdn attribute should be specified" -msgstr "" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:104 -#: ../../htdocs/add_attr_form.php:148 -msgid "Add" -msgstr "增加" - -#: ../../htdocs/add_value_form.php:182 -msgid "Add New Value" -msgstr "增加新的值" - -#: ../../htdocs/compare.php:466 ../../htdocs/add_oclass_form.php:104 -msgid "Add ObjectClass and Attributes" -msgstr "增加ObjectClass 和属性" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add all" -msgstr "添加所有" - -#: ../../lib/EntryWriter1.php:1847 ../../htdocs/compare.php:479 -#, php-format -msgid "Add an additional value to attribute '%s'" -msgstr "给属性'%s'赋一个附加的值" - -#: ../../htdocs/add_value_form.php:93 -msgid "Add new" -msgstr "新增" - -#: ../../htdocs/add_value_form.php:153 ../../htdocs/compare.php:470 -msgid "Add new ObjectClass" -msgstr "增加新的ObjectClass" - -#: ../../lib/EntryWriter1.php:789 ../../htdocs/add_attr_form.php:23 -#: ../../htdocs/add_attr_form.php:72 -msgid "Add new attribute" -msgstr "增加新的属性" - -#: ../../htdocs/add_attr_form.php:114 -msgid "Add new binary attribute" -msgstr "增加新的二进制值" - -#: ../../htdocs/modify_member_form.php:145 -msgid "Add selected" -msgstr "加入选择" - -#: ../../htdocs/ldif_import.php:62 -msgid "Adding..." -msgstr "增加..." - -#: ../../lib/search_form_predefined.php:34 -#: ../../lib/search_form_advanced.php:25 ../../lib/search_form_simple.php:35 -msgid "Advanced Search Form" -msgstr "" - -#: ../../lib/config_default.php:646 -msgid "Alias for" -msgstr "" - -#: ../../htdocs/schema.php:110 -msgid "Aliases" -msgstr "别名" - -#: ../../htdocs/mass_delete.php:88 -msgid "All entries deleted successfully." -msgstr "所有条目删除成功。" - -#: ../../lib/EntryWriter1.php:825 -#, php-format -msgid "An attribute (%s) was modified and is highlighted below." -msgstr "下面一个属性(%s) 被修改了,而且被标识为高亮" - -#: ../../htdocs/update_confirm.php:100 -msgid "An entry should have one structural objectClass." -msgstr "" - -#: ../../htdocs/login_form.php:60 -msgid "Anonymous" -msgstr "匿名" - -#: ../../htdocs/login.php:164 -msgid "Anonymous Bind" -msgstr "匿名绑定" - -#: ../../htdocs/delete_form.php:102 -msgid "Are you sure you want to permanently delete this object?" -msgstr "确认你想永久删除这个对象吗?" - -#: ../../htdocs/update_confirm.php:202 ../../htdocs/compare.php:46 -msgid "Attribute" -msgstr "属性" - -#: ../../htdocs/schema.php:42 -msgid "Attribute Types" -msgstr "属性类型" - -#: ../../lib/ldif_functions.php:455 -msgid "Attribute is not valid" -msgstr "" - -#: ../../lib/ldif_functions.php:375 -msgid "Attribute not well formed" -msgstr "" - -#: ../../htdocs/login_form.php:63 -msgid "Authenticate" -msgstr "认证" - -#: ../../lib/HTMLTree.php:95 ../../lib/server_functions.php:2442 -#: ../../htdocs/login.php:26 ../../htdocs/login.php:91 -#: ../../htdocs/login.php:116 ../../htdocs/login.php:136 -#: ../../htdocs/login.php:143 ../../htdocs/login.php:163 -#: ../../htdocs/login_form.php:19 -msgid "Authenticate to server" -msgstr "" - -#: ../../htdocs/modify_member_form.php:114 -msgid "Available members" -msgstr "" - -#: ../../htdocs/entry_chooser.php:65 -msgid "Back Up..." -msgstr "后退..." - -#: ../../lib/server_functions.php:341 ../../lib/server_functions.php:2443 -#: ../../htdocs/login.php:92 ../../htdocs/login.php:144 -msgid "Bad username or password. Please try again." -msgstr "错误的用户名或密码。 请再试试。" - -#: ../../lib/search_form_advanced.php:90 ../../htdocs/export_form.php:31 -msgid "Base (base dn only)" -msgstr "Base (仅限于base dn)" - -#: ../../lib/search_form_advanced.php:64 ../../htdocs/export_form.php:52 -#: ../../htdocs/search.php:295 -msgid "Base DN" -msgstr "基本DN" - -#: ../../lib/EntryWriter1.php:2001 ../../htdocs/compare.php:251 -msgid "Binary value" -msgstr "二进制值" - -#: ../../htdocs/copy.php:61 -msgid "Building snapshot of tree to copy... " -msgstr "正在建立用于复制的树的快照… " - -#: ../../lib/export_functions.php:38 -msgid "CSV (Spreadsheet)" -msgstr "CSV (Spreadsheet)" - -#: ../../lib/functions.php:63 -msgid "Called to load a class that cant be found" -msgstr "" - -#: ../../htdocs/update_confirm.php:304 ../../htdocs/delete_form.php:77 -#: ../../htdocs/delete_form.php:127 -msgid "Cancel" -msgstr "取消" - -#: ../../htdocs/compare.php:343 -msgid "Check password" -msgstr "" - -#: ../../lib/EntryWriter1.php:2427 -msgid "Check password..." -msgstr "正在检查密码……" - -#: ../../lib/EntryReader.php:346 ../../lib/EntryReader.php:374 -msgid "Checking passwords" -msgstr "" - -#: ../../lib/EntryWriter1.php:796 -msgid "Children" -msgstr "" - -#: ../../lib/functions.php:3223 -msgid "Click to popup a dialog to select a date graphically" -msgstr "" - -#: ../../lib/functions.php:2239 -msgid "Click to popup a dialog to select an entry (DN) graphically" -msgstr "点击弹出一个对话框来以图形方式选择一个条目(DN)" - -#: ../../lib/EntryWriter1.php:1914 ../../htdocs/server_info.php:83 -#: ../../htdocs/compare.php:145 -#, php-format -msgid "Click to view the schema definition for attribute type '%s'" -msgstr "" - -#: ../../htdocs/schema.php:106 -msgid "Collective" -msgstr "集体的" - -#: ../../htdocs/update_confirm.php:303 -msgid "Commit" -msgstr "提交" - -#: ../../lib/EntryWriter1.php:775 ../../htdocs/password_checker.php:35 -#: ../../htdocs/compare_form.php:29 ../../htdocs/compare_form.php:64 -msgid "Compare" -msgstr "比较" - -#: ../../htdocs/compare_form.php:21 -msgid "Compare another DN with" -msgstr "比较另一个DN跟" - -#: ../../htdocs/compare_form.php:41 ../../htdocs/compare_form.php:53 -msgid "Compare this DN with another" -msgstr "将该DN与另一个比较" - -#: ../../lib/EntryWriter1.php:776 -msgid "Compare with another entry" -msgstr "同另一个条目进行比较" - -#: ../../htdocs/compare.php:42 -msgid "Comparing the following DNs" -msgstr "比较紧跟着的DN" - -#: ../../htdocs/export_form.php:84 -msgid "Compress" -msgstr "压缩" - -#: ../../lib/session_functions.php:138 -msgid "Configuration cache stale." -msgstr "" - -#: ../../htdocs/mass_delete.php:92 -#, php-format -msgid "Confirm mass delete of %s entries on server %s" -msgstr "确认大量删除条目%s(在服务器%s上)" - -#: ../../lib/EntryWriter1.php:327 -msgid "Container" -msgstr "Container(容器)" - -#: ../../lib/EntryWriter1.php:256 -msgid "Container and ObjectClass(es)" -msgstr "" - -#: ../../lib/ldif_functions.php:525 -msgid "Container is null" -msgstr "" - -#: ../../htdocs/copy_form.php:45 ../../htdocs/copy_form.php:51 -msgid "Copy" -msgstr "拷贝" - -#: ../../htdocs/copy_form.php:96 -msgid "Copy " -msgstr "复制 " - -#: ../../htdocs/copy.php:88 -msgid "Copy Entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:741 -msgid "Copy or move this entry" -msgstr "复制和移动该条目" - -#: ../../htdocs/copy.php:76 ../../htdocs/copy.php:106 -msgid "Copy successful!" -msgstr "" - -#: ../../lib/EntryWriter1.php:740 -msgid "Copy this object to another location,a new DN, or another server" -msgstr "" - -#: ../../htdocs/copy.php:57 -msgid "Copying " -msgstr "正在复制 " - -#: ../../htdocs/ldif_import.php:70 -msgid "Could not add object:" -msgstr "不能增加对象:" - -#: ../../htdocs/create.php:133 -msgid "Could not add the object to the LDAP server." -msgstr "不能增加该对象到LDAP服务器。" - -#: ../../htdocs/login.php:137 -msgid "Could not bind anonymously to server." -msgstr "不能匿名绑定到服务器。" - -#: ../../lib/server_functions.php:350 -#, php-format -msgid "Could not bind to the LDAP server (%s)." -msgstr "" - -#: ../../lib/server_functions.php:347 -#, php-format -msgid "Could not connect to \"%s\" on port \"%s\"" -msgstr "不能连接到\"%s\" 的\"%s\"端口" - -#: ../../lib/HTMLTree.php:96 -msgid "Could not connect to LDAP server" -msgstr "" - -#: ../../htdocs/ldif_import.php:71 -msgid "Could not delete object:" -msgstr "不能删除对象:" - -#: ../../htdocs/delete.php:35 ../../htdocs/delete.php:49 -#: ../../htdocs/rdelete.php:45 -#, php-format -msgid "Could not delete the entry: %s" -msgstr "不能删除该条目: %s" - -#: ../../htdocs/entry_chooser.php:101 -msgid "Could not determine base DN" -msgstr "不能确定base DN(基DN)" - -#: ../../lib/HTMLTree.php:82 -msgid "Could not determine the root of your LDAP tree." -msgstr "检测不到你的LDAP树的根。" - -#: ../../lib/functions.php:1849 -#, php-format -msgid "Could not fetch jpeg data from LDAP server for attribute %s." -msgstr "不能从LDAP服务器为属性%s获得jpeg数据。" - -#: ../../lib/timeout_functions.php:72 ../../htdocs/logout.php:24 -msgid "Could not logout." -msgstr "不能退出。" - -#: ../../htdocs/ldif_import.php:74 -msgid "Could not modify object:" -msgstr "不能修改对象:" - -#: ../../htdocs/add_oclass.php:54 ../../htdocs/add_value.php:72 -msgid "Could not perform ldap_mod_add operation." -msgstr "不能完成ldap_mod_add 操作。" - -#: ../../htdocs/update.php:178 ../../htdocs/delete_attr.php:50 -msgid "Could not perform ldap_modify operation." -msgstr "不能完成ldap_modify 操作。" - -#: ../../htdocs/ldif_import.php:72 ../../htdocs/ldif_import.php:73 -msgid "Could not rename object:" -msgstr "不能更名对象:" - -#: ../../lib/server_functions.php:1533 ../../htdocs/rename.php:61 -msgid "Could not rename the entry" -msgstr "不能更名该条目" - -#: ../../htdocs/schema.php:31 -msgid "Could not retrieve schema from" -msgstr "不能找回格式的地方" - -#: ../../htdocs/login.php:152 -msgid "Could not set cookie." -msgstr "不能设置cookie。" - -#: ../../lib/server_functions.php:265 -msgid "Could not start TLS. Please check your LDAP server configuration." -msgstr "不能启用TLS。 请检查你的LDAP 服务器配置。" - -#: ../../lib/functions.php:1864 -#, php-format -msgid "" -"Could not write to the $jpeg_temp_dir directory %s. Please verify that your " -"web server can write files there." -msgstr "不能将%s写入$jpeg_temp_dir目录。请确定你的web服务器能够在那里写文件。" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create" -msgstr "创建" - -#: ../../htdocs/create.php:118 -msgid "Create Entry" -msgstr "创建条目" - -#: ../../lib/EntryWriter1.php:242 ../../lib/EntryWriter1.php:313 -#: ../../lib/EntryWriter2.php:82 -msgid "Create Object" -msgstr "创建对象" - -#: ../../lib/EntryWriter1.php:783 -msgid "Create a child entry" -msgstr "创建一个子条目" - -#: ../../lib/HTMLTree.php:463 -msgid "Create a new entry in" -msgstr "创建新条目于" - -#: ../../htdocs/create.php:128 -msgid "Create another entry" -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "Create it?" -msgstr "要创建它吗?" - -#: ../../lib/HTMLTree.php:463 ../../lib/PLMTree.php:142 -#: ../../lib/PLMTree.php:162 ../../lib/AJAXTree.php:343 -#: ../../lib/AJAXTree.php:344 ../../lib/AJAXTree.php:367 -#: ../../lib/AJAXTree.php:368 -msgid "Create new entry here" -msgstr "创建新条目" - -#: ../../htdocs/create.php:115 -msgid "Creation successful!" -msgstr "" - -#: ../../htdocs/welcome.php:25 -msgid "Credits" -msgstr "荣誉" - -#: ../../htdocs/add_value_form.php:112 -msgid "Current list of" -msgstr "当前列表" - -#: ../../lib/EntryWriter1.php:739 -msgid "Cut" -msgstr "剪切" - -#: ../../htdocs/delete_form.php:107 -msgid "DN" -msgstr "DN" - -#: ../../lib/EntryWriter1.php:1886 -msgid "DN not available" -msgstr "" - -#: ../../lib/export_functions.php:414 -#, php-format -msgid "DSLM Export for: %s" -msgstr "为: %s,导出DSLM" - -#: ../../lib/EntryWriter1.php:1095 ../../lib/EntryWriter1.php:1301 -msgid "Default" -msgstr "默认" - -#: ../../htdocs/delete_form.php:117 -msgid "Delete" -msgstr "删除" - -#: ../../htdocs/delete_form.php:27 -#, php-format -msgid "Delete %s" -msgstr "删除:%s" - -#: ../../lib/HTMLTree.php:139 -msgid "Delete Checked Entries" -msgstr "" - -#: ../../htdocs/delete.php:43 -msgid "Delete DN" -msgstr "" - -#: ../../lib/functions.php:1871 -msgid "Delete Photo" -msgstr "" - -#: ../../htdocs/copy_form.php:86 ../../htdocs/copy_form.php:92 -msgid "Delete after copy (move):" -msgstr "复制后删除(即移动):" - -#: ../../htdocs/delete_form.php:68 -#, php-format -msgid "Delete all %s objects" -msgstr "删除所有的对象:%s" - -#: ../../lib/functions.php:1906 -msgid "Delete photo" -msgstr "删除图片" - -#: ../../lib/EntryWriter1.php:763 -msgid "Delete this entry" -msgstr "删除该条目" - -#: ../../htdocs/rdelete.php:54 ../../htdocs/rdelete.php:71 -msgid "Deleting" -msgstr "" - -#: ../../htdocs/mass_delete.php:61 ../../htdocs/rdelete.php:30 -#, php-format -msgid "Deleting %s" -msgstr "正在删除 %s" - -#: ../../htdocs/ldif_import.php:63 -msgid "Deleting..." -msgstr "删除..." - -#: ../../htdocs/mass_delete.php:43 -#, php-format -msgid "Deletion progress on server \"%s\"" -msgstr "服务器\"%s\"上的删除过程" - -#: ../../lib/functions.php:1790 ../../lib/functions.php:1793 -#: ../../htdocs/add_value_form.php:172 ../../htdocs/schema.php:70 -#: ../../htdocs/schema.php:98 ../../htdocs/schema.php:410 -#: ../../htdocs/ldif_import.php:110 ../../htdocs/ldif_import.php:120 -#: ../../htdocs/ldif_import.php:190 -msgid "Description" -msgstr "描述" - -#: ../../htdocs/compare_form.php:53 ../../htdocs/copy_form.php:64 -msgid "Destination DN" -msgstr "目标DN" - -#: ../../htdocs/compare_form.php:61 ../../htdocs/copy_form.php:70 -msgid "Destination Server" -msgstr "目标服务器" - -#: ../../htdocs/copy.php:29 -msgid "Destination server is currently READ-ONLY." -msgstr "" - -#: ../../htdocs/create.php:126 -msgid "Display the new created entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:512 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:107 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:24 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/copy_form.php:47 -#: ../../htdocs/add_attr_form.php:25 -msgid "Distinguished Name" -msgstr "识别名(DN)" - -#: ../../htdocs/mass_delete.php:95 -#, php-format -msgid "Do you really want to delete %s %s %s" -msgstr "" - -#: ../../htdocs/update_confirm.php:190 -msgid "Do you want to make these changes?" -msgstr "你想应用这些变化吗?" - -#: ../../htdocs/welcome.php:30 -msgid "Documentation" -msgstr "文档" - -#: ../../htdocs/ldif_import_form.php:44 -msgid "Don't stop on errors" -msgstr "发生错误时不停止" - -#: ../../lib/functions.php:355 ../../htdocs/welcome.php:35 -msgid "Donate" -msgstr "捐赠" - -#: ../../lib/export_functions.php:252 ../../htdocs/search.php:250 -msgid "Encountered an error while performing search." -msgstr "在执行搜索时碰到一个错误。" - -#: ../../htdocs/add_value_form.php:135 -msgid "Enter the value you would like to add:" -msgstr "输入你想增加的值:" - -#: ../../htdocs/search.php:265 -msgid "Entries found" -msgstr "" - -#: ../../lib/export_functions.php:319 -msgid "Entry" -msgstr "条目" - -#: ../../htdocs/rdelete.php:42 -#, php-format -msgid "Entry %s and sub-tree deleted successfully." -msgstr "成功删除条目%s 和子树。" - -#: ../../htdocs/entry_chooser.php:19 -msgid "Entry Chooser" -msgstr "条目选择器" - -#: ../../htdocs/create.php:123 -msgid "Entry created" -msgstr "" - -#: ../../htdocs/schema.php:101 -msgid "Equality" -msgstr "相等" - -#: ../../lib/functions.php:130 ../../lib/functions.php:513 -msgid "Error" -msgstr "错误" - -#: ../../htdocs/mass_delete.php:30 -msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." -msgstr "错误调用mass_delete.php。在POST变量中丢失 mass_delete。" - -#: ../../htdocs/ldif_import.php:118 -msgid "Error code" -msgstr "错误码" - -#: ../../lib/functions.php:1789 ../../lib/functions.php:1792 -#: ../../lib/functions.php:1798 -msgid "Error number" -msgstr "" - -#: ../../lib/server_functions.php:95 -#, php-format -msgid "" -"Error: You have an error in your config file. The only three allowed values " -"for auth_type in the $servers section are 'session', 'cookie', and 'config'. " -"You entered '%s', which is not allowed." -msgstr "" - -#: ../../lib/EntryWriter1.php:733 ../../htdocs/export_form.php:36 -#: ../../htdocs/export_form.php:46 -msgid "Export" -msgstr "导出" - -#: ../../lib/HTMLTree.php:264 -msgid "Export entries" -msgstr "" - -#: ../../htdocs/export_form.php:97 -msgid "Export format" -msgstr "导出格式" - -#: ../../lib/EntryWriter1.php:804 -msgid "Export subtree" -msgstr "导出子树" - -#: ../../htdocs/mass_delete.php:73 ../../htdocs/ldif_import.php:103 -#: ../../htdocs/ldif_import.php:116 ../../htdocs/ldif_import.php:139 -#: ../../htdocs/ldif_import.php:162 -msgid "Failed" -msgstr "失败" - -#: ../../htdocs/add_attr.php:128 -msgid "Failed to add the attribute." -msgstr "增加属性失败。" - -#: ../../htdocs/copy.php:144 -msgid "Failed to copy DN: " -msgstr "复制DN不成功: " - -#: ../../htdocs/rdelete.php:63 ../../htdocs/rdelete.php:80 -#, php-format -msgid "Failed to delete entry %s" -msgstr "删除条目:%s 失败" - -#: ../../tools/unserialize.php:14 ../../lib/functions.php:132 -#: ../../lib/functions.php:535 ../../htdocs/ldif_import.php:54 -msgid "File" -msgstr "文件" - -#: ../../htdocs/copy_form.php:81 -msgid "Filter" -msgstr "过滤器" - -#: ../../htdocs/search.php:299 -msgid "Filter performed" -msgstr "" - -#: ../../htdocs/schema.php:112 -msgid "Force as MAY by config" -msgstr "" - -#: ../../htdocs/search.php:276 -msgid "Format" -msgstr "格式" - -#: ../../tools/unserialize.php:17 ../../lib/functions.php:539 -msgid "Function" -msgstr "函数" - -#: ../../lib/export_functions.php:195 -#, php-format -msgid "" -"Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" -msgstr "由phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) 在 %s上生成的" - -#: ../../lib/functions.php:61 ../../lib/functions.php:598 -msgid "Generic Error" -msgstr "常规错误" - -#: ../../htdocs/schema.php:134 ../../htdocs/schema.php:318 -#: ../../htdocs/schema.php:364 ../../htdocs/schema.php:395 -msgid "Go" -msgstr "开始" - -#: ../../htdocs/update_confirm.php:330 -msgid "Go back" -msgstr "返回" - -#: ../../lib/EntryWriter1.php:1882 -msgid "Go to" -msgstr "转到" - -#: ../../htdocs/compare.php:403 -#, php-format -msgid "Go to %s" -msgstr "转到 %s" - -#: ../../htdocs/modify_member_form.php:115 -msgid "Group members" -msgstr "" - -#: ../../lib/functions.php:359 -msgid "Help" -msgstr "帮助" - -#: ../../lib/EntryWriter1.php:748 -msgid "Hide" -msgstr "隐藏" - -#: ../../lib/EntryWriter1.php:749 -msgid "Hide internal attributes" -msgstr "隐藏内部属性" - -#: ../../lib/EntryWriter1.php:493 -msgid "Hint" -msgstr "提示" - -#: ../../htdocs/copy_form.php:102 -msgid "" -"Hint: Copying between different servers only works if there are no schema " -"violations" -msgstr "提示: 在两个不同的服务器之间复制时,要求它们没有\"schema(格式)冲突\"" - -#: ../../lib/EntryWriter1.php:809 -msgid "Hint: To delete an attribute, empty the text field and click save." -msgstr "提示: 想要删除一个属性,请将文本字段清空,然后点击保存。" - -#: ../../lib/EntryWriter1.php:815 -msgid "Hint: To view the schema for an attribute, click the attribute name." -msgstr "提示: 要查看一个属性的格式,请点击属性的名称。" - -#: ../../lib/EntryWriter1.php:357 -msgid "" -"Hint: You must choose exactly one structural objectClass (shown in bold " -"above)" -msgstr "提示: 你必有选择一个结构化的objectClass (如上面粗体所显示的)" - -#: ../../lib/functions.php:347 -msgid "Home" -msgstr "主页" - -#: ../../htdocs/ldif_import.php:195 -#, php-format -msgid "If so, please report it." -msgstr "" - -#: ../../htdocs/search.php:215 -msgid "" -"If you want to add your own criteria to the list. Be sure to edit search.php " -"to handle them. Quitting." -msgstr "如果你想增加自己的criteria 到列表里。 记得编辑search.php 来处理它们。 退出。" - -#: ../../htdocs/ldif_import_form.php:21 ../../htdocs/ldif_import.php:51 -msgid "Import LDIF File" -msgstr "导入LDIF文件" - -#: ../../lib/HTMLTree.php:256 -msgid "Import entries from an LDIF file" -msgstr "从LDIF文件导入条目" - -#: ../../htdocs/add_oclass_form.php:80 -msgid "In order to add these objectClass(es) to this entry, you must specify" -msgstr "" - -#: ../../lib/HTMLTree.php:161 -#, php-format -msgid "Inactivity will log you off at %s" -msgstr "在%s如果活动,你将被登出。" - -#: ../../htdocs/export_form.php:78 -msgid "Include system attributes" -msgstr "包含系统属性" - -#: ../../lib/functions.php:225 -msgid "Incorrect version of PHP" -msgstr "" - -#: ../../htdocs/schema.php:468 ../../htdocs/schema.php:491 -msgid "Inherited from" -msgstr "被继承于" - -#: ../../htdocs/schema.php:100 ../../htdocs/schema.php:417 -msgid "Inherits from" -msgstr "继承于" - -#: ../../htdocs/add_oclass_form.php:79 -msgid "Instructions" -msgstr "说明" - -#: ../../lib/server_functions.php:344 -msgid "Insufficient access rights." -msgstr "" - -#: ../../htdocs/rename.php:47 -msgid "Invalid RDN value" -msgstr "无效的RDN值" - -#: ../../htdocs/export.php:44 -msgid "Invalid export format" -msgstr "非法的导出格式" - -#: ../../htdocs/ldif_import.php:195 -msgid "Is this a phpLDAPadmin bug?" -msgstr "" - -#: ../../lib/HTMLTree.php:83 -msgid "" -"It appears that the LDAP server has been configured to not reveal its root." -msgstr "好像你的LDAP服务器配置来限制了不要显露它的根。" - -#: ../../lib/server_functions.php:312 -#, php-format -msgid "" -"It seems that sasl_authz_id_regex \"%s\".\" contains invalid PCRE regular " -"expression." -msgstr "" - -#: ../../htdocs/schema.php:302 -msgid "Jump to a matching rule" -msgstr "跳转到一个匹配的规则" - -#: ../../htdocs/schema.php:121 -msgid "Jump to an attribute type" -msgstr "跳转到一个属性类型" - -#: ../../htdocs/schema.php:381 -msgid "Jump to an objectClass" -msgstr "跳转到一个objectClass" - -#: ../../htdocs/schema.php:426 ../../htdocs/schema.php:444 -msgid "Jump to this objectClass definition" -msgstr "跳转到该objectClass的定义处" - -#: ../../lib/functions.php:1780 ../../htdocs/ldif_import.php:144 -msgid "LDAP said" -msgstr "" - -#: ../../lib/export_functions.php:309 -#, php-format -msgid "LDIF Export for: %s" -msgstr "为: %s,导出LDIF" - -#: ../../htdocs/ldif_import.php:187 -msgid "LDIF Parse Error" -msgstr "LDIF解析错误" - -#: ../../htdocs/ldif_import.php:147 -msgid "LDIF text import" -msgstr "" - -#: ../../htdocs/ldif_import.php:108 ../../htdocs/ldif_import.php:191 -msgid "Line" -msgstr "行" - -#: ../../htdocs/ldif_import.php:106 ../../htdocs/ldif_import.php:192 -msgid "Line Number" -msgstr "行号" - -#: ../../htdocs/export_form.php:111 -msgid "Line ends" -msgstr "行结束" - -#: ../../htdocs/delete_form.php:87 -msgid "List of entries to be deleted:" -msgstr "将被删除的条目列表:" - -#: ../../lib/HTMLTree.php:279 -msgid "Logged in as" -msgstr "已登录为" - -#: ../../lib/HTMLTree.php:477 ../../htdocs/update.php:158 -msgid "Login" -msgstr "登录" - -#: ../../htdocs/login_form.php:46 -msgid "Login DN" -msgstr "登录DN" - -#: ../../htdocs/timeout.php:37 -msgid "Login..." -msgstr "登录…" - -#: ../../htdocs/logout.php:33 -msgid "Logout" -msgstr "注销" - -#: ../../lib/HTMLTree.php:272 -msgid "Logout of this server" -msgstr "退出这个服务器" - -#: ../../htdocs/entry_chooser.php:33 -msgid "Looking in" -msgstr "" - -#: ../../lib/EntryWriter1.php:1891 -msgid "Mail" -msgstr "邮件" - -#: ../../htdocs/copy_form.php:88 -msgid "Make sure your filter (above) will select all child records." -msgstr "确认你的过滤器(见上面)会选择所有的子记录。" - -#: ../../htdocs/mass_delete.php:51 -msgid "Malformed mass_delete array." -msgstr "不规则的mass_delete 数组。" - -#: ../../htdocs/mass_delete.php:40 -msgid "Mass Deleting" -msgstr "正在大量删除" - -#: ../../htdocs/mass_delete.php:38 -msgid "" -"Mass deletion is not enabled. Please enable it in config.php before " -"proceeding." -msgstr "Mass deletion(大量删除)没有启用。 请在进行下一步前在config.php中启用它。" - -#: ../../htdocs/schema.php:323 -msgid "Matching Rule OID" -msgstr "匹配规则 OID" - -#: ../../htdocs/schema.php:44 -msgid "Matching Rules" -msgstr "匹配规则" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:109 -msgid "Maximum Length" -msgstr "最大长度" - -#: ../../htdocs/ldif_import_form.php:37 ../../htdocs/add_attr_form.php:155 -msgid "Maximum file size" -msgstr "" - -#: ../../lib/functions.php:329 -msgid "Memory Limit low." -msgstr "" - -#: ../../lib/template_functions.php:419 -#, php-format -msgid "Missing %s in the XML file." -msgstr "" - -#: ../../lib/ldif_functions.php:169 -msgid "Missing attibutes or changetype attribute for entry" -msgstr "" - -#: ../../lib/ldif_functions.php:352 ../../lib/ldif_functions.php:390 -msgid "Missing attributes for the entry" -msgstr "" - -#: ../../lib/functions.php:311 -msgid "Missing required configuration" -msgstr "" - -#: ../../lib/functions.php:233 ../../lib/functions.php:240 -msgid "Missing required extension" -msgstr "" - -#: ../../htdocs/ldif_import.php:34 -msgid "Missing uploaded file." -msgstr "丢失上传的文件。" - -#: ../../htdocs/update.php:154 -msgid "Modification successful!" -msgstr "成功修改!" - -#: ../../htdocs/modify_member_form.php:69 -msgid "Modify group" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -#, php-format -msgid "Modify members for '%s'" -msgstr "" - -#: ../../htdocs/ldif_import.php:66 -msgid "Modifying..." -msgstr "修改..." - -#: ../../htdocs/schema.php:323 -msgid "Name" -msgstr "名称" - -#: ../../htdocs/add_oclass_form.php:75 ../../htdocs/add_oclass_form.php:93 -msgid "New Required Attributes" -msgstr "新增必需的属性" - -#: ../../htdocs/update_confirm.php:202 -msgid "New Value" -msgstr "新值" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "No" -msgstr "不" - -#: ../../htdocs/delete_attr.php:28 -msgid "No DN specified" -msgstr "没有指定DN" - -#: ../../htdocs/ldif_import.php:38 -msgid "No LDIF file specified. Please try again." -msgstr "没有指定LDIF文件。 请再试试。" - -#: ../../lib/Entry.php:282 -msgid "No Template" -msgstr "没有模板" - -#: ../../htdocs/compare.php:186 ../../htdocs/compare.php:199 -msgid "No Value" -msgstr "没有值" - -#: ../../htdocs/delete_attr.php:31 -msgid "No attribute name specified." -msgstr "没有指定属性名称。" - -#: ../../htdocs/export.php:88 -msgid "No available exporter found." -msgstr "没有找到可用导出器。" - -#: ../../htdocs/purge_cache.php:26 -msgid "No cache to purge." -msgstr "没有缓存可清空。" - -#: ../../htdocs/add_value_form.php:115 -msgid "No current value for attribute" -msgstr "" - -#: ../../lib/EntryWriter1.php:840 ../../lib/EntryWriter2.php:104 -msgid "No internal attributes" -msgstr "没有内部属性" - -#: ../../htdocs/logout.php:19 -msgid "No one is logged in to that server." -msgstr "没人登录到该服务器。" - -#: ../../lib/search_form_predefined.php:42 -msgid "No queries have been defined in config.php." -msgstr "在config.php里没有条目定义。" - -#: ../../htdocs/compare.php:29 ../../htdocs/compare.php:31 -#: ../../htdocs/template_engine.php:25 -#: ../../htdocs/download_binary_attr.php:26 ../../htdocs/delete.php:29 -#: ../../htdocs/rdelete.php:28 -#, php-format -msgid "No such entry: %s" -msgstr "没有这样的条目: %s" - -#: ../../htdocs/view_jpeg_photo.php:25 -msgid "No such file" -msgstr "无此文件" - -#: ../../htdocs/schema.php:515 -#, php-format -msgid "No such schema item: \"%s\"" -msgstr "没有这样的格式项目: \"%s\"" - -#: ../../lib/ldif_functions.php:621 -msgid "No version found. Assuming 1." -msgstr "没有找到版本号。 假设 1。" - -#: ../../htdocs/compare.php:22 ../../htdocs/compare.php:26 -#: ../../htdocs/rename_form.php:22 ../../htdocs/download_binary_attr.php:17 -#: ../../htdocs/entry_chooser.php:41 ../../htdocs/copy.php:32 -#: ../../htdocs/modify_member_form.php:23 -msgid "" -"Not enough information to login to server. Please check your configuration." -msgstr "没有足够的信息来登录服务器。 请检查你的配置。" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "Note" -msgstr "" - -#: ../../htdocs/add_value_form.php:160 -msgid "" -"Note: You may be required to enter new attributes that these objectClass(es) " -"require" -msgstr "注释: 可能会要求你输入该objectClass所必需的新属性。" - -#: ../../htdocs/delete_form.php:59 -msgid "" -"Note: this is potentially very dangerous and you do this at your own risk. " -"This operation cannot be undone. Take into consideration aliases, referrals, " -"and other things that may cause problems." -msgstr "" -"注释: 这个可能潜在危险,后果自负。 这个操作不可恢复。 一定要考虑到aliases(别名)、 referrals(提名)以及其它可能引起问题的事情。" - -#: ../../htdocs/search.php:310 -msgid "Notice, search size limit exceeded." -msgstr "注意,超出搜索大小限制。" - -#: ../../htdocs/schema.php:407 -msgid "OID" -msgstr "OID" - -#: ../../lib/EntryWriter1.php:340 ../../htdocs/schema.php:41 -msgid "ObjectClasses" -msgstr "ObjectClasses" - -#: ../../htdocs/add_oclass.php:26 -msgid "" -"ObjectClasses are flagged as read only in the phpLDAPadmin configuration." -msgstr "" - -#: ../../lib/template_functions.php:273 -msgid "ObjectClasses in XML dont exist in LDAP server." -msgstr "" - -#: ../../htdocs/schema.php:99 ../../htdocs/schema.php:341 -msgid "Obsolete" -msgstr "作废的" - -#: ../../htdocs/update_confirm.php:202 -msgid "Old Value" -msgstr "旧值" - -#: ../../lib/search_form_advanced.php:87 ../../htdocs/export_form.php:32 -msgid "One (one level beneath base)" -msgstr "One (base之下的一级)" - -#: ../../lib/EntryWriter1.php:407 ../../lib/EntryWriter1.php:417 -#: ../../htdocs/schema.php:452 -msgid "Optional Attributes" -msgstr "可选的属性" - -#: ../../htdocs/schema.php:34 -msgid "Or lastly, your LDAP server doesnt provide this information." -msgstr "或者最后,你的LDAP服务器没有提供该信息。" - -#: ../../htdocs/ldif_import_form.php:40 -msgid "Or paste your LDIF here" -msgstr "" - -#: ../../lib/search_form_advanced.php:112 -msgid "Order by" -msgstr "排序方式" - -#: ../../htdocs/schema.php:102 -msgid "Ordering" -msgstr "排序" - -#: ../../lib/common.php:158 -msgid "PHP Safe Mode" -msgstr "" - -#: ../../htdocs/search.php:324 ../../htdocs/search.php:362 -#, php-format -msgid "Page %d" -msgstr "第%d页" - -#: ../../htdocs/schema.php:433 -msgid "Parent to" -msgstr "双亲指向" - -#: ../../htdocs/login_form.php:53 -msgid "Password" -msgstr "密码" - -#: ../../htdocs/password_checker.php:27 -msgid "Password Checker Tool" -msgstr "密码检查工具" - -#: ../../htdocs/password_checker.php:57 -msgid "Passwords do not match!" -msgstr "密码不匹配!" - -#: ../../htdocs/password_checker.php:55 -msgid "Passwords match!" -msgstr "密码匹配!" - -#: ../../htdocs/delete_form.php:35 -msgid "Permanently delete all children also?" -msgstr "也要永久删除所的子条目吗?" - -#: ../../lib/functions.php:140 -msgid "Please check and see if this bug has been reported" -msgstr "" - -#: ../../lib/functions.php:1855 -msgid "" -"Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin " -"config.php" -msgstr "请在phpLDAPadmin的config.php里,将$jpeg_temp_dir设置到一个可写的目录" - -#: ../../lib/HTMLTree.php:84 -msgid "Please specify it in config.php" -msgstr "请在config.php里指定它" - -#: ../../lib/search_form_predefined.php:8 -#: ../../lib/search_form_advanced.php:52 ../../lib/search_form_simple.php:43 -msgid "Predefined Searches" -msgstr "预定义的搜索" - -#: ../../lib/EntryWriter1.php:308 ../../lib/EntryWriter2.php:78 -msgid "Proceed >>" -msgstr "继续 >>" - -#: ../../htdocs/ldif_import_form.php:45 ../../htdocs/export_form.php:126 -msgid "Proceed >>" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge all cached data in phpLDAPadmin, including server schemas." -msgstr "清空所有在phpLDAPadmin中缓存的数据,包括服务器schema(格式)。" - -#: ../../htdocs/purge_cache.php:31 -msgid "Purge cache" -msgstr "" - -#: ../../lib/functions.php:349 -msgid "Purge caches" -msgstr "清空缓存" - -#: ../../htdocs/purge_cache.php:28 -#, php-format -msgid "Purged %s bytes of cache." -msgstr "清空缓存%s 个字节。" - -#: ../../lib/EntryWriter1.php:2088 ../../htdocs/compare.php:506 -msgid "Really delete attribute" -msgstr "真的删除属性" - -#: ../../htdocs/copy_form.php:75 -msgid "Recursive copy" -msgstr "递归复制" - -#: ../../htdocs/copy.php:58 -msgid "Recursive copy progress" -msgstr "递归手复制过程" - -#: ../../htdocs/rdelete.php:31 -msgid "Recursive delete progress" -msgstr "递归式删除过程" - -#: ../../htdocs/copy_form.php:77 -msgid "Recursively copy all children of this object as well." -msgstr "另外还要递归复制此对象的所有子内容。" - -#: ../../lib/EntryWriter1.php:725 ../../lib/EntryWriter1.php:726 -msgid "Refresh" -msgstr "刷新" - -#: ../../lib/HTMLTree.php:240 -msgid "Refresh all expanded containers for" -msgstr "刷新所有展开的容器,来自" - -#: ../../lib/EntryWriter1.php:726 -msgid "Refresh this entry" -msgstr "刷新这个条目" - -#: ../../htdocs/modify_member_form.php:149 -msgid "Remove selected" -msgstr "删除选中项" - -#: ../../lib/EntryWriter1.php:769 ../../htdocs/rename_form.php:35 -msgid "Rename" -msgstr "更名" - -#: ../../htdocs/rename_form.php:27 ../../htdocs/rename.php:71 -msgid "Rename Entry" -msgstr "条目更名" - -#: ../../htdocs/rename.php:67 -msgid "Rename successful!" -msgstr "" - -#: ../../htdocs/ldif_import.php:64 ../../htdocs/ldif_import.php:65 -msgid "Renaming..." -msgstr "更名..." - -#: ../../lib/functions.php:353 -msgid "Report a bug" -msgstr "报告错漏" - -#: ../../lib/functions.php:351 -msgid "Request feature" -msgstr "功能需求" - -#: ../../lib/EntryWriter1.php:397 ../../lib/EntryWriter1.php:404 -#: ../../htdocs/schema.php:452 -msgid "Required Attributes" -msgstr "必需的属性" - -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -#, php-format -msgid "Required attribute for objectClass(es) %s" -msgstr "objectClass(es) %s所必需的属性" - -#: ../../lib/AJAXTree.php:313 -msgid "Retrieving DN" -msgstr "" - -#: ../../lib/EntryWriter1.php:732 ../../lib/EntryWriter1.php:803 -msgid "Save" -msgstr "保存" - -#: ../../lib/EntryWriter1.php:861 ../../lib/EntryWriter2.php:117 -#: ../../htdocs/compare.php:495 -msgid "Save Changes" -msgstr "保存更改" - -#: ../../lib/EntryWriter1.php:733 -msgid "Save a dump of this object" -msgstr "保存一个该对象的导出" - -#: ../../lib/EntryWriter1.php:804 -msgid "Save a dump of this object and all of its children" -msgstr "保存一个该对象及其所有孩子的导出" - -#: ../../htdocs/export_form.php:81 -msgid "Save as file" -msgstr "另存为文件" - -#: ../../htdocs/modify_member_form.php:177 -msgid "Save changes" -msgstr "保存更改" - -#: ../../htdocs/schema.php:37 -msgid "Schema for server" -msgstr "服务器的格式" - -#: ../../lib/search_form_predefined.php:64 -#: ../../lib/search_form_advanced.php:116 ../../lib/search_form_simple.php:75 -#: ../../htdocs/search.php:148 -msgid "Search" -msgstr "搜索" - -#: ../../lib/export_functions.php:198 ../../lib/search_form_advanced.php:98 -#: ../../htdocs/export_form.php:72 -msgid "Search Filter" -msgstr "搜索过滤器" - -#: ../../lib/export_functions.php:197 ../../lib/search_form_advanced.php:80 -#: ../../htdocs/export_form.php:59 -msgid "Search Scope" -msgstr "搜索范围" - -#: ../../lib/search_form_simple.php:53 -msgid "Search for entries whose" -msgstr "搜索条目的所属" - -#: ../../htdocs/search.php:111 -msgid "Searching is not permitted" -msgstr "" - -#: ../../htdocs/add_attr.php:63 ../../htdocs/add_attr.php:83 -#: ../../htdocs/add_attr.php:88 -msgid "Security error: The file being uploaded may be malicious." -msgstr "安全错误: 上传的这个文件可能存在安全危险。" - -#: ../../lib/search_form_predefined.php:46 -msgid "Select a predefined search" -msgstr "选择一个预定义的搜索" - -#: ../../lib/EntryWriter1.php:1021 -msgid "Select a template for the creation process" -msgstr "选择用于创建过程的样板" - -#: ../../lib/EntryWriter1.php:1244 -msgid "Select a template to edit the entry" -msgstr "" - -#: ../../htdocs/ldif_import_form.php:32 -msgid "Select an LDIF file" -msgstr "" - -#: ../../lib/HTMLTree.php:156 ../../lib/EntryWriter1.php:247 -#: ../../lib/EntryWriter1.php:506 ../../lib/EntryWriter1.php:1033 -#: ../../lib/export_functions.php:196 ../../lib/search_form_advanced.php:61 -#: ../../lib/search_form_simple.php:51 ../../htdocs/add_value_form.php:95 -#: ../../htdocs/compare.php:49 ../../htdocs/compare.php:52 -#: ../../htdocs/delete_form.php:29 ../../htdocs/delete_form.php:105 -#: ../../htdocs/rename_form.php:29 ../../htdocs/compare_form.php:22 -#: ../../htdocs/ldif_import_form.php:22 ../../htdocs/export_form.php:49 -#: ../../htdocs/entry_chooser.php:32 ../../htdocs/entry_chooser.php:98 -#: ../../htdocs/modify_member_form.php:72 ../../htdocs/ldif_import.php:53 -#: ../../htdocs/copy_form.php:46 ../../htdocs/add_attr_form.php:25 -msgid "Server" -msgstr "服务器" - -#: ../../lib/page.php:200 -msgid "Server Select" -msgstr "" - -#: ../../htdocs/server_info.php:66 -msgid "Server info for: " -msgstr "服务器信息: " - -#: ../../htdocs/server_info.php:67 -msgid "Server reports the following information about itself" -msgstr "下列信息是服务器报告的关于它自己的信息" - -#: ../../lib/EntryWriter1.php:754 -msgid "Show" -msgstr "显示" - -#: ../../lib/search_form_advanced.php:104 ../../htdocs/export_form.php:75 -msgid "Show Attributtes" -msgstr "显示属性" - -#: ../../lib/functions.php:357 -msgid "Show Cache" -msgstr "" - -#: ../../lib/EntryWriter1.php:755 -msgid "Show internal attributes" -msgstr "显示内部属性" - -#: ../../htdocs/search.php:318 -#, php-format -msgid "Showing results %s through %s." -msgstr "显示结果%s,它是通过%s来完成的。" - -#: ../../lib/search_form_predefined.php:30 -#: ../../lib/search_form_advanced.php:44 ../../lib/search_form_simple.php:15 msgid "Simple Search Form" msgstr "简单搜索表格" -#: ../../htdocs/update.php:156 -msgid "" -"Since you changed your password, you must now login again with your new " -"password." -msgstr "因为你更改了密码,你现在必须使用新的密码重新登录。" -#: ../../htdocs/schema.php:105 -msgid "Single Valued" -msgstr "单个赋值的" +msgid "Server" +msgstr "服务器" -#: ../../htdocs/update_confirm.php:202 -msgid "Skip" -msgstr "跳过" -#: ../../lib/EntryWriter1.php:826 -#, php-format -msgid "Some attributes (%s) were modified and are highlighted below." -msgstr "下面有一些属性(%s) 被修改了,而且被标识为高亮。" +msgid "Search for entries whose" +msgstr "搜索条目的所属" -#: ../../htdocs/login.php:117 -msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." -msgstr "对不起,这台LDAP服务器不允许你使用phpLDAPadmin。" -#: ../../htdocs/compare_form.php:41 -msgid "Source DN" -msgstr "源DN" +msgid "Base DN" +msgstr "基本DN" -#: ../../lib/EntryWriter1.php:263 -msgid "Specify attributes and values" -msgstr "" -#: ../../lib/search_form_advanced.php:97 -msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" -msgstr "标准的LDAP搜索过滤器。 例如: (&(sn=Smith)(givenname=David))" +msgid "Search Scope" +msgstr "搜索范围" -#: ../../lib/EntryWriter1.php:253 ../../lib/EntryWriter1.php:260 -#, php-format -msgid "Step %s of %s" -msgstr "" -#: ../../lib/search_form_advanced.php:84 ../../htdocs/export_form.php:33 -msgid "Sub (entire subtree)" -msgstr "Sub (整个子树)" +msgid "Show Attributtes" +msgstr "显示属性" -#: ../../htdocs/schema.php:103 -msgid "Substring Rule" -msgstr "子串规则" -#: ../../htdocs/mass_delete.php:69 ../../htdocs/copy.php:64 -#: ../../htdocs/ldif_import.php:114 ../../htdocs/ldif_import.php:136 -#: ../../htdocs/rdelete.php:59 ../../htdocs/rdelete.php:76 -msgid "Success" -msgstr "成功" +msgid "Search" +msgstr "搜索" -#: ../../htdocs/delete.php:44 -msgid "Successfully deleted DN " -msgstr "" -#: ../../htdocs/login.php:164 -msgid "Successfully logged into server." -msgstr "" +msgid "Select a predefined search" +msgstr "选择一个预定义的搜索" -#: ../../htdocs/compare.php:64 -msgid "Switch Entry" -msgstr "切换条目" -#: ../../htdocs/add_value_form.php:175 ../../htdocs/schema.php:104 -msgid "Syntax" -msgstr "规则" +msgid "Predefined Searches" +msgstr "预定义的搜索" -#: ../../htdocs/schema.php:70 -msgid "Syntax OID" -msgstr "语法规则OID" -#: ../../htdocs/schema.php:43 -msgid "Syntaxes" -msgstr "语法规则" +msgid "No queries have been defined in config.php." +msgstr "在config.php里没有条目定义。" -#: ../../lib/EntryWriter1.php:519 -msgid "Template" -msgstr "样板" -#: ../../lib/EntryWriter1.php:2570 -msgid "Template Value Error" -msgstr "" - -#: ../../lib/EntryWriter1.php:1036 ../../lib/EntryWriter1.php:1255 -msgid "Templates" -msgstr "模板" - -#: ../../htdocs/create.php:54 -#, php-format -msgid "The Rdn attribute (%s) does not exist." -msgstr "" - -#: ../../htdocs/update.php:103 ../../htdocs/delete_attr.php:34 -#: ../../htdocs/add_value.php:37 -#, php-format -msgid "" -"The attribute \"%s\" is flagged as read-only in the phpLDAPadmin " -"configuration." -msgstr "在phpLDAPadmin的配置中,属性\"%s\"被标识为只读。" - -#: ../../htdocs/add_value_form.php:74 -#, php-format -msgid "The attribute (%s) is in readonly mode." -msgstr "" - -#: ../../lib/ldif_functions.php:410 -msgid "The attribute name should be add, delete or replace" -msgstr "" - -#: ../../lib/ldif_functions.php:514 -msgid "The attribute name should be newsuperior" -msgstr "" - -#: ../../lib/ldif_functions.php:448 -#, php-format -msgid "" -"The attribute to modify doesnt match the one specified by the %s attribute." -msgstr "" - -#: ../../htdocs/create.php:49 -#, php-format -msgid "The container (%s) is a leaf." -msgstr "" - -#: ../../lib/EntryWriter1.php:213 -#, php-format -msgid "The container you specified (%s) does not exist." -msgstr "" - -#: ../../htdocs/create.php:39 -#, php-format -msgid "The container you specified (%s) does not exist. Please try again." -msgstr "你指定的(%s)容器不存在。 请再试试。" - -#: ../../htdocs/update_confirm.php:309 -msgid "The deletion of objectClass(es)" -msgstr "" - -#: ../../htdocs/copy.php:50 -#, php-format -msgid "The destination container (%s) does not exist." -msgstr "目标容器 (%s) 不存在。" - -#: ../../htdocs/copy.php:47 -#, php-format -msgid "The destination entry (%s) already exists." -msgstr "目标条目 (%s) 已经存在。" - -#: ../../htdocs/update_confirm.php:29 ../../htdocs/add_value_form.php:37 -#, php-format -msgid "The entry (%s) does not exist." -msgstr "" - -#: ../../htdocs/update_confirm.php:43 ../../htdocs/add_value_form.php:55 -#, php-format -msgid "The entry (%s) is in readonly mode." -msgstr "" - -#: ../../lib/ldif_functions.php:483 -msgid "The entry is not valid" -msgstr "" - -#: ../../htdocs/add_attr.php:56 -msgid "" -"The file you chose is either empty or does not exist. Please go back and try " -"again." -msgstr "你选择的文件为空或不存在。 请返回再试。" - -#: ../../htdocs/add_attr.php:75 -msgid "" -"The file you selected was only partially uploaded, likley due to a network " -"error." -msgstr "你选择的文件上传不完整,可能是因为网络的缘故。" - -#: ../../htdocs/add_attr.php:67 ../../htdocs/add_attr.php:71 -msgid "" -"The file you uploaded is too large. Please check php.ini, upload_max_size " -"setting" -msgstr "你上传的文件太大。 请检查php.ini中的upload_max_size 设置" - -#: ../../htdocs/copy_form.php:64 -msgid "" -"The full DN of the new entry to be created when copying the source entry" -msgstr "在复制该源条目时,将被建立的新条目的完整DN" - -#: ../../lib/search_form_advanced.php:80 -msgid "The scope in which to search" -msgstr "搜索的范围" - -#: ../../htdocs/search.php:371 -msgid "The search found no results." -msgstr "这次搜索没找到结果。" - -#: ../../htdocs/schema.php:32 -msgid "The server does not fully support the LDAP protocol." -msgstr "这个服务器并不完全支持LDAP 协议。" - -#: ../../htdocs/copy.php:44 -msgid "The source and destination DN are the same." -msgstr "源和目标DN 相同。" - -#: ../../lib/ldif_functions.php:333 -msgid "The url attribute value should begin with file:///" -msgstr "" - -#: ../../htdocs/modify_member_form.php:75 -msgid "There are" -msgstr "" - -#: ../../lib/functions.php:1267 -msgid "There is more than one dn for uidpool,please change filter parameter" -msgstr "" - -#: ../../htdocs/add_oclass_form.php:76 -msgid "This action requires you to add" -msgstr "这个动作要求你增加" - -#: ../../lib/EntryWriter1.php:1509 ../../lib/EntryWriter2.php:210 -#: ../../htdocs/compare.php:166 -msgid "" -"This attribute has been flagged as read only by the phpLDAPadmin " -"administrator" -msgstr "该属性已经被phpLDAPadmin 管理员标识为只读" - -#: ../../htdocs/schema.php:496 -msgid "" -"This attribute has been forced as a MAY attribute by the configuration" -msgstr "" - -#: ../../lib/EntryWriter1.php:1418 -msgid "This attribute is required" -msgstr "" - -#: ../../lib/EntryWriter1.php:1971 -msgid "This attribute is required for the RDN." -msgstr "" - -#: ../../lib/HTMLTree.php:70 -msgid "This base entry does not exist." -msgstr "该基准条目不存在。" - -#: ../../htdocs/schema.php:32 -msgid "" -"This could happen for several reasons, the most probable of which are:" -msgstr "出现这种情况可能有几个原因,其中最有可能的是:" - -#: ../../lib/search_form_advanced.php:74 -msgid "This entry does not exist." -msgstr "该条目不存在。" - -#: ../../htdocs/compare.php:70 -msgid "This entry has no attributes" -msgstr "这个条目没有属性" - -#: ../../htdocs/delete_form.php:46 -#, php-format -msgid "This entry is the root of a sub-tree containing %s entries." -msgstr "该条目是根,其子树中包含有条目:%s。" - -#: ../../lib/EntryWriter1.php:2316 ../../htdocs/compare.php:392 -msgid "This is a structural ObjectClass and cannot be removed." -msgstr "这是个结构化的ObjectClass,因此不能移除。" - -#: ../../lib/search_form_advanced.php:71 -msgid "This is not a valid DN." -msgstr "该DN是无效。" - -#: ../../htdocs/schema.php:415 -msgid "This objectClass is obsolete." -msgstr "该objectClass过久了。" - -#: ../../htdocs/create.php:25 ../../htdocs/add_value_form.php:76 -#: ../../htdocs/add_value_form.php:78 ../../htdocs/server_info.php:16 -#: ../../htdocs/purge_cache.php:13 ../../htdocs/schema.php:20 -#: ../../htdocs/update.php:61 ../../htdocs/update.php:67 -#: ../../htdocs/update.php:80 ../../htdocs/rename.php:24 -#: ../../htdocs/delete_attr.php:21 ../../htdocs/delete.php:21 -#: ../../htdocs/mass_delete.php:26 ../../htdocs/copy.php:20 -#: ../../htdocs/add_value.php:24 ../../htdocs/search.php:120 -#: ../../htdocs/search.php:124 ../../htdocs/search.php:128 -#: ../../htdocs/export.php:18 ../../htdocs/ldif_import.php:19 -#: ../../htdocs/refresh.php:17 ../../htdocs/rdelete.php:21 -#: ../../htdocs/add_attr.php:25 -msgid "This operation is not permitted by the configuration" -msgstr "" - -#: ../../htdocs/server_info.php:71 -msgid "This server has nothing to report." -msgstr "该服务器没有报告任何信息。" - -#: ../../lib/EntryWriter1.php:1073 -msgid "This template is not allowed in this container." -msgstr "" - -#: ../../htdocs/login_form.php:28 -msgid "This web connection is unencrypted" -msgstr "" - -#: ../../htdocs/password_checker.php:41 -msgid "To" -msgstr "与" - -#: ../../htdocs/timeout.php:36 -msgid "To log back in please click on the following link:" -msgstr "想登录回来,请点击下面的链接:" - -#: ../../lib/export_functions.php:199 -msgid "Total Entries" -msgstr "条目总数" - -#: ../../lib/EntryWriter1.php:762 -msgid "Trash" -msgstr "回收站" - -#: ../../htdocs/schema.php:412 -msgid "Type" -msgstr "类型" - -#: ../../lib/EntryWriter1.php:1898 -msgid "URL" -msgstr "URL" - -#: ../../lib/functions.php:1264 -msgid "Uidpool dn not found, please change filter parameter" -msgstr "" - -#: ../../lib/functions.php:1184 ../../lib/functions.php:1248 -#, php-format -msgid "" -"Unable to bind to %s with your with auto_uid credentials. Please " -"check your configuration file." -msgstr "使用auto_uid credentials不能绑定到%s。 请检查你的配置文件。" - -#: ../../lib/server_functions.php:2852 -#, php-format -msgid "" -"Unable to bind to %s with your with unique_attrs credentials. Please " -"check your configuration file." -msgstr "不能使用unique_attrs 绑定到%s。 请检查你的配置文件。" - -#: ../../htdocs/mass_delete.php:23 -msgid "Unable to delete, server is in READY-ONLY mode." -msgstr "" - -#: ../../lib/ldif_functions.php:327 -msgid "Unable to open file" -msgstr "无法打开文件" - -#: ../../lib/ldif_functions.php:320 -msgid "Unable to read file" -msgstr "不能读取文件" - -#: ../../lib/server_functions.php:1988 ../../lib/server_functions.php:2060 -#: ../../lib/server_functions.php:2355 ../../lib/server_functions.php:2466 -#: ../../htdocs/logout.php:30 ../../htdocs/login_form.php:17 -#, php-format -msgid "Unknown auth_type: %s" -msgstr "不能识别的auth_type: %s" - -#: ../../lib/functions.php:1285 -msgid "Unknown uidpool type." -msgstr "" - -#: ../../htdocs/search.php:214 -msgid "Unrecognized criteria option: " -msgstr "不认识的criteria(标准)选项: " - -#: ../../lib/functions.php:122 -msgid "Unrecognized error number" -msgstr "" - -#: ../../htdocs/search.php:383 -#, php-format -msgid "Unrecognized search result format: %s" -msgstr "不能识别的搜索结果格式: %s" - -#: ../../htdocs/view_jpeg_photo.php:18 -msgid "Unsafe file name" -msgstr "" - -#: ../../htdocs/ldif_import.php:42 -msgid "Uploaded LDIF file is empty." -msgstr "上传的LDIF 文件为空。" - -#: ../../htdocs/schema.php:108 -msgid "Usage" -msgstr "用法" - -#: ../../htdocs/welcome.php:18 -msgid "Use the menu to the left to navigate" -msgstr "使用左边菜单来导航" - -#: ../../htdocs/schema.php:323 -msgid "Used by Attributes" -msgstr "被属性所使用的" - -#: ../../htdocs/schema.php:111 -msgid "Used by objectClasses" -msgstr "被objectClasses所使用的" - -#: ../../htdocs/schema.php:107 -msgid "User Modification" -msgstr "用户修改" - -#: ../../lib/EntryWriter1.php:797 -#, php-format -msgid "View %s children" -msgstr "查看%s个子条目" - -#: ../../lib/EntryWriter1.php:797 -msgid "View 1 child" -msgstr "查看1个子条目" - -#: ../../lib/HTMLTree.php:224 -msgid "View schema for" -msgstr "查看格式" - -#: ../../lib/HTMLTree.php:248 -msgid "View server-supplied information" -msgstr "查看附加的服务器信息" - -#: ../../lib/EntryWriter1.php:2328 ../../htdocs/compare.php:386 -msgid "View the schema description for this objectClass" -msgstr "查看该objectClass的格式描述" - -#: ../../lib/EntryWriter1.php:819 -msgid "Viewing entry in read-only mode." -msgstr "以只读模式查看条目。" - -#: ../../lib/page.php:62 -msgid "" -"WARNING: You cannot have PHP compression and phpLDAPadmin compression " -"enabled at the same time. Please unset zlib.output_compression or set " -"$config->custom->appearance['compress']=false" -msgstr "" - -#: ../../lib/page.php:62 ../../htdocs/login_form.php:28 -msgid "Warning" -msgstr "警告" - -#: ../../htdocs/copy_form.php:81 -msgid "" -"When performing a recursive copy, only copy those entries which match this " -"filter" -msgstr "在完成一个递归复制时,只会复制哪些匹配这个过滤器的条目。" - -#: ../../htdocs/schema.php:168 ../../htdocs/schema.php:225 -#: ../../htdocs/schema.php:229 ../../htdocs/schema.php:233 -#: ../../htdocs/schema.php:284 -msgid "Yes" -msgstr "是" - -#: ../../htdocs/mass_delete.php:107 -msgid "Yes, delete!" -msgstr "是的,删除!" - -#: ../../htdocs/login_form.php:27 -msgid "" -"You are not using 'https'. Web browser will transmit login information in " -"clear text." -msgstr "你没有使用'https'。 Web浏览器将会以明文传输登录信息。" - -#: ../../htdocs/create.php:22 ../../htdocs/update_confirm.php:19 -#: ../../htdocs/add_value_form.php:16 ../../htdocs/template_engine.php:54 -#: ../../htdocs/delete_form.php:19 ../../htdocs/rename_form.php:20 -#: ../../htdocs/add_oclass.php:23 ../../htdocs/update.php:39 -#: ../../htdocs/download_binary_attr.php:15 ../../htdocs/rename.php:21 -#: ../../htdocs/delete_attr.php:18 ../../htdocs/ldif_import_form.php:19 -#: ../../htdocs/delete.php:18 ../../htdocs/add_oclass_form.php:27 -#: ../../htdocs/add_value.php:21 ../../htdocs/modify_member_form.php:21 -#: ../../htdocs/copy_form.php:18 ../../htdocs/rdelete.php:18 -#: ../../htdocs/add_attr.php:22 ../../htdocs/add_attr_form.php:18 -msgid "You cannot perform updates while server is in read-only mode" -msgstr "服务器是以只读方式运行,你不能完成更新" - -#: ../../htdocs/rename.php:31 -msgid "" -"You cannot rename an entry which has children entries (eg, the rename " -"operation is not allowed on non-leaf entries)" -msgstr "你不能更名一个带有子条目的条目,举例,更名操作允许在非叶子条目上完成" - -#: ../../htdocs/rename.php:39 -msgid "You did not change the RDN" -msgstr "你不能更改RDN" - -#: ../../htdocs/add_oclass_form.php:30 -msgid "" -"You did not select any ObjectClasses for this object. Please go back and do " -"so." -msgstr "你没有为该对象选择任何ObjectClasses。 请返回照做。" - -#: ../../htdocs/mass_delete.php:55 -msgid "You did not select any entries to delete." -msgstr "你没有选择任何要删除的条目。" - -#: ../../lib/EntryWriter1.php:218 -msgid "You did not select any objectClasses for this object." -msgstr "" - -#: ../../lib/functions.php:144 -msgid "You found a non-fatal phpLDAPadmin bug!" -msgstr "" - -#: ../../lib/common.php:159 -msgid "" -"You have PHP Safe Mode enabled. PLA may work unexpectedly in Safe Mode." -msgstr "" - -#: ../../htdocs/search.php:149 -msgid "" -"You have not logged into the selected server yet, so you cannot perform " -"searches on it." -msgstr "你还没有登入所选择的服务器,因此你不能在它上面完成搜索。" - -#: ../../lib/EntryReader.php:347 ../../lib/EntryReader.php:375 -msgid "You have specified two different passwords" -msgstr "" - -#: ../../htdocs/create.php:58 -msgid "You left the RDN field blank." -msgstr "RDN段为空白。" - -#: ../../htdocs/add_attr.php:37 ../../htdocs/add_attr.php:79 -msgid "You left the attribute value blank. Please go back and try again." -msgstr "属性值为空白。 请返回再试。" - -#: ../../htdocs/copy.php:41 -msgid "You left the destination DN blank." -msgstr "目标DN项为空。" - -#: ../../htdocs/login.php:27 -msgid "You left the password blank." -msgstr "你的密码为空。" - -#: ../../htdocs/create.php:73 -#, php-format -msgid "You left the value blank for required attribute (%s)." -msgstr "必需属性(%s)的值为空白。" - -#: ../../htdocs/update_confirm.php:326 -msgid "You made no changes" -msgstr "你没有进行更改" - -#: ../../htdocs/export.php:43 -msgid "You must choose an export format." -msgstr "不必须选择一个导出格式。" - -#: ../../htdocs/ldif_import.php:47 -msgid "You must either upload a file or provide an LDIF in the text box." -msgstr "" - -#: ../../htdocs/delete.php:26 ../../htdocs/rdelete.php:25 -msgid "You must specify a DN" -msgstr "你必须指定一个DN" - -#: ../../htdocs/compare.php:469 -#, php-format -msgid "" -"You need one of the following ObjectClass(es) to add this attribute %s." -msgstr "要新增属性%s,你需要下面的ObjectClass(es)——对象类。" - -#: ../../htdocs/index.php:82 -#, php-format -msgid "" -"You need to configure %s. Edit the file \"%s\" to do so. An example config " -"file is provided in \"%s.example\"." -msgstr "" - -#: ../../lib/functions.php:1305 -#, php-format -msgid "" -"You specified an invalid value for auto_uid_number_mechanism (\"%s\")\n" -"\t\t\t\tin your configration. Only \"uidpool\" and \"search\" are valid.\n" -"\t\t\t\tPlease correct this problem." -msgstr "" - -#: ../../lib/functions.php:1163 -#, php-format -msgid "" -"You specified the \"auto_uid_number_mechanism\" as \"search\" in your\n" -"\t\t\t\t\t\tconfiguration for server %s, but you did not specify the\n" -"\t\t\t\t\t\t\"auto_uid_number_search_base\". Please specify it before " -"proceeding." -msgstr "" - -#: ../../lib/EntryWriter1.php:763 -msgid "You will be prompted to confirm this decision" -msgstr "你会得到提示要求确认该选择" - -#: ../../htdocs/add_attr_form.php:152 -msgid "" -"Your PHP configuration has disabled file uploads. Please check php.ini " -"before proceeding." -msgstr "你的PHP配置不允许上传文件。 请在进行下步之前检查一下php.ini。" - -#: ../../lib/functions.php:1988 ../../lib/functions.php:1999 -#: ../../lib/functions.php:2010 ../../lib/functions.php:2058 -#: ../../lib/functions.php:2076 -msgid "" -"Your PHP install does not have the mhash() function. Cannot do SHA hashes." -msgstr "" - -#: ../../lib/server_functions.php:264 -msgid "Your PHP install does not support TLS." -msgstr "你安装的PHP 不支持TLS。" - -#: ../../lib/server_functions.php:279 -msgid "" -"Your PHP installation does not support ldap_sasl_bind() function. This " -"function is present in PHP 5.x when compiled with --with-ldap-sasl." -msgstr "" - -#: ../../htdocs/ldif_import_form.php:16 -msgid "" -"Your PHP.INI does not have file_uploads = ON. Please enable file uploads in " -"PHP." -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "Your Session timed out after" -msgstr "你的会话期将在无活动的" - -#: ../../htdocs/update.php:92 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" - -#: ../../htdocs/create.php:87 ../../htdocs/add_oclass.php:45 -#: ../../htdocs/add_value.php:59 ../../htdocs/add_attr.php:51 -#, php-format -msgid "" -"Your attempt to add %s (%s) to
%s
is NOT " -"allowed. That attribute/value belongs to another entry.

You might like to " -"search for that entry." -msgstr "" -"你企图增加%s (%s) 到
%s
,这是不允许的。 该属性/值属于任何条目。

你可能想搜索 该条条目。" - -#: ../../lib/session_functions.php:139 -msgid "Your configuration has been automatically refreshed." -msgstr "" - -#: ../../lib/functions.php:1172 -#, php-format -msgid "" -"Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base " -"for server %s" -msgstr "你的phpLDAPadmin配置为服务器%s指定了一个非法的auto_uid_search_base" - -#: ../../lib/functions.php:1969 ../../lib/functions.php:2103 -msgid "Your system crypt library does not support blowfish encryption." -msgstr "你的系统加密库不支持blowfish加密。" - -#: ../../lib/functions.php:1955 ../../lib/functions.php:2133 -msgid "Your system crypt library does not support extended DES encryption." -msgstr "你的系统加密库不支持扩展的DES加密。" - -#: ../../lib/functions.php:1962 ../../lib/functions.php:2118 -msgid "Your system crypt library does not support md5crypt encryption." -msgstr "你的系统加密库不支持md5crypt加密。" - -#: ../../lib/template_functions.php:984 -#, php-format -msgid "" -"Your template calls php.Function for a default value, however (%s) is NOT " -"available in the POST FORM variables. The following variables are available " -"[%s]." -msgstr "" - -#: ../../lib/EntryReader.php:262 -#, php-format -msgid "Your template has an unknown post function (%s)." -msgstr "" - -#: ../../lib/EntryReader.php:212 -#, php-format -msgid "Your template is missing variable (%s)" -msgstr "" - -#: ../../htdocs/schema.php:33 -msgid "Your version of PHP does not correctly perform the query." -msgstr "你的PHP版本不能正确地完成查询。" - -#: ../../htdocs/update_confirm.php:254 ../../htdocs/update_confirm.php:258 -msgid "[attribute deleted]" -msgstr "[删除的属性]" - -#: ../../lib/EntryWriter1.php:2035 ../../lib/EntryWriter1.php:2242 -msgid "[no value]" -msgstr "" - -#: ../../htdocs/add_value_form.php:78 ../../htdocs/add_attr.php:25 -msgid "add attribute" -msgstr "" - -#: ../../htdocs/add_value_form.php:76 ../../htdocs/add_value.php:24 -msgid "add attribute value" -msgstr "" - -#: ../../lib/EntryWriter1.php:1848 ../../htdocs/compare.php:466 -#: ../../htdocs/compare.php:479 -msgid "add value" -msgstr "赋值" - -#: ../../htdocs/search.php:120 -msgid "advanced search" -msgstr "" - -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "alias" -msgstr "" - -#: ../../lib/functions.php:2243 -msgid "browse" -msgstr "浏览" - -#: ../../lib/functions.php:353 -msgid "bug" -msgstr "错漏" - -#: ../../lib/functions.php:1901 ../../htdocs/ldif_import.php:54 -msgid "bytes" -msgstr "字节" - -#: ../../lib/functions.php:132 -msgid "caller" -msgstr "" - -#: ../../htdocs/schema.php:248 -msgid "character" -msgstr "单个字符" - -#: ../../htdocs/add_value_form.php:179 ../../htdocs/schema.php:248 -msgid "characters" -msgstr "多个字符" - -#: ../../lib/EntryWriter1.php:2404 -msgid "confirm" -msgstr "" - -#: ../../htdocs/copy.php:20 -msgid "copy entry" -msgstr "" - -#: ../../htdocs/create.php:25 -msgid "create entry" -msgstr "" - -#: ../../lib/EntryWriter1.php:2031 ../../htdocs/compare.php:261 -#: ../../htdocs/update.php:61 ../../htdocs/delete_attr.php:21 -msgid "delete attribute" -msgstr "删除属性" - -#: ../../htdocs/delete.php:21 ../../htdocs/rdelete.php:21 -msgid "delete entry" -msgstr "" - -#: ../../htdocs/mass_delete.php:26 -msgid "delete mass entries" -msgstr "" - -#: ../../lib/EntryWriter1.php:2020 ../../lib/EntryWriter1.php:2024 -#: ../../htdocs/compare.php:256 ../../htdocs/compare.php:258 -msgid "download value" -msgstr "下载值" - -#: ../../htdocs/compare.php:280 -msgid "empty" -msgstr "空的" - -#: ../../htdocs/mass_delete.php:96 -msgid "entries" -msgstr "" - -#: ../../htdocs/mass_delete.php:96 -msgid "entry" -msgstr "" - -#: ../../lib/HTMLTree.php:264 ../../htdocs/export.php:18 -msgid "export" -msgstr "" - -#: ../../htdocs/search.php:273 msgid "export results" msgstr "导出结果" -#: ../../lib/AttributeFactory.php:39 ../../htdocs/compare.php:358 -msgid "false" -msgstr "假的" -#: ../../htdocs/create.php:115 ../../htdocs/copy.php:76 -#: ../../htdocs/copy.php:106 -msgid "has been created." -msgstr "" +msgid "Unrecognized search result format: %s" +msgstr "不能识别的搜索结果格式: %s" -#: ../../lib/EntryWriter1.php:1980 -msgid "hint" -msgstr "提示" -#: ../../lib/HTMLTree.php:256 ../../htdocs/ldif_import.php:19 -msgid "import" -msgstr "导入" +msgid "Format" +msgstr "格式" + + +msgid "list" +msgstr "列表" + + +msgid "table" +msgstr "表格" + + +msgid "Your config.php specifies an invalid value for $default_search_display: %s. Please fix it" +msgstr "你的config.php 给$default_search_display指定了一个非法的值: %s,请更正" + + +msgid "Page %d" +msgstr "第%d页" + + +msgid "The search found no results." +msgstr "这次搜索没找到结果。" + + +msgid "Request feature" +msgstr "功能需求" + + +msgid "Report a bug" +msgstr "报告错漏" + + +msgid "create" +msgstr "创建" + -#: ../../lib/HTMLTree.php:248 msgid "info" msgstr "信息" -#: ../../lib/EntryWriter1.php:1926 ../../htdocs/compare.php:105 -msgid "is an alias for" -msgstr "" -#: ../../lib/functions.php:1870 -msgid "jpegPhoto contains errors
" -msgstr "jpegPhoto 包含有错
" +msgid "import" +msgstr "导入" -#: ../../lib/functions.php:351 -msgid "light" -msgstr "light" -#: ../../lib/functions.php:132 -msgid "line" -msgstr "" - -#: ../../lib/HTMLTree.php:476 -msgid "login" -msgstr "登录" - -#: ../../lib/HTMLTree.php:272 ../../lib/HTMLTree.php:494 -msgid "logout" -msgstr "退出" - -#: ../../htdocs/mass_delete.php:35 -msgid "mass_delete POST var is not an array." -msgstr "mass_delete POST 变量不是个数组。" - -#: ../../htdocs/modify_member_form.php:75 -msgid "members in group" -msgstr "" - -#: ../../htdocs/timeout.php:33 -msgid "min. of inactivity. You have been automatically logged out." -msgstr "分钟后过期。你将自动退出。" - -#: ../../htdocs/update.php:67 ../../htdocs/update.php:80 -msgid "modify attribute values" -msgstr "" - -#: ../../lib/EntryWriter1.php:1860 -msgid "modify group members" -msgstr "" - -#: ../../lib/HTMLTree.php:461 -msgid "new" -msgstr "新建" - -#: ../../htdocs/add_oclass_form.php:76 ../../htdocs/add_oclass_form.php:81 -msgid "new attributes" -msgstr "新增属性" - -#: ../../htdocs/schema.php:158 -msgid "no description" -msgstr "没有描述" - -#: ../../lib/functions.php:1793 -msgid "no description available" -msgstr "" - -#: ../../htdocs/entry_chooser.php:69 -msgid "no entries" -msgstr "没有条目" - -#: ../../htdocs/add_attr_form.php:109 -msgid "no new attributes available for this entry" -msgstr "这个条目没有提供新的属性" - -#: ../../htdocs/add_attr_form.php:161 -msgid "no new binary attributes available for this entry" -msgstr "这个条目没有提供新的二进制属性" - -#: ../../lib/EntryWriter1.php:405 ../../lib/EntryWriter1.php:418 -#: ../../lib/functions.php:2788 ../../htdocs/schema.php:175 -#: ../../htdocs/schema.php:257 ../../htdocs/schema.php:272 -#: ../../htdocs/schema.php:350 ../../htdocs/schema.php:419 -#: ../../htdocs/schema.php:439 ../../htdocs/schema.php:475 -#: ../../htdocs/schema.php:503 -msgid "none" -msgstr "什么都没有" - -#: ../../lib/EntryWriter1.php:2590 ../../htdocs/compare.php:359 -msgid "none, remove value" -msgstr "什么都没有,将值移除" - -#: ../../htdocs/schema.php:244 -msgid "not applicable" -msgstr "不可应用" - -#: ../../htdocs/schema.php:189 ../../htdocs/schema.php:201 -#: ../../htdocs/schema.php:206 ../../htdocs/schema.php:237 -msgid "not specified" -msgstr "未指定的" - -#: ../../htdocs/delete_form.php:54 -#, php-format -msgid "" -"phpLDAPadmin can recursively delete this entry and all %s of its children. " -"See below for a list of all the entries that this action will delete. Do you " -"want to do this?" -msgstr "" -"phpLDAPadmin可以递归地删除该条目及其所有子条目中的:%s。 关于这个动作可能会删除的所有条目列表,请查看下面。 你真的想这样做吗?" - -#: ../../htdocs/schema.php:33 -msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." -msgstr "phpLDAPadmin不知道如果获取你的服务器的格式。" - -#: ../../htdocs/welcome.php:16 -msgid "phpLDAPadmin logo" -msgstr "phpLDAPadmin 标识" - -#: ../../htdocs/search.php:124 -msgid "predefined search" -msgstr "" - -#: ../../htdocs/purge_cache.php:13 -msgid "purge" -msgstr "" - -#: ../../lib/HTMLTree.php:41 ../../lib/EntryWriter1.php:1510 -#: ../../lib/EntryWriter2.php:211 ../../htdocs/compare.php:166 -msgid "read only" -msgstr "只读" - -#: ../../lib/HTMLTree.php:240 msgid "refresh" msgstr "刷新" -#: ../../htdocs/refresh.php:17 -msgid "refresh server" -msgstr "" -#: ../../lib/EntryWriter1.php:1829 +msgid "logout" +msgstr "退出" + + +msgid "Create new entry here" +msgstr "创建新条目" + + +msgid "View schema for" +msgstr "查看格式" + + +msgid "Refresh all expanded containers for" +msgstr "刷新所有展开的容器,来自" + + +msgid "Create a new entry on" +msgstr "创建新条目到" + + +msgid "new" +msgstr "新建" + + +msgid "View server-supplied information" +msgstr "查看附加的服务器信息" + + +msgid "Import entries from an LDIF file" +msgstr "从LDIF文件导入条目" + + +msgid "Logout of this server" +msgstr "退出这个服务器" + + +msgid "Logged in as: " +msgstr "登录为: " + + +msgid "This is not a valid DN." +msgstr "该DN是无效。" + + +msgid "This entry does not exist." +msgstr "该条目不存在。" + + +msgid "read only" +msgstr "只读" + + +msgid "This attribute has been flagged as read only by the phpLDAPadmin administrator" +msgstr "该属性已经被phpLDAPadmin 管理员标识为只读" + + +msgid "Could not determine the root of your LDAP tree." +msgstr "检测不到你的LDAP树的根。" + + +msgid "It appears that the LDAP server has been configured to not reveal its root." +msgstr "好像你的LDAP服务器配置来限制了不要显露它的根。" + + +msgid "Please specify it in config.php" +msgstr "请在config.php里指定它" + + +msgid "Create a new entry in" +msgstr "创建新条目于" + + +msgid "Login..." +msgstr "登录…" + + +msgid "login" +msgstr "登录" + + +msgid "This base entry does not exist." +msgstr "该基准条目不存在。" + + +msgid "Create it?" +msgstr "要创建它吗?" + + +msgid "Delete this entry" +msgstr "删除该条目" + + +msgid "You will be prompted to confirm this decision" +msgstr "你会得到提示要求确认该选择" + + +msgid "Copy or move this entry" +msgstr "复制和移动该条目" + + +msgid "Copy this object to another location, a new DN, or another server" +msgstr "把这个对象复制到另一个位置,一个新DN或另一个服务器。" + + +msgid "Export" +msgstr "导出" + + +msgid "Save a dump of this object" +msgstr "保存一个该对象的导出" + + +msgid "Save a dump of this object and all of its children" +msgstr "保存一个该对象及其所有孩子的导出" + + +msgid "Export subtree" +msgstr "导出子树" + + +msgid "Create a child entry" +msgstr "创建一个子条目" + + +msgid "Rename Entry" +msgstr "条目更名" + + +msgid "Rename" +msgstr "更名" + + msgid "rename" msgstr "重命名" -#: ../../htdocs/rename.php:24 -msgid "rename entry" -msgstr "" -#: ../../lib/EntryWriter1.php:1962 ../../htdocs/compare.php:162 -msgid "required" -msgstr "必需的" +msgid "Add" +msgstr "增加" -#: ../../lib/HTMLTree.php:224 -msgid "schema" -msgstr "" -#: ../../lib/HTMLTree.php:232 -msgid "search" -msgstr "" +msgid "View" +msgstr "查看" -#: ../../htdocs/search.php:266 -msgid "seconds" -msgstr "秒" -#: ../../lib/EntryWriter1.php:368 ../../lib/EntryWriter2.php:23 -msgid "select the rdn attribute" -msgstr "" +msgid "View 1 child" +msgstr "查看1个子条目" -#: ../../htdocs/search.php:128 -msgid "simple search" -msgstr "" -#: ../../lib/EntryWriter1.php:961 -#, php-format -msgid "step %s of %s" -msgstr "" +msgid "View %s children" +msgstr "查看%s个子条目" -#: ../../lib/EntryWriter1.php:2317 ../../htdocs/compare.php:392 -msgid "structural" -msgstr "结构化" -#: ../../htdocs/add_oclass_form.php:82 -msgid "that this objectClass requires." -msgstr "" +msgid "Add new attribute" +msgstr "增加新的属性" -#: ../../htdocs/mass_delete.php:96 -msgid "these" -msgstr "" -#: ../../htdocs/mass_delete.php:96 -msgid "this" -msgstr "" +msgid "Add new ObjectClass" +msgstr "增加新的ObjectClass" + + +msgid "Hide internal attributes" +msgstr "隐藏内部属性" + + +msgid "Show internal attributes" +msgstr "显示内部属性" + + +msgid "Click to view the schema defintion for attribute type '%s'" +msgstr "点击查看属性类型'%s'的格式定义" + + +msgid "none" +msgstr "什么都没有" + + +msgid "No internal attributes" +msgstr "没有内部属性" + + +msgid "This entry has no attributes" +msgstr "这个条目没有属性" + + +msgid "Save Changes" +msgstr "保存更改" + + +msgid "add value" +msgstr "赋值" + + +msgid "Add an additional value to attribute '%s'" +msgstr "给属性'%s'赋一个附加的值" + + +msgid "Refresh this entry" +msgstr "刷新这个条目" + + +msgid "Hint: To delete an attribute, empty the text field and click save." +msgstr "提示: 想要删除一个属性,请将文本字段清空,然后点击保存。" + + +msgid "Hint: To view the schema for an attribute, click the attribute name." +msgstr "提示: 要查看一个属性的格式,请点击属性的名称。" + + +msgid "Some attributes (%s) were modified and are highlighted below." +msgstr "下面有一些属性(%s) 被修改了,而且被标识为高亮。" + + +msgid "An attribute (%s) was modified and is highlighted below." +msgstr "下面一个属性(%s) 被修改了,而且被标识为高亮" + + +msgid "Viewing entry in read-only mode." +msgstr "以只读模式查看条目。" + + +msgid "no new attributes available for this entry" +msgstr "这个条目没有提供新的属性" + + +msgid "no new binary attributes available for this entry" +msgstr "这个条目没有提供新的二进制属性" + + +msgid "Binary value" +msgstr "二进制值" + + +msgid "Add new binary attribute" +msgstr "增加新的二进制值" + + +msgid "Note: '%s' is an alias for '%s'" +msgstr "注意: '%s'是'%s'的一个别名" + + +msgid "Required attribute for objectClass(es) %s" +msgstr "objectClass(es) %s所必需的属性" + + +msgid "download value" +msgstr "下载值" + + +msgid "delete attribute" +msgstr "删除属性" -#: ../../htdocs/copy_form.php:51 -msgid "to a new object" -msgstr "成为一个新的对象" -#: ../../lib/AttributeFactory.php:38 ../../htdocs/compare.php:357 msgid "true" msgstr "真的" -#: ../../lib/functions.php:1277 -msgid "" -"uidpool_dn not found. Please check filter (arg 3) or set up uidpool_dn in " -"config file" -msgstr "" -#: ../../htdocs/update.php:46 -msgid "" -"update_array is malformed. This might be a phpLDAPadmin bug. Please report " -"it." -msgstr "看不懂update_array。 这可能是phpLDAPadmin的错漏。 请报告。" +msgid "false" +msgstr "假的" -#: ../../htdocs/add_value_form.php:93 -msgid "value to" -msgstr "赋值给" -#: ../../htdocs/add_value_form.php:112 -msgid "values for attribute" -msgstr "属性值" +msgid "none, remove value" +msgstr "什么都没有,将值移除" + + +msgid "Really delete attribute" +msgstr "真的删除属性" + + +msgid "Add New Value" +msgstr "增加新的值" + + +msgid "The server does not fully support the LDAP protocol." +msgstr "这个服务器并不完全支持LDAP 协议。" + + +msgid "Your version of PHP does not correctly perform the query." +msgstr "你的PHP版本不能正确地完成查询。" + + +msgid "phpLDAPadmin doesn't know how to fetch the schema for your server." +msgstr "phpLDAPadmin不知道如果获取你的服务器的格式。" + + +msgid "Or lastly, your LDAP server doesnt provide this information." +msgstr "或者最后,你的LDAP服务器没有提供该信息。" + + +msgid "Jump to an objectClass" +msgstr "跳转到一个objectClass" + + +msgid "View the schema description for this objectClass" +msgstr "查看该objectClass的格式描述" + + +msgid "Jump to an attribute type" +msgstr "跳转到一个属性类型" + + +msgid "Jump to a matching rule" +msgstr "跳转到一个匹配的规则" + + +msgid "Schema for server" +msgstr "服务器的格式" + + +msgid "Required Attributes" +msgstr "必需的属性" + + +msgid "required" +msgstr "必需的" + + +msgid "Optional Attributes" +msgstr "可选的属性" + + +msgid "Optional Binary Attributes" +msgstr "可选的二进制属性" + + +msgid "OID" +msgstr "OID" + + +msgid "Aliases" +msgstr "别名" + + +msgid "Description" +msgstr "描述" + + +msgid "no description" +msgstr "没有描述" + + +msgid "Name" +msgstr "名称" + + +msgid "Equality" +msgstr "相等" + + +msgid "This objectClass is obsolete." +msgstr "该objectClass过久了。" + + +msgid "Inherits from" +msgstr "继承于" + + +msgid "Inherited from" +msgstr "被继承于" + + +msgid "Parent to" +msgstr "双亲指向" + + +msgid "Jump to this objectClass definition" +msgstr "跳转到该objectClass的定义处" + + +msgid "Matching Rule OID" +msgstr "匹配规则 OID" + + +msgid "Syntax OID" +msgstr "语法规则OID" + + +msgid "not applicable" +msgstr "不可应用" + + +msgid "not specified" +msgstr "未指定的" + + +msgid "character" +msgstr "单个字符" + + +msgid "characters" +msgstr "多个字符" + + +msgid "Used by objectClasses" +msgstr "被objectClasses所使用的" + + +msgid "Used by Attributes" +msgstr "被属性所使用的" + + +msgid "Maximum Length" +msgstr "最大长度" + + +msgid "Attribute Types" +msgstr "属性类型" + + +msgid "Syntaxes" +msgstr "语法规则" + + +msgid "Matching Rules" +msgstr "匹配规则" + + +msgid "Obsolete" +msgstr "作废的" + + +msgid "Ordering" +msgstr "排序" + + +msgid "Substring Rule" +msgstr "子串规则" + + +msgid "Single Valued" +msgstr "单个赋值的" + + +msgid "Collective" +msgstr "集体的" + + +msgid "User Modification" +msgstr "用户修改" + + +msgid "Usage" +msgstr "使用格式" + + +msgid "Could not retrieve schema from" +msgstr "不能找回格式的地方" + + +msgid "Type" +msgstr "类型" + + +msgid "No such schema item: \"%s\"" +msgstr "没有这样的格式项目: \"%s\"" + + +msgid "Entry %s deleted successfully." +msgstr "成功删除条目:%s。" + + +msgid "You must specify a DN" +msgstr "你必须指定一个DN" + + +msgid "Could not delete the entry: %s" +msgstr "不能删除该条目: %s" + + +msgid "No such entry: %s" +msgstr "没有这样的条目: %s" + + +msgid "Delete %s" +msgstr "删除:%s" + + +msgid "Permanently delete all children also?" +msgstr "也要永久删除所的子条目吗?" + + +msgid "This entry is the root of a sub-tree containing %s entries." +msgstr "该条目是根,其子树中包含有条目:%s。" + -#: ../../htdocs/delete_form.php:48 msgid "view entries" msgstr "查看条目" -#: ../../htdocs/schema.php:20 -msgid "view schema" -msgstr "" -#: ../../htdocs/server_info.php:16 -msgid "view server informations" -msgstr "" +msgid "phpLDAPadmin can recursively delete this entry and all %s of its children. See below for a list of all the entries that this action will delete. Do you want to do this?" +msgstr "phpLDAPadmin可以递归地删除该条目及其所有子条目中的:%s。 关于这个动作可能会删除的所有条目列表,请查看下面。 你真的想这样做吗?" + + +msgid "Note: this is potentially very dangerous and you do this at your own risk. This operation cannot be undone. Take into consideration aliases, referrals, and other things that may cause problems." +msgstr "注释: 这个可能潜在危险,后果自负。 这个操作不可恢复。 一定要考虑到aliases(别名)、 referrals(提名)以及其它可能引起问题的事情。" + + +msgid "Delete all %s objects" +msgstr "删除所有的对象:%s " + + +msgid "Recursive delete progress" +msgstr "递归式删除过程" + + +msgid "Entry %s and sub-tree deleted successfully." +msgstr "成功删除条目%s 和子树。" + + +msgid "Failed to delete entry %s" +msgstr "删除条目:%s 失败" + + +msgid "List of entries to be deleted:" +msgstr "将被删除的条目列表:" + + +msgid "Are you sure you want to permanently delete this object?" +msgstr "确认你想永久删除这个对象吗?" + + +msgid "DN" +msgstr "DN" + + +msgid "The attribute \"%s\" is flagged as read-only in the phpLDAPadmin configuration." +msgstr " 在phpLDAPadmin的配置中,属性\"%s\"被标识为只读。" + + +msgid "No attribute name specified." +msgstr "没有指定属性名称。" + + +msgid "No DN specified" +msgstr "没有指定DN " + + +msgid "You left the attribute value blank. Please go back and try again." +msgstr "属性值为空白。 请返回再试。" + + +msgid "Failed to add the attribute." +msgstr "增加属性失败。" + + +msgid "The file you chose is either empty or does not exist. Please go back and try again." +msgstr "你选择的文件为空或不存在。 请返回再试。" + + +msgid "Security error: The file being uploaded may be malicious." +msgstr "安全错误: 上传的这个文件可能存在安全危险。" + + +msgid "Your PHP configuration has disabled file uploads. Please check php.ini before proceeding." +msgstr "你的PHP配置不允许上传文件。 请在进行下步之前检查一下php.ini。" + + +msgid "The file you uploaded is too large. Please check php.ini, upload_max_size setting" +msgstr "你上传的文件太大。 请检查php.ini中的upload_max_size 设置" + + +msgid "The file you selected was only partially uploaded, likley due to a network error." +msgstr "你选择的文件上传不完整,可能是因为网络的缘故。" + + +msgid "Maximum file size: %s" +msgstr "最大文件尺寸: %s" + + +msgid "Modification successful!" +msgstr "成功修改!" + + +msgid "Since you changed your password, you must now login again with your new password." +msgstr "因为你更改了密码,你现在必须使用新的密码重新登录。" + + +msgid "New Required Attributes" +msgstr "新增必需的属性" + + +msgid "This action requires you to add" +msgstr "这个动作要求你增加" + + +msgid "new attributes" +msgstr "新增属性" + + +msgid "Instructions: In order to add these objectClass(es) to this entry, you must specify" +msgstr "指导: 为了增加这个objectClass 到该条目,你必须指定" + + +msgid "that this objectClass requires. You can do so in this form." +msgstr "这该objectClass所必需的。 你可以在这个表里完成。" + + +msgid "Add ObjectClass and Attributes" +msgstr "增加ObjectClass 和属性" + + +msgid "ObjectClasses" +msgstr "ObjectClasses" + + +msgid "Click to popup a dialog to select an entry (DN) graphically" +msgstr "点击弹出一个对话框来以图形方式选择一个条目(DN) " + + +msgid "You cannot perform updates while server is in read-only mode" +msgstr "服务器是以只读方式运行,你不能完成更新" + + +msgid "Bad server id" +msgstr "错误的服务器id" + + +msgid "Not enough information to login to server. Please check your configuration." +msgstr "没有足够的信息来登录服务器。 请检查你的配置。" + + +msgid "Could not connect to LDAP server." +msgstr "不能连接到LDAP服务器。" + + +msgid "Could not connect to \"%s\" on port \"%s\"" +msgstr "不能连接到\"%s\" 的\"%s\"端口" + + +msgid "Could not perform ldap_mod_add operation." +msgstr "不能完成ldap_mod_add 操作。" + + +msgid "Home" +msgstr "主页" + + +msgid "Help" +msgstr "帮助" + + +msgid "Success" +msgstr "成功" + + +msgid "Server: " +msgstr "服务器:" + + +msgid "Looking in: " +msgstr "正在查看:" + + +msgid "No DN specified in query string!" +msgstr "在查询串中没有指定DN!" + + +msgid "Back Up..." +msgstr "后退..." + + +msgid "no entries" +msgstr "没有条目" + + +msgid "Could not determine base DN" +msgstr "不能确定base DN(基DN)" + + +msgid "This could happen for several reasons, the most probable of which are:" +msgstr "出现这种情况可能有几个原因,其中最有可能的是:" + + +msgid "Yes" +msgstr "是" + + +msgid "No" +msgstr "不" + + +msgid "Go" +msgstr "开始" + + +msgid "Delete" +msgstr "删除" + + +msgid "Back" +msgstr "后退" + + +msgid "object" +msgstr "对象" + + +msgid "Delete all" +msgstr "删除所有的" + + +msgid "hint" +msgstr "提示" + + +msgid "bug" +msgstr "错漏" + + +msgid "warning" +msgstr "警告" + + +msgid "light" +msgstr "light" + + +msgid "Proceed >>" +msgstr "继续 >>" + + +msgid "Please set $jpeg_temp_dir to a writable directory in the phpLDAPadmin config.php" +msgstr "请在phpLDAPadmin的config.php里,将$jpeg_temp_dir设置到一个可写的目录" + + +msgid "Could not write to the $jpeg_temp_dir directory %s. Please verify that your web server can write files there." +msgstr "不能将%s写入$jpeg_temp_dir目录。请确定你的web服务器能够在那里写文件。" + + +msgid "Could not fetch jpeg data from LDAP server for attribute %s." +msgstr "不能从LDAP服务器为属性%s获得jpeg数据。" + + +msgid "Delete photo" +msgstr "删除图片" + + +msgid "Add new" +msgstr "新增" + + +msgid "value to" +msgstr "赋值给" + + +msgid "Distinguished Name" +msgstr "识别名(DN)" + + +msgid "Current list of" +msgstr "当前列表" + + +msgid "values for attribute" +msgstr "属性值" + + +msgid "Note: You will get an \"inappropriate matching\" error if you have not setup an EQUALITY rule on your LDAP server for this attribute." +msgstr "注释: 如果在你的LDAP服务器上没有为这个属性设置EQUALITY 规则的话,你可能会碰到\"inappropriate matching(不正确的匹配)\"这样的错误。" + + +msgid "Enter the value you would like to add:" +msgstr "输入你想增加的值:" + + +msgid "Note: You may be required to enter new attributes that these objectClass(es) require" +msgstr "注释: 可能会要求你输入该objectClass所必需的新属性。" + + +msgid "Syntax" +msgstr "规则" + + +msgid "You left the destination DN blank." +msgstr " 目标DN项为空。" + + +msgid "The destination entry (%s) already exists." +msgstr "目标条目 (%s) 已经存在。" + + +msgid "The destination container (%s) does not exist." +msgstr "目标容器 (%s) 不存在。" + + +msgid "The source and destination DN are the same." +msgstr "源和目标DN 相同。" + + +msgid "Copying " +msgstr "正在复制 " + + +msgid "Recursive copy progress" +msgstr "递归手复制过程" + + +msgid "Building snapshot of tree to copy... " +msgstr "正在建立用于复制的树的快照… " + + +msgid "Copy successful! Would you like to " +msgstr "复制成功! 你还想要 " + + +msgid "view the new entry" +msgstr "查看新条目" + + +msgid "Failed to copy DN: " +msgstr "复制DN不成功: " + + +msgid "Template" +msgstr "样板" + + +msgid "using template" +msgstr "使用样板" + + +msgid "Go to %s" +msgstr "转到 %s" + + +msgid "This is a structural ObjectClass and cannot be removed." +msgstr "这是个结构化的ObjectClass,因此不能移除。" + + +msgid "structural" +msgstr "结构化" + + +msgid "Copy " +msgstr "复制" + + +msgid "to a new object" +msgstr "成为一个新的对象" + + +msgid "Destination DN" +msgstr "目标DN" + + +msgid "The full DN of the new entry to be created when copying the source entry" +msgstr "在复制该源条目时,将被建立的新条目的完整DN " + + +msgid "Destination Server" +msgstr "目标服务器" + + +msgid "Hint: Copying between different servers only works if there are no schema violations" +msgstr "提示: 在两个不同的服务器之间复制时,要求它们没有\"schema(格式)冲突\"" + + +msgid "Recursively copy all children of this object as well." +msgstr "另外还要递归复制此对象的所有子内容。" + + +msgid "Recursive copy" +msgstr "递归复制" + + +msgid "Filter" +msgstr "过滤器" + + +msgid "When performing a recursive copy, only copy those entries which match this filter" +msgstr "在完成一个递归复制时,只会复制哪些匹配这个过滤器的条目。" + + +msgid "Delete after copy (move):" +msgstr "复制后删除(即移动):" + + +msgid "Make sure your filter (above) will select all child records." +msgstr "确认你的过滤器(见上面)会选择所有的子记录。" + + +msgid "You left the value blank for required attribute (%s)." +msgstr "必需属性(%s)的值为空白。" + + +msgid "Redirecting..." +msgstr "重定向..." + + +msgid "here" +msgstr "这里" + + +msgid "Could not add the object to the LDAP server." +msgstr "不能增加该对象到LDAP服务器。" + + +msgid "Create Object" +msgstr "创建对象" + + +msgid "Choose a template" +msgstr "选择样板" + + +msgid "Select a template for the creation process" +msgstr "选择用于创建过程的样板" + + +msgid "Save as file" +msgstr "另存为文件" + + +msgid "You left the RDN field blank." +msgstr "RDN段为空白。" + + +msgid "The container you specified (%s) does not exist. Please try again." +msgstr "你指定的(%s)容器不存在。 请再试试。" + + +msgid "You did not select any ObjectClasses for this object. Please go back and do so." +msgstr "你没有为该对象选择任何ObjectClasses。 请返回照做。" + + +msgid "Hint: You must choose exactly one structural objectClass (shown in bold above)" +msgstr "提示: 你必有选择一个结构化的objectClass (如上面粗体所显示的)" + + +msgid "Your config specifies a handler of \"%s\" for this template but this file is not readable because the permissions are too strict." +msgstr "你在配置中指定了用于该样板的\"%s\"的手柄,但是这个文件因为禁止权限太严格而不可读。" + + +msgid "Step 1 of 2: Name and ObjectClass(es)" +msgstr "第一步: Name 和 ObjectClass(es)" + + +msgid "Step 2 of 2: Specify attributes and values" +msgstr "第二步: 指定属性和值" + + +msgid "Relative Distinguished Name" +msgstr "Relative Distinguished Name(相对标识名)" + + +msgid "RDN" +msgstr "RDN" + + +msgid "(example: cn=MyNewPerson)" +msgstr "(例如: cn=MyNewPerson)" + + +msgid "Container" +msgstr "Container(容器)" + + +msgid "You have not logged into the selected server yet, so you cannot perform searches on it." +msgstr "你还没有登入所选择的服务器,因此你不能在它上面完成搜索。" + + +msgid "Click here to go to the login form" +msgstr "点击这里转到登录表格" + + +msgid "Unrecognized criteria option: " +msgstr "不认识的criteria(标准)选项: " + + +msgid "If you want to add your own criteria to the list. Be sure to edit search.php to handle them. Quitting." +msgstr "如果你想增加自己的criteria 到列表里。 记得编辑search.php 来处理它们。 退出。" + + +msgid "Entries found: " +msgstr "找到的条目: " + + +msgid "Filter performed: " +msgstr "应用了的过滤器: " + + +msgid "Search performed by phpLDAPadmin in" +msgstr "phpLDAPadmin完成搜索,用时" + + +msgid "seconds" +msgstr "秒" + + +msgid "The scope in which to search" +msgstr "搜索的范围" + + +msgid "Sub (entire subtree)" +msgstr "Sub (整个子树)" + + +msgid "One (one level beneath base)" +msgstr "One (base之下的一级)" + + +msgid "Base (base dn only)" +msgstr "Base (仅限于base dn)" + + +msgid "Standard LDAP search filter. Example: (&(sn=Smith)(givenname=David))" +msgstr "标准的LDAP搜索过滤器。 例如: (&(sn=Smith)(givenname=David))" + + +msgid "Search Filter" +msgstr "搜索过滤器" + + +msgid "A list of attributes to display in the results (comma-separated)" +msgstr "用于显示在结果中的属性列表(以逗号隔开)" + + +msgid "equals" +msgstr "等于" + + +msgid "starts with" +msgstr "开始于" + + +msgid "contains" +msgstr "包含" + + +msgid "ends with" +msgstr "结束于" + + +msgid "sounds like" +msgstr "看起来象" + + +msgid "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP or perhaps your LDAP server has access control specified that prevents LDAP clients from accessing the RootDSE." +msgstr "不能从服务器上取得LDAP信息。 可能是因为你的PHP存在这个错漏,或者是你的LDAP服务器里指定的\"访问控制\"禁止LDAP客户端访问RootDSE。" + + +msgid "Server info for: " +msgstr "服务器信息: " + + +msgid "Server reports the following information about itself" +msgstr "下列信息是服务器报告的关于它自己的信息" + + +msgid "This server has nothing to report." +msgstr "该服务器没有报告任何信息。" + + +msgid "update_array is malformed. This might be a phpLDAPadmin bug. Please report it." +msgstr "看不懂update_array。 这可能是phpLDAPadmin的错漏。 请报告。" + + +msgid "Could not perform ldap_modify operation." +msgstr "不能完成ldap_modify 操作。" + + +msgid "Do you want to make these changes?" +msgstr "你想应用这些变化吗?" + + +msgid "Attribute" +msgstr "属性" + + +msgid "Old Value" +msgstr "旧值" + + +msgid "New Value" +msgstr "新值" + + +msgid "[attribute deleted]" +msgstr "[删除的属性]" + + +msgid "Commit" +msgstr "提交" + + +msgid "Cancel" +msgstr "取消" + + +msgid "You made no changes" +msgstr "你没有进行更改" + + +msgid "Go back" +msgstr "返回" + + +msgid "Use the menu to the left to navigate" +msgstr "使用左边菜单来导航" + + +msgid "Credits" +msgstr "荣誉" + + +msgid "ChangeLog" +msgstr "变更记录" + + +msgid "Donate" +msgstr "捐赠" + + +msgid "phpLDAPadmin logo" +msgstr "phpLDAPadmin 标识" + + +msgid "Purge caches" +msgstr "清空缓存" + + +msgid "No cache to purge." +msgstr "没有缓存可清空。" + + +msgid "Purged %s bytes of cache." +msgstr "清空缓存%s 个字节。" + + +msgid "Purge all cached data in phpLDAPadmin, including server schemas." +msgstr "清空所有在phpLDAPadmin中缓存的数据,包括服务器schema(格式)。" + + +msgid "Unsafe file name: " +msgstr "不安全的文件名: " + + +msgid "No such file: " +msgstr "没有这样的文件: " + + +msgid "You have enabled auto_uid_numbers for %s in your configuration," +" but you have not specified the auto_uid_number_mechanism. Please correct" +" this problem." +msgstr "在你的配置中为 %s 启用了auto_uid_numbers," +" 但是你没有指定auto_uid_number_mechanism。 请更正" +" 这个问题" + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"uidpool\"" +" in your configuration for server %s, but you did not specify the" +" audo_uid_number_uid_pool_dn. Please specify it before proceeding." +msgstr "你在服务%s的配置中指定\"auto_uid_number_mechanism\" 为 \"uidpool\"," +" 但是你没有指定" +" audo_uid_number_uid_pool_dn。 请在进行下步前指定它。" + + +msgid "It appears that the uidPool you specified in your configuration (\"%s\")" +" does not exist." +msgstr "好像你在配置(\"%s\")中指定的uidPool" +" 不存在。" + + +msgid "You specified the \"auto_uid_number_mechanism\" as \"search\" in your" +" configuration for server %s, but you did not specify the" +" \"auto_uid_number_search_base\". Please specify it before proceeding." +msgstr "你在服务器%s的配置文件中指定了\"auto_uid_number_mechanism\" 为 \"search\"," +" 但是你没有指定" +" \"auto_uid_number_search_base\"。 请在进行下步前指定它。" + + +msgid "Unable to bind to %s with your with auto_uid credentials. Please check your configuration file." +msgstr "使用auto_uid credentials不能绑定到%s。 请检查你的配置文件。" + + +msgid "Your phpLDAPadmin configuration specifies an invalid auto_uid_search_base for server %s" +msgstr "你的phpLDAPadmin配置为服务器%s指定了一个非法的auto_uid_search_base " + + +msgid "You specified an invalid value for auto_uid_number_mechanism (\"%s\")" +" in your configration. Only \"uidpool\" and \"search\" are valid." +" Please correct this problem." +msgstr "你在配置文件中为auto_uid_number_mechanism (\"%s\")指定了一个非法的值" +" 。 只有\"uidpool\" 和 \"search\" 是合法的。" +" 请更正这个问题。" + + +msgid "Error: You have an error in your config file. The only three allowed values" +" for auth_type in the $servers section are 'session', 'cookie', and 'config'. You entered '%s'," +" which is not allowed. " +msgstr "错误: 在你的配置文件中有个错误。 仅允许用于" +" $servers部分的auth_type的值为 'session', 'cookie', and 'config'。 输入'%s'," +" 这是不允许的。 " + + +msgid "Unable to bind to %s with your with unique_attrs credentials. Please check your configuration file." +msgstr "不能使用unique_attrs 绑定到%s。 请检查你的配置文件。" + + +msgid "Your attempt to add %s (%s) to
%s
is NOT allowed. That attribute/value belongs to another entry.

You might like to search for that entry." +msgstr "你企图增加%s (%s) 到
%s
,这是不允许的。 该属性/值属于任何条目。

你可能想搜索 该条条目。" + + +msgid "Your PHP install does not support TLS." +msgstr "你安装的PHP 不支持TLS。" + + +msgid "Could not start TLS. Please check your LDAP server configuration." +msgstr "不能启用TLS。 请检查你的LDAP 服务器配置。" + + +msgid "Could not bind anonymously to server." +msgstr "不能匿名绑定到服务器。" + + +msgid "Could not bind to the LDAP server." +msgstr "不能绑定到该LDAP服务器。" + + +msgid "Anonymous Bind" +msgstr "匿名绑定" + + +msgid "Bad username or password. Please try again." +msgstr "错误的用户名或密码。 请再试试。" + + +msgid "Successfully logged into server %s" +msgstr "成功登录到服务器%s" + + +msgid "Could not set cookie." +msgstr "不能设置cookie。" + + +msgid "LDAP said: %s" +msgstr "LDAP说: %s" + + +msgid "Error" +msgstr "出错" + + +msgid "browse" +msgstr "浏览" + + +msgid "Your system crypt library does not support extended DES encryption." +msgstr "你的系统加密库不支持扩展的DES加密。" + + +msgid "Your system crypt library does not support blowfish encryption." +msgstr "你的系统加密库不支持blowfish加密。" + + +msgid "Your system crypt library does not support md5crypt encryption." +msgstr "你的系统加密库不支持md5crypt加密。" + + +msgid "jpegPhoto contains errors
" +msgstr "jpegPhoto 包含有错
" + + +msgid "Error number: %s (%s)" +msgstr "错误代号 %s" + + +msgid "Description: %s

" +msgstr "描述: %s

" + + +msgid "Error number: %s

" +msgstr "错误代号: %s

" + + +msgid "Description: (no description available)
" +msgstr "描述: (没有描述可提供)
" + + +msgid "Is this a phpLDAPadmin bug? If so, please report it." +msgstr "这是个phpLDAPadmin 错漏吗? 如果是,就请报告一个。" + + +msgid "Unrecognized error number: " +msgstr "不认识的错误代号: " + + +msgid "

" +" " +" " +" " +"
" +" You found a non-fatal phpLDAPadmin bug!
Error:%s (%s)
File:%s line %s, caller %s
Versions:PLA: %s, PHP: %s, SAPI: %s" +"
Web server:%s
Please check and see if this bug has been reported here.
If it hasnt been reported, you may report this bug by clicking here.

" +msgstr "
" +"
" +" 你发现了一个非致使的phpLDAPadmin 错漏!
错误:%s (%s)
文件:%s%s,调用函数 %s
版本:PLA: %s, PHP: %s, SAPI: %s" +"
Web 服务器:%s
" +" 请点击这里报告该错漏

" + + +msgid "Congratulations! You found a bug in phpLDAPadmin.

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA Version:%s
PHP Version:%s
PHP SAPI:%s
Web server:%s
" +"
" +" Please report this bug by clicking below!" +msgstr "恭喜你! 你发现了phpLDAPadmin的一个错漏。

" +" " +" " +" " +" " +" " +" " +" " +" " +" " +" " +"
错误:%s
级别:%s
文件:%s
行:%s
调用者:%s
PLA 版本:%s
PHP 版本:%s
PHP SAPI:%s
PHP 服务器:%s
" +"
" +" 请通过点击下面来报告这个错漏!" + + +msgid "Import LDIF File" +msgstr "导入LDIF文件" + + +msgid "Select an LDIF file:" +msgstr "选择一个LDIF文件:" + + +msgid "Don't stop on errors" +msgstr "发生错误时不停止" + + +msgid "Adding..." +msgstr "增加..." + + +msgid "Deleting..." +msgstr "删除..." + + +msgid "Renaming..." +msgstr "更名..." + + +msgid "Modifying..." +msgstr "修改..." + + +msgid "No version found. Assuming 1." +msgstr "没有找到版本号。 假设 1。" + + +msgid "A valid dn line is required." +msgstr "要求一个合法的dn行。" + + +msgid "Missing uploaded file." +msgstr "丢失上传的文件。" + + +msgid "No LDIF file specified. Please try again." +msgstr "没有指定LDIF文件。 请再试试。" + + +msgid "Uploaded LDIF file is empty." +msgstr "上传的LDIF 文件为空。" + + +msgid "empty" +msgstr "空的" + + +msgid "File" +msgstr "文件" + + +msgid "%s bytes" +msgstr "%s 字节" + + +msgid "Failed" +msgstr "失败" + + +msgid "LDIF Parse Error" +msgstr "LDIF解析错误" + + +msgid "Could not add object:" +msgstr "不能增加对象:" + + +msgid "Could not rename object:" +msgstr "不能更名对象:" + + +msgid "Could not delete object:" +msgstr "不能删除对象:" + + +msgid "Could not modify object:" +msgstr "不能修改对象:" + + +msgid "Line Number:" +msgstr "行号:" + + +msgid "Line:" +msgstr "行数:" + + +msgid "Export format" +msgstr "导出格式" + + +msgid "Line ends" +msgstr "行结束" + + +msgid "You must choose an export format." +msgstr "不必须选择一个导出格式。" + + +msgid "Invalid export format" +msgstr "非法的导出格式" + + +msgid "No available exporter found." +msgstr "没有找到可用导出器。" + + +msgid "Encountered an error while performing search." +msgstr "在执行搜索时碰到一个错误。" + + +msgid "Showing results %s through %s." +msgstr "显示结果%s,它是通过%s来完成的。" + + +msgid "Searching..." +msgstr "搜索..." + + +msgid "Notice, search size limit exceeded." +msgstr "注意,超出搜索大小限制。" + + +msgid "Entry" +msgstr "条目" + + +msgid "LDIF Export for: %s" +msgstr "为: %s,导出LDIF" + + +msgid "Generated by phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) on %s" +msgstr "由phpLDAPadmin ( http://phpldapadmin.sourceforge.net/ ) 在 %s上生成的" + + +msgid "Total Entries" +msgstr "条目总数" + + +msgid "DSLM Export for: %s" +msgstr "为: %s,导出DSLM" + + +msgid "Include system attributes" +msgstr "包含系统属性" + + +msgid "CSV (Spreadsheet)" +msgstr "CSV (Spreadsheet)" + + +msgid "You left the password blank." +msgstr "你的密码为空。" + + +msgid "No one is logged in to that server." +msgstr "没人登录到该服务器。" + + +msgid "Could not logout." +msgstr "不能退出。" + + +msgid "Unknown auth_type: %s" +msgstr "不能识别的auth_type: %s" + + +msgid "Logged out successfully from server %s" +msgstr "成功从%s服务器退出" + + +msgid "Authenticate to server %s" +msgstr "认证到服务器%s" + + +msgid "Warning: This web connection is unencrypted." +msgstr "警告: 此web连接没有加密。" + + +msgid "You are not using 'https'. Web browser will transmit login information in clear text." +msgstr "你没有使用'https'。 Web浏览器将会以明文传输登录信息。" + + +msgid "Login DN" +msgstr "登录DN" + + +msgid "User name" +msgstr "用户名" + + +msgid "Password" +msgstr "密码" + + +msgid "Authenticate" +msgstr "认证" + + +msgid "Sorry, you are not allowed to use phpLDAPadmin with this LDAP server." +msgstr "对不起,这台LDAP服务器不允许你使用phpLDAPadmin。" + + +msgid "Entry Chooser" +msgstr "条目选择器" + + +msgid "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do so. An example config file is provided in 'config/config.php.example'" +msgstr "你需要配置phpLDAPadmin。 编辑文件'config.php'就可以。 有个样例配置文件提供在 'config.php.example'里" + + +msgid "Deletes not allowed in read only mode." +msgstr "在只读模式下不允许删除。" + + +msgid "Error calling mass_delete.php. Missing mass_delete in POST vars." +msgstr "错误调用mass_delete.php。在POST变量中丢失 mass_delete。" + + +msgid "mass_delete POST var is not an array." +msgstr "mass_delete POST 变量不是个数组。" + + +msgid "Mass deletion is not enabled. Please enable it in config.php before proceeding." +msgstr "Mass deletion(大量删除)没有启用。 请在进行下一步前在config.php中启用它。" + + +msgid "Mass Deleting" +msgstr "正在大量删除" + + +msgid "Deletion progress on server \"%s\"" +msgstr "服务器\"%s\"上的删除过程" + + +msgid "Malformed mass_delete array." +msgstr "不规则的mass_delete 数组。" + + +msgid "You did not select any entries to delete." +msgstr "你没有选择任何要删除的条目。" + + +msgid "Deleting %s" +msgstr "正在删除 %s" + + +msgid "%s of %s entries failed to be deleted." +msgstr "删除条目%s(属于%s)失败。" + + +msgid "All entries deleted successfully." +msgstr "所有条目删除成功。" + + +msgid "Confirm mass delete of %s entries on server %s" +msgstr "确认大量删除条目%s(在服务器%s上)" + + +msgid "Yes, delete!" +msgstr "是的,删除!" + + +msgid "You cannot rename an entry which has children entries (eg, the rename operation is not allowed on non-leaf entries)" +msgstr "你不能更名一个带有子条目的条目,举例,更名操作允许在非叶子条目上完成" + + +msgid "You did not change the RDN" +msgstr "你不能更改RDN" + + +msgid "Invalid RDN value" +msgstr "无效的RDN值" + + +msgid "Could not rename the entry" +msgstr "不能更名该条目" + + +msgid "Passwords match!" +msgstr "密码匹配!" + + +msgid "Passwords do not match!" +msgstr "密码不匹配!" + + +msgid "Password Checker Tool" +msgstr "密码检查工具" + + +msgid "Compare" +msgstr "比较" + + +msgid "To" +msgstr "与" + + +msgid "Using the" +msgstr "使用该" + + +msgid "You may switch to the " +msgstr "你可以转换到" + + +msgid "default template" +msgstr "默认模板" + + +msgid "User Account (posixAccount)" +msgstr "用户账号(posixAccount)" + + +msgid "Address Book Entry (inetOrgPerson)" +msgstr "地址簿条目(inetOrgPerson)" + + +msgid "Address Book Entry (mozillaOrgPerson)" +msgstr "地址簿条目(mozillaOrgPerson)" + + +msgid "Kolab User Entry" +msgstr "Kolab用户条目" + + +msgid "Organisational Unit" +msgstr "组织化单元(Organizational Unit)" + + +msgid "Organisational Role" +msgstr "组织化角色" + + +msgid "Posix Group" +msgstr "Posix组" + + +msgid "Samba NT Machine" +msgstr "Samba NT 主机" + + +msgid "Samba 3 NT Machine" +msgstr "Samba 3 NT 主机" + + +msgid "Samba User" +msgstr "Samba 用户" + + +msgid "Samba 3 User" +msgstr "Samba 3 用户" + + +msgid "Samba 3 Group Mapping" +msgstr "Samba 3 组映像(Mapping)" + + +msgid "DNS Entry" +msgstr "DNS 条目" + + +msgid "Simple Security Object" +msgstr "简单安全对象(Simple Security Object)" + + +msgid "Courier Mail Account" +msgstr "Courier 邮件账号" + + +msgid "Courier Mail Alias" +msgstr "Courier 邮件别名" + + +msgid "LDAP Alias" +msgstr "LDAP 别名" + + +msgid "Sendmail Cluster" +msgstr "Sendmail 集群" + + +msgid "Sendmail Domain" +msgstr "Sendmail 域" + + +msgid "Sendmail Alias" +msgstr "Sendmail 别名" + + +msgid "Sendmail Virtual Domain" +msgstr "Sendmail 虚拟域" + + +msgid "Sendmail Virtual Users" +msgstr "Sendmail 虚拟用户" + + +msgid "Sendmail Relays" +msgstr "Sendmail 回复" + + +msgid "Custom" +msgstr "自定义" + + +msgid "My Samba domain Name" +msgstr "我的Samba域名" + + +msgid "Administrators" +msgstr "管理员" + + +msgid "Users" +msgstr "用户" + + +msgid "Guests" +msgstr "一般用户(Guests)" + + +msgid "Power Users" +msgstr "增强用户(Power Users)" + + +msgid "Account Operators" +msgstr "账号管理员" + + +msgid "Server Operators" +msgstr "服务器管理员" + + +msgid "Print Operators" +msgstr "打印管理员" + + +msgid "Backup Operators" +msgstr "备份管理员" + + +msgid "Replicator" +msgstr "复制器(Replicator)" + + +msgid " Unable to create the Samba passwords. Please, check the configuration in template_config.php" +msgstr "不能建立Samba密码。请检查文件template_config.php里的配置。" + + +msgid "Error: You have an error in your samba confguration." +msgstr "错误:在你的samba配置里有个错误。" + + +msgid "Error: A name and a sid for your samba domain need to be provided." +msgstr "错误:需要为你的samba域提供一个名字(name)和一个sid。" + + +msgid "Error: No name provided for samba domain." +msgstr "错误:没有为samba域提供名字。" + + +msgid "Error: No sid provided for samba domain." +msgstr "错误:没有为samba域提供sid。" + + +msgid "Samba Account" +msgstr "Samba 账号" + + +msgid "samba account" +msgstr "samba 账号" + + +msgid "New User Account" +msgstr "新建用户账号" + + +msgid "Hint: To customize this template, edit the file templates/creation/new_user_template.php" +msgstr "提示:想要定制模板的话,你可以编辑文件templates/creation/new_user_template.php" + + +msgid "First name" +msgstr "第一个名字" + + +msgid "Last name" +msgstr "最后一个名字" + + +msgid "first" +msgstr "第一个" + + +msgid "last" +msgstr "最后一个" + + +msgid "Common name" +msgstr "公有名字(Common name)" + + +msgid "Encryption" +msgstr "加密方法" + + +msgid "Login Shell" +msgstr "登录Shell" + + +msgid "Home Directory" +msgstr "主目录" + + +msgid "UID Number" +msgstr "UID号" + + +msgid "(automatically determined)" +msgstr "(自动检测到的)" + + +msgid "Group" +msgstr "组" + + +msgid "GID Number" +msgstr "GID号" + + +msgid "Your passwords don't match. Please go back and try again." +msgstr "你的密码不匹配。请返回再试试。" + + +msgid "You cannot leave the %s blank. Please go back and try again." +msgstr "%s处不能为空。请返回再试试。" + + +msgid "You can only enter numeric values for the %s field. Please go back and try again." +msgstr "%s字段不能只输入数字。请返回再试试。" + + +msgid "The container you specified (%s) does not exist. Please go back and try again." +msgstr "你指定的容器(%s)不存在。请返回再试试。" + + +msgid "Confirm account creation" +msgstr "确认创建账号" + + +msgid "[secret]" +msgstr "[隐秘]" + + +msgid "Create Account" +msgstr "创建账号" + + +msgid "New Address Book Entry" +msgstr "新建地址簿条目" + + +msgid "Organisation" +msgstr "组织" + + +msgid "Address" +msgstr "地址" + + +msgid "City" +msgstr "城市" + + +msgid "Postal code" +msgstr "邮政编码" + + +msgid "Street" +msgstr "街道" + + +msgid "Work phone" +msgstr "工作电话" + + +msgid "Fax" +msgstr "传真(Fax)" + + +msgid "Mobile" +msgstr "移动电话(Mobile)" + + +msgid "Email" +msgstr "电子邮件" + + +msgid "You cannot leave the Common Name blank. Please go back and try again." +msgstr "公有名字(Common Name)不能为空。请返回再试试。" + + +msgid "Confirm entry creation:" +msgstr "确认创建条目:" + + +msgid "Create Address" +msgstr "创建地址簿" + + +msgid "Check password..." +msgstr "正在检查密码……" + + +msgid "Comparing the following DNs" +msgstr "比较紧跟着的DN" + + +msgid "Compare another DN with" +msgstr "比较另一个DN跟" -#: ../../htdocs/update_confirm.php:312 -msgid "will delete the attribute(s)" -msgstr "" -#: ../../htdocs/compare_form.php:29 msgid "with " msgstr "同 " -#~ msgid "equals" -#~ msgstr "等于" -#~ msgid "contains" -#~ msgstr "包含" +msgid "Source DN" +msgstr "源DN" -#~ msgid "create" -#~ msgstr "创建" -#~ msgid "Create a new entry on" -#~ msgstr "创建新条目到" +msgid "Compare this DN with another" +msgstr "将该DN与另一个比较" -#~ msgid "Logged in as: " -#~ msgstr "登录为: " -#~ msgid "Copy this object to another location, a new DN, or another server" -#~ msgstr "把这个对象复制到另一个位置,一个新DN或另一个服务器。" +msgid "Switch Entry" +msgstr "切换条目" -#~ msgid "View" -#~ msgstr "查看" -#~ msgid "Click to view the schema defintion for attribute type '%s'" -#~ msgstr "点击查看属性类型'%s'的格式定义" +msgid "No Value" +msgstr "没有值" -#~ msgid "Note: '%s' is an alias for '%s'" -#~ msgstr "注意: '%s'是'%s'的一个别名" -#~ msgid "Entry %s deleted successfully." -#~ msgstr "成功删除条目:%s。" +msgid "Compare with another entry" +msgstr "同另一个条目进行比较" -#~ msgid "" -#~ "Instructions: In order to add these objectClass(es) to this entry, you must " -#~ "specify" -#~ msgstr "指导: 为了增加这个objectClass 到该条目,你必须指定" -#~ msgid "that this objectClass requires. You can do so in this form." -#~ msgstr "这该objectClass所必需的。 你可以在这个表里完成。" +msgid "You need one of the following ObjectClass(es) to add this attribute %s." +msgstr "要新增属性%s,你需要下面的ObjectClass(es)——对象类。" -#~ msgid "Bad server id" -#~ msgstr "错误的服务器id" -#~ msgid "Could not connect to LDAP server." -#~ msgstr "不能连接到LDAP服务器。" +msgid "Your Session timed out after" +msgstr "你的会话期将在无活动的" -#~ msgid "Server: " -#~ msgstr "服务器: " -#~ msgid "Looking in: " -#~ msgstr "正在查看: " +msgid "min. of inactivity. You have been automatically logged out." +msgstr "分钟后过期。你将自动退出。" -#~ msgid "No DN specified in query string!" -#~ msgstr "在查询串中没有指定DN!" -#~ msgid "" -#~ "Note: You will get an \"inappropriate matching\" error if you have not setup " -#~ "an EQUALITY rule on your LDAP server for this attribute." -#~ msgstr "" -#~ "注释: 如果在你的LDAP服务器上没有为这个属性设置EQUALITY 规则的话,你可能会碰到\"inappropriate " -#~ "matching(不正确的匹配)\"这样的错误。" +msgid "To log back in please click on the following link:" +msgstr "想登录回来,请点击下面的链接:" -#~ msgid "Copy successful! Would you like to " -#~ msgstr "复制成功! 你还想要 " -#~ msgid "view the new entry" -#~ msgstr "查看新条目" +msgid "(Session timed out. Automatically logged out.)" +msgstr "(会话超时,自动退出。)" -#~ msgid "Choose a template" -#~ msgstr "选择样板" -#~ msgid "Click here to go to the login form" -#~ msgstr "点击这里转到登录表格" +msgid "Inactivity will log you off at %s" +msgstr "在%s如果活动,你将被登出。" -#~ msgid "Entries found: " -#~ msgstr "找到的条目: " -#~ msgid "Filter performed: " -#~ msgstr "应用了的过滤器: " - -#~ msgid "Search performed by phpLDAPadmin in" -#~ msgstr "phpLDAPadmin完成搜索,用时" - -#~ msgid "starts with" -#~ msgstr "开始于" - -#~ msgid "ends with" -#~ msgstr "结束于" - -#~ msgid "sounds like" -#~ msgstr "看起来象" - -#~ msgid "" -#~ "Could not retrieve LDAP information from the server. This may be due to a bug in your version of PHP " -#~ "or perhaps your LDAP server has access control specified that prevents LDAP " -#~ "clients from accessing the RootDSE." -#~ msgstr "" -#~ "不能从服务器上取得LDAP信息。 可能是因为你的PHP存在这个错漏,或者是你的LDAP服务器里指定的\"访问控制\"" -#~ "禁止LDAP客户端访问RootDSE。" - -#~ msgid "ChangeLog" -#~ msgstr "变更记录" - -#~ msgid "Unsafe file name: " -#~ msgstr "不安全的文件名: " - -#~ msgid "No such file: " -#~ msgstr "没有这样的文件: " - -#~ msgid "" -#~ "You have enabled auto_uid_numbers for %s in your configuration, " -#~ " but you have not specified the " -#~ "auto_uid_number_mechanism. Please correct " -#~ "this problem." -#~ msgstr "" -#~ "在你的配置中为 %s 启用了auto_uid_numbers, " -#~ "但是你没有指定auto_uid_number_mechanism。 请更正 这个问题" - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"uidpool\" " -#~ " in your configuration for server %s, but you did not " -#~ "specify the audo_uid_number_uid_pool_dn. Please " -#~ "specify it before proceeding." -#~ msgstr "" -#~ "你在服务%s的配置中指定\"auto_uid_number_mechanism\" 为 \"uidpool\", " -#~ " 但是你没有指定 " -#~ "audo_uid_number_uid_pool_dn。 请在进行下步前指定它。" - -#~ msgid "" -#~ "It appears that the uidPool you specified in your configuration (\"%s\") " -#~ " does not exist." -#~ msgstr "好像你在配置(\"%s\")中指定的uidPool 不存在。" - -#~ msgid "" -#~ "You specified the \"auto_uid_number_mechanism\" as \"search\" in your " -#~ " configuration for server %s, but you did not " -#~ "specify the \"auto_uid_number_search_base\". " -#~ "Please specify it before proceeding." -#~ msgstr "" -#~ "你在服务器%s的配置文件中指定了\"auto_uid_number_mechanism\" 为 \"search\", " -#~ " 但是你没有指定 " -#~ "\"auto_uid_number_search_base\"。 请在进行下步前指定它。" - -#~ msgid "" -#~ "You specified an invalid value for auto_uid_number_mechanism (\"%s\") " -#~ " in your configration. Only \"uidpool\" and " -#~ "\"search\" are valid. Please correct this " -#~ "problem." -#~ msgstr "" -#~ "你在配置文件中为auto_uid_number_mechanism (\"%s\")指定了一个非法的值 " -#~ " 。 只有\"uidpool\" 和 \"search\" 是合法的。 " -#~ " 请更正这个问题。" - -#~ msgid "" -#~ "Error: You have an error in your config file. The only three allowed values " -#~ " for auth_type in the $servers section are " -#~ "'session', 'cookie', and 'config'. You entered '%s', " -#~ " which is not allowed. " -#~ msgstr "" -#~ "错误: 在你的配置文件中有个错误。 仅允许用于 " -#~ "$servers部分的auth_type的值为 'session', 'cookie', and 'config'。 输入'%s', " -#~ " 这是不允许的。 " - -#~ msgid "LDAP said: %s" -#~ msgstr "LDAP说: %s" - -#~ msgid "Error number: %s (%s)" -#~ msgstr "错误代号 %s" - -#~ msgid "Description: %s

" -#~ msgstr "描述: %s

" - -#~ msgid "Error number: %s

" -#~ msgstr "错误代号: %s

" - -#~ msgid "Description: (no description available)
" -#~ msgstr "描述: (没有描述可提供)
" - -#~ msgid "Is this a phpLDAPadmin bug? If so, please report it." -#~ msgstr "这是个phpLDAPadmin 错漏吗? 如果是,就请报告一个。" - -#~ msgid "Unrecognized error number: " -#~ msgstr "不认识的错误代号: " - -#~ msgid "" -#~ "
\t\t\t
You found " -#~ "a non-fatal phpLDAPadmin bug!
Error:%s " -#~ "(%s)
File: %s line " -#~ "%s, caller %s
Versions:PLA: " -#~ "%s, PHP: %s, SAPI: %s
Web " -#~ "server:%s
Please check and see if this bug has been reported " -#~ "here.
If it hasnt been reported, you may report this bug by clicking " -#~ "here.

" -#~ msgstr "" -#~ "
" -#~ "你发现了一个非致使的phpLDAPadmin 错漏!
错误:%s " -#~ "(%s)
文件: %s 行 " -#~ "%s,调用函数 %s
版本:PLA: %s, PHP: " -#~ "%s, SAPI: %s
Web " -#~ "服务器:%s
" -#~ "请点击这里报告该错漏

" - -#~ msgid "" -#~ "Congratulations! You found a bug in phpLDAPadmin.

\t \t \t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
Error:%s
Level:%s
File:%s
Line:%s
Caller:%s
PLA " -#~ "Version:%s
PHP " -#~ "Version:%s
PHP " -#~ "SAPI:%s
Web " -#~ "server:%s
\t
\t Please " -#~ "report this bug by clicking below!" -#~ msgstr "" -#~ "恭喜你! 你发现了phpLDAPadmin的一个错漏。

\t \t " -#~ "\t " -#~ "\t " -#~ "\t " -#~ "\t\t " -#~ "\t \t \t \t \t
错误:%s
级别:%s
文件:%s
行:%s
调用者:%s
PLA " -#~ "版本:%s
PHP " -#~ "版本:%s
PHP " -#~ "SAPI:%s
PHP " -#~ "服务器:%s
\t
\t " -#~ "请通过点击下面来报告这个错漏!" - -#~ msgid "Select an LDIF file:" -#~ msgstr "选择一个LDIF文件:" - -#~ msgid "Line Number:" -#~ msgstr "行号:" - -#~ msgid "Line:" -#~ msgstr "行数:" - -#~ msgid "Optional Binary Attributes" -#~ msgstr "可选的二进制属性" - -#~ msgid "Maximum file size: %s" -#~ msgstr "最大文件尺寸: %s" - -#~ msgid "Back" -#~ msgstr "后退" - -#~ msgid "object" -#~ msgstr "对象" - -#~ msgid "Delete all" -#~ msgstr "删除所有的" - -#~ msgid "warning" -#~ msgstr "警告" - -#~ msgid "using template" -#~ msgstr "使用样板" - -#~ msgid "Redirecting..." -#~ msgstr "重定向..." - -#~ msgid "here" -#~ msgstr "这里" - -#~ msgid "Step 1 of 2: Name and ObjectClass(es)" -#~ msgstr "第一步: Name 和 ObjectClass(es)" - -#~ msgid "Step 2 of 2: Specify attributes and values" -#~ msgstr "第二步: 指定属性和值" - -#~ msgid "Relative Distinguished Name" -#~ msgstr "Relative Distinguished Name(相对标识名)" - -#~ msgid "RDN" -#~ msgstr "RDN" - -#~ msgid "(example: cn=MyNewPerson)" -#~ msgstr "(例如: cn=MyNewPerson)" - -#~ msgid "Could not bind to the LDAP server." -#~ msgstr "不能绑定到该LDAP服务器。" - -#~ msgid "Successfully logged into server %s" -#~ msgstr "成功登录到服务器%s" - -#~ msgid "%s bytes" -#~ msgstr "%s 字节" - -#~ msgid "Searching..." -#~ msgstr "搜索..." - -#~ msgid "Logged out successfully from server %s" -#~ msgstr "成功从%s服务器退出" - -#~ msgid "Authenticate to server %s" -#~ msgstr "认证到服务器%s" - -#~ msgid "Warning: This web connection is unencrypted." -#~ msgstr "警告: 此web连接没有加密。" - -#~ msgid "User name" -#~ msgstr "用户名" - -#~ msgid "" -#~ "You need to configure phpLDAPadmin. Edit the file 'config/config.php' to do " -#~ "so. An example config file is provided in 'config/config.php.example'" -#~ msgstr "" -#~ "你需要配置phpLDAPadmin。 编辑文件'config.php'就可以。 有个样例配置文件提供在 'config.php.example'里" - -#~ msgid "Deletes not allowed in read only mode." -#~ msgstr "在只读模式下不允许删除。" - -#~ msgid "list" -#~ msgstr "列表" - -#~ msgid "table" -#~ msgstr "表格" - -#~ msgid "" -#~ "Your config.php specifies an invalid value for $default_search_display: %s. " -#~ "Please fix it" -#~ msgstr "你的config.php 给$default_search_display指定了一个非法的值: %s,请更正" - -#~ msgid "" -#~ "Your config specifies a handler of \"%s\" for this template but this file is " -#~ "not readable because the permissions are too strict." -#~ msgstr "你在配置中指定了用于该样板的\"%s\"的手柄,但是这个文件因为禁止权限太严格而不可读。" - -#~ msgid "Using the" -#~ msgstr "使用该" - -#~ msgid "You may switch to the " -#~ msgstr "你可以转换到 " - -#~ msgid "default template" -#~ msgstr "默认模板" - -#~ msgid "User Account (posixAccount)" -#~ msgstr "用户账号(posixAccount)" - -#~ msgid "Address Book Entry (inetOrgPerson)" -#~ msgstr "地址簿条目(inetOrgPerson)" - -#~ msgid "Address Book Entry (mozillaOrgPerson)" -#~ msgstr "地址簿条目(mozillaOrgPerson)" - -#~ msgid "Kolab User Entry" -#~ msgstr "Kolab用户条目" - -#~ msgid "Organisational Unit" -#~ msgstr "组织化单元(Organizational Unit)" - -#~ msgid "Organisational Role" -#~ msgstr "组织化角色" - -#~ msgid "Posix Group" -#~ msgstr "Posix组" - -#~ msgid "Samba NT Machine" -#~ msgstr "Samba NT 主机" - -#~ msgid "Samba 3 NT Machine" -#~ msgstr "Samba 3 NT 主机" - -#~ msgid "Samba User" -#~ msgstr "Samba 用户" - -#~ msgid "Samba 3 User" -#~ msgstr "Samba 3 用户" - -#~ msgid "Samba 3 Group Mapping" -#~ msgstr "Samba 3 组映像(Mapping)" - -#~ msgid "DNS Entry" -#~ msgstr "DNS 条目" - -#~ msgid "Simple Security Object" -#~ msgstr "简单安全对象(Simple Security Object)" - -#~ msgid "Courier Mail Account" -#~ msgstr "Courier 邮件账号" - -#~ msgid "Courier Mail Alias" -#~ msgstr "Courier 邮件别名" - -#~ msgid "LDAP Alias" -#~ msgstr "LDAP 别名" - -#~ msgid "Sendmail Cluster" -#~ msgstr "Sendmail 集群" - -#~ msgid "Sendmail Domain" -#~ msgstr "Sendmail 域" - -#~ msgid "Sendmail Alias" -#~ msgstr "Sendmail 别名" - -#~ msgid "Sendmail Virtual Domain" -#~ msgstr "Sendmail 虚拟域" - -#~ msgid "Sendmail Virtual Users" -#~ msgstr "Sendmail 虚拟用户" - -#~ msgid "Sendmail Relays" -#~ msgstr "Sendmail 回复" - -#~ msgid "Custom" -#~ msgstr "自定义" - -#~ msgid "My Samba domain Name" -#~ msgstr "我的Samba域名" - -#~ msgid "Administrators" -#~ msgstr "管理员" - -#~ msgid "Users" -#~ msgstr "用户" - -#~ msgid "Guests" -#~ msgstr "一般用户(Guests)" - -#~ msgid "Power Users" -#~ msgstr "增强用户(Power Users)" - -#~ msgid "Account Operators" -#~ msgstr "账号管理员" - -#~ msgid "Server Operators" -#~ msgstr "服务器管理员" - -#~ msgid "Print Operators" -#~ msgstr "打印管理员" - -#~ msgid "Backup Operators" -#~ msgstr "备份管理员" - -#~ msgid "Replicator" -#~ msgstr "复制器(Replicator)" - -#~ msgid "" -#~ " Unable to create the Samba passwords. Please, check the configuration in " -#~ "template_config.php" -#~ msgstr " 不能建立Samba密码。请检查文件template_config.php里的配置。" - -#~ msgid "Error: You have an error in your samba confguration." -#~ msgstr "错误:在你的samba配置里有个错误。" - -#~ msgid "Error: A name and a sid for your samba domain need to be provided." -#~ msgstr "错误:需要为你的samba域提供一个名字(name)和一个sid。" - -#~ msgid "Error: No name provided for samba domain." -#~ msgstr "错误:没有为samba域提供名字。" - -#~ msgid "Error: No sid provided for samba domain." -#~ msgstr "错误:没有为samba域提供sid。" - -#~ msgid "Samba Account" -#~ msgstr "Samba 账号" - -#~ msgid "samba account" -#~ msgstr "samba 账号" - -#~ msgid "New User Account" -#~ msgstr "新建用户账号" - -#~ msgid "" -#~ "Hint: To customize this template, edit the file " -#~ "templates/creation/new_user_template.php" -#~ msgstr "提示:想要定制模板的话,你可以编辑文件templates/creation/new_user_template.php" - -#~ msgid "First name" -#~ msgstr "第一个名字" - -#~ msgid "Last name" -#~ msgstr "最后一个名字" - -#~ msgid "first" -#~ msgstr "第一个" - -#~ msgid "last" -#~ msgstr "最后一个" - -#~ msgid "Common name" -#~ msgstr "公有名字(Common name)" - -#~ msgid "Encryption" -#~ msgstr "加密方法" - -#~ msgid "Login Shell" -#~ msgstr "登录Shell" - -#~ msgid "Home Directory" -#~ msgstr "主目录" - -#~ msgid "UID Number" -#~ msgstr "UID号" - -#~ msgid "(automatically determined)" -#~ msgstr "(自动检测到的)" - -#~ msgid "Group" -#~ msgstr "组" - -#~ msgid "GID Number" -#~ msgstr "GID号" - -#~ msgid "Your passwords don't match. Please go back and try again." -#~ msgstr "你的密码不匹配。请返回再试试。" - -#~ msgid "You cannot leave the %s blank. Please go back and try again." -#~ msgstr "%s处不能为空。请返回再试试。" - -#~ msgid "" -#~ "You can only enter numeric values for the %s field. Please go back and try " -#~ "again." -#~ msgstr "%s字段不能只输入数字。请返回再试试。" - -#~ msgid "" -#~ "The container you specified (%s) does not exist. Please go back and try " -#~ "again." -#~ msgstr "你指定的容器(%s)不存在。请返回再试试。" - -#~ msgid "Confirm account creation" -#~ msgstr "确认创建账号" - -#~ msgid "[secret]" -#~ msgstr "[隐秘]" - -#~ msgid "Create Account" -#~ msgstr "创建账号" - -#~ msgid "New Address Book Entry" -#~ msgstr "新建地址簿条目" - -#~ msgid "Organisation" -#~ msgstr "组织" - -#~ msgid "Address" -#~ msgstr "地址" - -#~ msgid "City" -#~ msgstr "城市" - -#~ msgid "Postal code" -#~ msgstr "邮政编码" - -#~ msgid "Street" -#~ msgstr "街道" - -#~ msgid "Work phone" -#~ msgstr "工作电话" - -#~ msgid "Fax" -#~ msgstr "传真(Fax)" - -#~ msgid "Mobile" -#~ msgstr "移动电话(Mobile)" - -#~ msgid "Email" -#~ msgstr "电子邮件" - -#~ msgid "You cannot leave the Common Name blank. Please go back and try again." -#~ msgstr "公有名字(Common Name)不能为空。请返回再试试。" - -#~ msgid "Confirm entry creation:" -#~ msgstr "确认创建条目:" - -#~ msgid "Create Address" -#~ msgstr "创建地址簿" diff --git a/queries/SambaUsers.xml b/queries/SambaUsers.xml new file mode 100644 index 0000000..1130c61 --- /dev/null +++ b/queries/SambaUsers.xml @@ -0,0 +1,31 @@ + + + +Samba User List + + + + +Samba Users +images/user.png +sub +1 + + + + Common Name + 1 + 2 + + + User ID + 2 + 1 + + + Samba Home Directory + 3 + 3 + + + diff --git a/queries/UserList.xml b/queries/UserList.xml new file mode 100644 index 0000000..c2c9c6c --- /dev/null +++ b/queries/UserList.xml @@ -0,0 +1,41 @@ + + + +User List + + + + +User List +images/user.png +sub +1 + + + + Common Name + 1 + 2 + + + User ID + 2 + 1 + + + Home Directory + 3 + 3 + + + Telephone Number + 4 + 4 + + + Photo + 5 + 5 + + + diff --git a/templates/creation/SUSE-posixGroup.xml b/templates/creation/SUSE-posixGroup.xml deleted file mode 100644 index 1ca267e..0000000 --- a/templates/creation/SUSE-posixGroup.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/templates/creation/SUSE-sambaGroupMapping.xml b/templates/creation/SUSE-sambaGroupMapping.xml deleted file mode 100644 index e1fd9eb..0000000 --- a/templates/creation/SUSE-sambaGroupMapping.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - diff --git a/templates/creation/alias.xml b/templates/creation/alias.xml index 84798e7..eeba0a8 100644 --- a/templates/creation/alias.xml +++ b/templates/creation/alias.xml @@ -1,15 +1,16 @@ + diff --git a/templates/creation/courierMailAccount.xml b/templates/creation/courierMailAccount.xml index bc1a6c4..b33daa9 100644 --- a/templates/creation/courierMailAccount.xml +++ b/templates/creation/courierMailAccount.xml @@ -1,14 +1,15 @@ + diff --git a/templates/creation/courierMailAlias.xml b/templates/creation/courierMailAlias.xml index 906908f..8148edd 100644 --- a/templates/creation/courierMailAlias.xml +++ b/templates/creation/courierMailAlias.xml @@ -1,14 +1,15 @@ + diff --git a/templates/creation/dNSDomain.xml b/templates/creation/dNSDomain.xml index c2706ae..21b6101 100644 --- a/templates/creation/dNSDomain.xml +++ b/templates/creation/dNSDomain.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/example.xml b/templates/creation/example.xml index 6fd7408..127d9fc 100644 --- a/templates/creation/example.xml +++ b/templates/creation/example.xml @@ -1,11 +1,14 @@ + diff --git a/templates/creation/inetOrgPerson.xml b/templates/creation/inetOrgPerson.xml index e82499f..ab52f19 100644 --- a/templates/creation/inetOrgPerson.xml +++ b/templates/creation/inetOrgPerson.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/kolabPerson.xml b/templates/creation/kolabPerson.xml index 0429842..0b7c5a9 100644 --- a/templates/creation/kolabPerson.xml +++ b/templates/creation/kolabPerson.xml @@ -1,14 +1,15 @@ + diff --git a/templates/creation/mozillaOrgPerson.xml b/templates/creation/mozillaOrgPerson.xml index 7430205..25dd883 100644 --- a/templates/creation/mozillaOrgPerson.xml +++ b/templates/creation/mozillaOrgPerson.xml @@ -1,37 +1,38 @@ + diff --git a/templates/creation/organizationalRole.xml b/templates/creation/organizationalRole.xml index 6696288..7ab3827 100644 --- a/templates/creation/organizationalRole.xml +++ b/templates/creation/organizationalRole.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/ou.xml b/templates/creation/ou.xml index e4ee85a..3059938 100644 --- a/templates/creation/ou.xml +++ b/templates/creation/ou.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/posixAccount.xml b/templates/creation/posixAccount.xml index c765de7..c20026a 100644 --- a/templates/creation/posixAccount.xml +++ b/templates/creation/posixAccount.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/posixGroup.xml b/templates/creation/posixGroup.xml index 381099e..1ba1009 100644 --- a/templates/creation/posixGroup.xml +++ b/templates/creation/posixGroup.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/sambaDomain.xml b/templates/creation/sambaDomain.xml index 702a827..e80d745 100644 --- a/templates/creation/sambaDomain.xml +++ b/templates/creation/sambaDomain.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/sambaGroupMapping.xml b/templates/creation/sambaGroupMapping.xml index 8ca84cc..a2d7e99 100644 --- a/templates/creation/sambaGroupMapping.xml +++ b/templates/creation/sambaGroupMapping.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/sambaMachine.xml b/templates/creation/sambaMachine.xml index bc5d37f..a250a76 100644 --- a/templates/creation/sambaMachine.xml +++ b/templates/creation/sambaMachine.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/sambaSamAccount.xml b/templates/creation/sambaSamAccount.xml index 75d98db..4d969c5 100644 --- a/templates/creation/sambaSamAccount.xml +++ b/templates/creation/sambaSamAccount.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/sendmailMTAAliasObject.xml b/templates/creation/sendmailMTAAliasObject.xml index 2ea98fb..959ad51 100644 --- a/templates/creation/sendmailMTAAliasObject.xml +++ b/templates/creation/sendmailMTAAliasObject.xml @@ -1,14 +1,15 @@ + diff --git a/templates/creation/sendmailMTAClass.xml b/templates/creation/sendmailMTAClass.xml index da546a7..7300266 100644 --- a/templates/creation/sendmailMTAClass.xml +++ b/templates/creation/sendmailMTAClass.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/sendmailMTACluster.xml b/templates/creation/sendmailMTACluster.xml index f6afa63..6dcf270 100644 --- a/templates/creation/sendmailMTACluster.xml +++ b/templates/creation/sendmailMTACluster.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/sendmailMTAMapObject.xml b/templates/creation/sendmailMTAMapObject.xml index 6438dbf..18115a6 100644 --- a/templates/creation/sendmailMTAMapObject.xml +++ b/templates/creation/sendmailMTAMapObject.xml @@ -1,17 +1,22 @@ - + + + diff --git a/templates/creation/sendmailVirtualDomain.xml b/templates/creation/sendmailVirtualDomain.xml index 643e9d0..c85f436 100644 --- a/templates/creation/sendmailVirtualDomain.xml +++ b/templates/creation/sendmailVirtualDomain.xml @@ -1,12 +1,14 @@ + diff --git a/templates/creation/sendmailVirtualUser.xml b/templates/creation/sendmailVirtualUser.xml index 2dcba42..14ad1c2 100644 --- a/templates/creation/sendmailVirtualUser.xml +++ b/templates/creation/sendmailVirtualUser.xml @@ -1,14 +1,19 @@ + + + diff --git a/templates/creation/simpleSecurityObject.xml b/templates/creation/simpleSecurityObject.xml index d2b4e4c..146b0aa 100644 --- a/templates/creation/simpleSecurityObject.xml +++ b/templates/creation/simpleSecurityObject.xml @@ -1,12 +1,14 @@ + diff --git a/templates/modification/inetOrgPerson.xml b/templates/modification/inetOrgPerson.xml index 385b472..8db550b 100644 --- a/templates/modification/inetOrgPerson.xml +++ b/templates/modification/inetOrgPerson.xml @@ -1,11 +1,14 @@ + diff --git a/templates/template.dtd b/templates/template.dtd index aae9e96..64ed786 100644 --- a/templates/template.dtd +++ b/templates/template.dtd @@ -1,11 +1,13 @@ - + Temporary URI for the DTD: http://phpldapadmin.sf.net/release/templates/template.dtd + Validate your templates here: http://www.xmlvalidation.com +========================================================================== +--> @@ -13,9 +15,8 @@ - + @@ -24,53 +25,47 @@ - + - + - - + + - - - - + - - - + + + + - - - - - + + - + + - - diff --git a/tools/po/Makefile b/tools/po/Makefile index ae3718b..8ba5c67 100644 --- a/tools/po/Makefile +++ b/tools/po/Makefile @@ -13,8 +13,6 @@ # all-mo compile .mo files from .po translation available # pot create a update main POT file # all-merge merge last POT with each current translations -# xml-pot create a update POT template file (XML files) - LOCALEDIR = ../../locale TEMPLATEFILES=`find ../../templates -iname *xml -exec echo -m {} \;` @@ -34,10 +32,10 @@ all-mo: pot: - @cp messages.header messages.pot + @po4a-gettextize -o tags=" <description> <display>" -o tagsonly=1 -f xml $(TEMPLATEFILES) -p messages.pot @find ../../ -name *.php -exec xgettext --keyword=_ -L PHP -j --omit-header -o messages.pot -s {} \; @find ../../ -name *.inc -exec xgettext --keyword=_ -L PHP -j --omit-header -o messages.pot -s {} \; - @echo messages.pot created + @echo messages.pot created, you might like to change the header with contents of messages.header all-merge: pot @for i in `ls -1 $(LOCALEDIR)` ; \ @@ -48,10 +46,6 @@ all-merge: pot fi \ done -xml-pot: - @po4a-gettextize -o tags="<display>" -o tagsonly=1 -f xml $(TEMPLATEFILES) -p template.pot - @echo template.pot created - launchpad-extract: @[ ! -r $(EXPORTFILE) ] && echo "No export file [$(EXPORTFILE)] found?" && exit 1 || true @cd $(LOCALEDIR); tar xzf $(EXPORTFILE)