~ubuntu-branches/ubuntu/trusty/ldap-account-manager/trusty-proposed

« back to all changes in this revision

Viewing changes to lib/modules.inc

  • Committer: Package Import Robot
  • Author(s): Roland Gruber
  • Date: 2013-07-21 11:15:58 UTC
  • mfrom: (1.2.21)
  • Revision ID: package-import@ubuntu.com-20130721111558-ex49xgcpo71fh0xg
Tags: 4.2.1-2
* Apache 2.4 support
* Fix "transition towards Apache 2.4" 
  support conf-enabled (Closes: #669824)
* Fix "[ldap-account-manager] Can't install ldap-account-manager"
  support conf-enabled (Closes: #711778)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
<?php
2
2
/*
3
 
$Id: modules.inc 4767 2013-02-23 17:10:43Z gruberroland $
 
3
$Id: modules.inc 4906 2013-05-09 19:10:35Z gruberroland $
4
4
 
5
5
  This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/)
6
6
  Copyright (C) 2003 - 2013  Roland Gruber
63
63
* @return string alias name
64
64
*/
65
65
function getModuleAlias($name, $scope) {
66
 
        $module = new $name($scope);
 
66
        $module = moduleCache::getModule($name, $scope);
67
67
        return $module->get_alias();
68
68
}
69
69
 
75
75
* @return boolean true if base module
76
76
*/
77
77
function is_base_module($name, $scope) {
78
 
        $module = new $name($scope);
 
78
        $module = moduleCache::getModule($name, $scope);
79
79
        return $module->is_base_module();
80
80
}
81
81
 
90
90
        $filters = array();
91
91
        $orFilter = '';
92
92
        for ($i = 0; $i < sizeof($mods); $i++) {
93
 
                $module = new $mods[$i]($scope);
 
93
                $module = moduleCache::getModule($mods[$i], $scope);
94
94
                $modinfo = $module->get_ldap_filter();
95
95
                if (isset($modinfo['or'])) $filters['or'][] = $modinfo['or'];
96
96
                if (isset($modinfo['and'])) $filters['and'][] = $modinfo['and'];
142
142
        $attrs_high = array();
143
143
        for ($i = 0; $i < sizeof($mods); $i++) {
144
144
                // get list of attributes
145
 
                $module = new $mods[$i]($scope);
 
145
                $module = moduleCache::getModule($mods[$i], $scope);
146
146
                $attrs = $module->get_RDNAttributes();
147
147
                $keys = array_keys($attrs);
148
148
                // sort attributes
187
187
function getModulesDependencies($scope) {
188
188
        $mods = getAvailableModules($scope);
189
189
        for ($i = 0; $i < sizeof($mods); $i++) {
190
 
                $module = new $mods[$i]($scope);
 
190
                $module = moduleCache::getModule($mods[$i], $scope);
191
191
                $return[$mods[$i]] = $module->get_dependencies();
192
192
        }
193
193
        return $return;
271
271
        while ($entry = $dir->read())
272
272
                if ((substr($entry, strlen($entry) - 4, 4) == '.inc') && is_file($dirname . '/'.$entry)) {
273
273
                        $entry = substr($entry, 0, strpos($entry, '.'));
274
 
                        $temp = new $entry($scope);
 
274
                        $temp = moduleCache::getModule($entry, $scope);
275
275
                        if ($mustSupportAdminInterface && !$temp->supportsAdminInterface()) {
276
276
                                continue;
277
277
                        }
292
292
        $mods = $_SESSION['config']->get_AccountModules($scope);
293
293
        $return = array();
294
294
        for ($i = 0; $i < sizeof($mods); $i++) {
295
 
                $module = new $mods[$i]($scope);
 
295
                $module = moduleCache::getModule($mods[$i], $scope);
296
296
                $return[$mods[$i]] = $module->get_profileOptions();
297
297
        }
298
298
        return $return;
309
309
        $mods = $_SESSION['config']->get_AccountModules($scope);
310
310
        $return = array();
311
311
        for ($i = 0; $i < sizeof($mods); $i++) {
312
 
                $module = new $mods[$i]($scope);
 
312
                $module = moduleCache::getModule($mods[$i], $scope);
313
313
                $temp = $module->check_profileOptions($options);
314
314
                $return = array_merge($return, $temp);
315
315
        }
326
326
        $return = array();
327
327
        $modules = array_keys($scopes);
328
328
        for ($i = 0; $i < sizeof($modules); $i++) {
329
 
                $m = new $modules[$i]('none');
 
329
                $m = moduleCache::getModule($modules[$i], 'none');
330
330
                $return[$modules[$i]] = $m->get_configOptions($scopes[$modules[$i]], $scopes);
331
331
        }
332
332
        return $return;
343
343
        $return = array();
344
344
        $modules = array_keys($scopes);
345
345
        for ($i = 0; $i < sizeof($modules); $i++) {
346
 
                $m = new $modules[$i]('none');
 
346
                $m = moduleCache::getModule($modules[$i], 'none');
347
347
                $errors = $m->check_configOptions($scopes[$modules[$i]], $options);
348
348
                if (isset($errors) && is_array($errors)) {
349
349
                        $return = array_merge($return, $errors);
369
369
                }
370
370
                return $helpArray[$helpID];
371
371
        }
372
 
        $moduleObject = new $module((($scope != '') ? $scope : 'none'));
 
372
        if (empty($scope)) {
 
373
                $scope = 'none';
 
374
        }
 
375
        $moduleObject = moduleCache::getModule($module, $scope);
373
376
        return $moduleObject->get_help($helpID);
374
377
}
375
378
 
383
386
        $mods = $_SESSION['config']->get_AccountModules($scope);
384
387
        $return = array();
385
388
        for ($i = 0; $i < sizeof($mods); $i++) {
386
 
                $module = new $mods[$i]($scope);
 
389
                $module = moduleCache::getModule($mods[$i], $scope);
387
390
                $fields = $module->get_pdfFields();
388
391
                $return[$mods[$i]] = array();
389
392
                if (is_array($fields)) {
421
424
function getUploadColumns($scope, $selectedModules) {
422
425
        $return = array();
423
426
        for ($i = 0; $i < sizeof($selectedModules); $i++) {
424
 
                $module = new $selectedModules[$i]($scope);
 
427
                $module = moduleCache::getModule($selectedModules[$i], $scope);
425
428
                $return[$selectedModules[$i]] = $module->get_uploadColumns($selectedModules);
426
429
        }
427
430
        return $return;
445
448
        $predepends = array();
446
449
        // get dependencies
447
450
        for ($i = 0; $i < sizeof($unOrdered); $i++) {
448
 
                $mod = new $unOrdered[$i]($scope);
 
451
                $mod = moduleCache::getModule($unOrdered[$i], $scope);
449
452
                $predepends[$unOrdered[$i]] = $mod->get_uploadPreDepends();
450
453
        }
451
454
        // first all modules without predepends can be ordered
488
491
        $partialAccounts = array();
489
492
        for ($i = 0; $i < sizeof($data); $i++) $partialAccounts[$i]['objectClass'] = array();
490
493
        for ($i = 0; $i < sizeof($ordered); $i++) {
491
 
                $module = new $ordered[$i]($scope);
 
494
                $module = moduleCache::getModule($ordered[$i], $scope);
492
495
                $errors = $module->build_uploadAccounts($data, $ids, $partialAccounts, $selectedModules);
493
496
                if (sizeof($errors) > 0) {
494
497
                        array_unshift($errors, array("INFO", _("Displayed account numbers start at \"0\". Add 2 to get the row in your spreadsheet."), ""));
515
518
        $messages = array();
516
519
        for ($i = 0; $i < sizeof($selectedModules); $i++) {
517
520
                $activeModule = $selectedModules[$i];
518
 
                $module = new $activeModule($scope);
 
521
                $module = moduleCache::getModule($activeModule, $scope);
519
522
                $messages = array_merge($messages, $module->doUploadPreActions($attributes));
520
523
        }
521
524
        return $messages;
551
554
                $_SESSION['mass_postActions'][$activeModule] = array();
552
555
        }
553
556
        // let first module do one post action
554
 
        $module = new $activeModule($scope);
 
557
        $module = moduleCache::getModule($activeModule, $scope);
555
558
        $return = $module->doUploadPostActions($data, $ids, $failed, $_SESSION['mass_postActions'][$activeModule], $accounts);
556
559
        // remove active module from list if already finished
557
560
        if ($return['status'] == 'finished') {
580
583
        for ($i = 0; $i < sizeof($scopes); $i++) {
581
584
                $mods = $_SESSION['config']->get_AccountModules($scopes[$i]);
582
585
                for ($m = 0; $m < sizeof($mods); $m++) {
583
 
                        $module = new $mods[$m]($scopes[$i]);
 
586
                        $module = moduleCache::getModule($mods[$m], $scopes[$i]);
584
587
                        $ext = $module->getRequiredExtensions();
585
588
                        for ($e = 0; $e < sizeof($ext); $e++) {
586
589
                                if (!in_array($ext[$e], $extList)) $extList[] = $ext[$e];
651
654
                $message .= '<br><br><hr class="dotted">' . _('Technical name') . ': <i>' . $entry['attr'] . '</i>';
652
655
        }
653
656
        // replace special characters
654
 
        $message = str_replace(array("'", '"', "\n"), array("\\'", '&quot;', ''), $message);
655
 
        $title = str_replace(array("'", '"', "\n"), array("\\'", '&quot;', ''), $title);
656
 
        echo "<a href=\"" . $helpPath . "help.php?module=$module&amp;HelpNumber=". $number . "&amp;scope=" . $scope . "\" ";
 
657
        $message = preg_replace('/[\\\\]{2}/', '&#92;&#92;&#92;&#92;', $message);
 
658
        $title = preg_replace('/[\\\\]{2}/', '&#92;&#92;&#92;&#92;', $title);
 
659
        $message = str_replace(array('\\', "'", '"', "\n"), array('\\\\', "\\'", '&quot;', ''), $message);
 
660
        $title = str_replace(array('\\', "'", '"', "\n"), array('\\\\', "\\'", '&quot;', ''), $title);
 
661
        echo "<a class=\"margin2\" href=\"" . $helpPath . "help.php?module=$module&amp;HelpNumber=". $number . "&amp;scope=" . $scope . "\" ";
657
662
                echo "target=\"help\" ";
658
663
                echo "onmouseover=\"Tip('" . $message . "', TITLE, '" . $title . "')\" onmouseout=\"UnTip()\">";
659
664
                echo "<img class=\"align-middle\" width=16 height=16 src=\"../$helpPath/graphics/help.png\" alt=\"" . _('Help') . "\" title=\"" . _('Help') . "\">";
748
753
        private $titleBarSubtitle = null;
749
754
        /** send password via mail */
750
755
        private $sendPasswordViaMail = null;
 
756
        /** send password via mail to this alternate address */
 
757
        private $sendPasswordViaMailAlternateAddress = null;
751
758
 
752
759
        /**
753
760
         * Returns the account module with the given class name
787
794
        * It prints the HTML code of each account page.
788
795
        */
789
796
        function continue_main() {
 
797
                $oldPage = $this->current_page;
 
798
                $oldSubpage = $this->subpage;
 
799
                $post = $_POST;
790
800
                $result = array();
791
801
                $stopProcessing = false; // when set to true, no module options are displayed
792
802
                $errorsOccured = false;
923
933
                $this->titleBarSubtitle = $typeObject->getTitleBarSubtitle($this);
924
934
                // prints a module content page
925
935
                $this->printModuleContent($result, $stopProcessing);
 
936
                if (!$errorsOccured && ($oldPage == $this->current_page) && ($oldSubpage == $this->subpage)
 
937
                        && isset($_POST['scrollPositionTop']) && isset($_POST['scrollPositionLeft'])) {
 
938
                        // scroll to last position
 
939
                        echo '<script type="text/javascript">
 
940
                                jQuery(document).ready(function() {
 
941
                                        jQuery(window).scrollTop(' . $_POST['scrollPositionTop'] . ');
 
942
                                        jQuery(window).scrollLeft('. $_POST['scrollPositionLeft'] . ');
 
943
                        });
 
944
                        </script>';
 
945
                }
 
946
                $this->printPageFooter();
926
947
        }
927
948
        
928
949
        /**
941
962
                                call_user_func_array("StatusMessage", $result[$i]);
942
963
                        }
943
964
                        if ($stopProcessing) {
944
 
                                $this->printPageFooter();
945
965
                                return;
946
966
                        }
947
967
                }
1006
1026
                echo "</td></tr>\n";
1007
1027
                // Display rest of html-page
1008
1028
                echo "</table>\n";
1009
 
                $this->printPageFooter();
1010
1029
        }
1011
1030
 
1012
1031
        /**
1040
1059
                        $container->addElement(new htmlHelpLink('406'), true);
1041
1060
                }
1042
1061
                if (isLAMProVersion() && isset($this->attributes_orig['mail'][0])) {
1043
 
                        $container->addElement(new htmlTableExtendedInputCheckbox('lamPasswordChangeSendMail', false, _('Send via mail')));
 
1062
                        $pwdMailCheckbox = new htmlTableExtendedInputCheckbox('lamPasswordChangeSendMail', false, _('Send via mail'));
 
1063
                        $pwdMailCheckbox->setTableRowsToShow(array('lamPasswordChangeSendMailAddress'));
 
1064
                        $container->addElement($pwdMailCheckbox);
1044
1065
                        $container->addElement(new htmlHelpLink('407'), true);
 
1066
                        $container->addElement(new htmlTableExtendedInputField(_('Alternate recipient'), 'lamPasswordChangeSendMailAddress', '', '410'));
1045
1067
                }
1046
1068
                $container->addElement(new htmlSpacer(null, '10px'), true);
1047
1069
                // password modules
1134
1156
                }
1135
1157
                if (isLAMProVersion() && $sendMail) {
1136
1158
                        $this->sendPasswordViaMail = $password1;
 
1159
                        if (!empty($input['sendMailAlternateAddress'])) {
 
1160
                                if (!get_preg($input['sendMailAlternateAddress'], 'email')) {
 
1161
                                        $return['messages'] .= StatusMessage('ERROR', _('Alternate recipient'), _('Please enter a valid email address!'), array(), true);
 
1162
                                        $return['errorsOccured'] = 'true';
 
1163
                                }
 
1164
                                $this->sendPasswordViaMailAlternateAddress = $input['sendMailAlternateAddress'];
 
1165
                        }
1137
1166
                }
1138
1167
                if ($return['errorsOccured'] == 'false') {
1139
1168
                        $return['messages'] .= StatusMessage('INFO', _('The new password will be stored in the directory after you save this account.'), '', array(), true);
1224
1253
         */
1225
1254
        private function printPageHeader() {
1226
1255
                include '../main_header.php';
1227
 
                echo '<script type="text/javascript">';
1228
 
                echo 'jQuery(document).ready(function() {';
1229
 
                echo '          jQuery("#inputForm").validationEngine();';
1230
 
                echo '});';
1231
 
                echo '</script>';
1232
 
                echo "<form id=\"inputForm\" enctype=\"multipart/form-data\" action=\"edit.php\" method=\"post\">\n";           
 
1256
                echo '<script type="text/javascript">
 
1257
                                jQuery(document).ready(function() {
 
1258
                                        jQuery("#inputForm").validationEngine();
 
1259
                                });
 
1260
                        </script>';
 
1261
                echo "<form id=\"inputForm\" enctype=\"multipart/form-data\" action=\"edit.php\" method=\"post\" onSubmit=\"saveScrollPosition('inputForm')\">\n";              
1233
1262
        }
1234
1263
        
1235
1264
        /**
1277
1306
                
1278
1307
                $type = new $this->type();
1279
1308
                $buttonGroup = new htmlGroup();
1280
 
                $createButton = new htmlButton('accountContainerCreateAgain', $type->LABEL_CREATE_ANOTHER_ACCOUNT);
1281
 
                $createButton->setIconClass('createButton');
1282
 
                $buttonGroup->addElement($createButton);
1283
 
                $buttonGroup->addElement(new htmlSpacer('10px', null));
 
1309
                if (checkIfNewEntriesAreAllowed($this->type)) {
 
1310
                        $createButton = new htmlButton('accountContainerCreateAgain', $type->LABEL_CREATE_ANOTHER_ACCOUNT);
 
1311
                        $createButton->setIconClass('createButton');
 
1312
                        $buttonGroup->addElement($createButton);
 
1313
                        $buttonGroup->addElement(new htmlSpacer('10px', null));
 
1314
                }
1284
1315
                $pdfButton = new htmlButton('accountContainerCreatePDF', _('Create PDF file'));
1285
1316
                $pdfButton->setIconClass('pdfButton');
1286
1317
                $buttonGroup->addElement($pdfButton);
1490
1521
 
1491
1522
                foreach ($modules as $module) {
1492
1523
                        if (!isset($this->module[$module])) {
1493
 
                                $this->module[$module] = new $module($this->type);
 
1524
                                $this->module[$module] = moduleCache::getModule($module, $this->type);
1494
1525
                                $this->module[$module]->init($this->base);
1495
1526
                        }
1496
1527
                        $this->module[$module]->load_attributes($attr);
1520
1551
                $aliases = array();
1521
1552
                $ldapAttributesTemp = array();
1522
1553
                foreach ($modules as $module) {
1523
 
                        $moduleObj = new $module($this->type);
 
1554
                        $moduleObj = moduleCache::getModule($module, $this->type);
1524
1555
                        $objectClasses = array_merge($objectClasses, $moduleObj->getManagedObjectClasses());
1525
1556
                        $aliases = array_merge($aliases, $moduleObj->getLDAPAliases());
1526
1557
                        $ldapAttributesTemp = array_merge($ldapAttributesTemp, $moduleObj->getManagedAttributes());
1591
1622
                $this->lastLoadedProfile = 'default';
1592
1623
                $modules = $_SESSION['config']->get_AccountModules($this->type);
1593
1624
                foreach ($modules as $module) {
1594
 
                        $this->module[$module] = new $module($this->type);
 
1625
                        $this->module[$module] = moduleCache::getModule($module, $this->type);
1595
1626
                        $this->module[$module]->init($this->base);
1596
1627
                }
1597
1628
                // sort module buttons
1780
1811
                for ($i=0; $i<count($DNs); $i++) {
1781
1812
                        if (!$stopprocessing) {
1782
1813
                                logNewMessage(LOG_DEBUG, 'Attribute changes for ' . $DNs[$i] . ":\n" . print_r($attributes[$DNs[$i]], true));
1783
 
                                // modify attributes
 
1814
                                // modify attributesabnahme
1784
1815
                                if (isset($attributes[$DNs[$i]]['modify']) && !$stopprocessing) {
1785
1816
                                        $success = @ldap_mod_replace($_SESSION['ldap']->server(), $DNs[$i], $attributes[$DNs[$i]]['modify']);
1786
1817
                                        if (!$success) {
1787
 
                                                logNewMessage(LOG_ERR, '[' . $ldapUser .'] Unable to modify attributes from DN: ' . $DNs[$i] . ' (' . ldap_err2str(ldap_errno($_SESSION['ldap']->server())) . ').');
1788
 
                                                $errors[] = array('ERROR', sprintf(_('Was unable to modify attributes from DN: %s.'), $DNs[$i]), ldap_error($_SESSION['ldap']->server()));
 
1818
                                                logNewMessage(LOG_ERR, '[' . $ldapUser .'] Unable to modify attributes of DN: ' . $DNs[$i] . ' (' . ldap_err2str(ldap_errno($_SESSION['ldap']->server())) . ').');
 
1819
                                                $errors[] = array('ERROR', sprintf(_('Was unable to modify attributes of DN: %s.'), $DNs[$i]), ldap_error($_SESSION['ldap']->server()));
1789
1820
                                                $stopprocessing = true;
1790
1821
                                        }
1791
1822
                                        else {
1825
1856
                }
1826
1857
                // send password mail
1827
1858
                if (!$stopprocessing && isLAMProVersion() && ($this->sendPasswordViaMail != null)) {
1828
 
                        $mailMessages = sendPasswordMail($this->sendPasswordViaMail, $prePostModifyAttributes);
 
1859
                        $mailMessages = sendPasswordMail($this->sendPasswordViaMail, $prePostModifyAttributes, $this->sendPasswordViaMailAlternateAddress);
1829
1860
                        if (sizeof($mailMessages) > 0) {
1830
1861
                                $errors = array_merge($errors, $mailMessages);
1831
1862
                        }
1832
1863
                        $this->sendPasswordViaMail = null;
 
1864
                        $this->sendPasswordViaMailAlternateAddress = null;
1833
1865
                }
1834
1866
                if (!$stopprocessing) {
1835
1867
                        // post modify actions