Example #1
0
function submitForm($elems, $doneFunc = 'AjaxFormObj.checkDone', $errFunc = 'AjaxFormObj.checkError')
{
    global $lbl, $txt, $users_extra_fields;
    $auth = R3AuthInstance::get();
    $fieldDescr = array('app_code' => array(MISSING_FIELD => _("Il campo 'applicazione' e' obbligatorio"), INVALID_FIELD => _("Il campo 'applicazione' contiene caratteri non validi. Solo lettere e numeri sono accettati"), PK_ERROR => _("Il campo 'codice' immesso esiste gia'")), 'app_name' => array(MISSING_FIELD => _("Il campo 'nome' e' obbligatorio")));
    // print_r($elems);
    $elems = AjaxSplitArray($elems);
    // print_r($elems);
    $objResponse = new xajaxResponse();
    /** User extra field for the common section */
    $extra_fields = $auth->getConfigValue('USER_MANAGER', 'EXTRA_FIELDS', array());
    if (isset($users_extra_fields)) {
        $extra_fields = array_merge($extra_fields, $users_extra_fields);
    }
    $error = array();
    try {
        $errors = checkReq($extra_fields, $elems);
        if (!empty($errors)) {
            $errorMsg = implode('\\n', $errors);
            throw new Exception($errorMsg);
        }
        if ($auth->passwordStatus < 0 && $elems['us_password'] == '') {
            throw new Exception('Password must be set');
        }
        /** Extra fields in user table */
        $extras = array();
        foreach ($extra_fields as $key => $val) {
            if (!isset($val['inistorage']) && !isset($val['kind'])) {
                if (isset($elems[$key])) {
                    $extras[$key] = $elems[$key];
                }
            }
        }
        /** password check */
        if ($elems['us_password'] != '' && $elems['us_password'] != $elems['us_password2']) {
            throw new Exception('Invalid password');
        }
        if ($elems['us_password'] != '') {
            $auth->setParam('us_password', $elems['us_password'], true);
        }
        foreach ($extras as $key => $val) {
            $auth->setParam($key, $val, true);
        }
        /** Extra fields in user table */
        foreach ($extra_fields as $key => $val) {
            if (isset($val['inistorage']) && !isset($val['kind'])) {
                if (isset($elems[$key])) {
                    $auth->setConfigValue($val['inistorage'][0], $val['inistorage'][1], $elems[$key]);
                }
            }
        }
    } catch (EPermissionDenied $e) {
        $error['element'][] = '';
        $error['message'][] = $e->getMessage();
    } catch (EDatabaseError $e) {
        $error['element'][] = '';
        $error['message'][] = "Database error: " . $e->getMessage();
    } catch (EInputError $e) {
        $error['element'][] = $e->getField();
        if (isset($fieldDescr[$e->getField()][$e->getCode()])) {
            $error['message'][] = $fieldDescr[$e->getField()][$e->getCode()];
        } else {
            $error['message'][] = $e->getMessage();
        }
    } catch (Exception $e) {
        $error['element'][] = '';
        //$error['message'][] = 'Generic error: ' . $e->getMessage();
        $error['message'][] = $e->getMessage();
    }
    // Action
    if (count($error) > 0) {
        $errText = $txt['err_store_failed'] . "\n - " . implode("\n - ", $error['message']);
        $objResponse->addScriptCall($errFunc, $errText, $error['element'][0]);
    } else {
        $objResponse->addScriptCall($doneFunc);
    }
    return $objResponse->getXML();
}
Example #2
0
function submitForm($elems, $doneFunc = 'AjaxFormObj.checkDone', $errFunc = 'AjaxFormObj.checkError')
{
    global $lbl, $txt, $users_extra_fields, $mdb2;
    $auth = R3AuthInstance::get();
    $fieldDescr = array('dn_name' => array(MISSING_FIELD => _("Il campo 'Dominio' è obbligatorio."), INVALID_FIELD => _("Il campo 'Dominio' non è valido.")), 'app_code' => array(MISSING_FIELD => _("Il campo 'Applicazione' è obbligatorio."), INVALID_FIELD => _("Il campo 'Applicazione' contiene caratteri non validi. Prego inserire solo lettere e numeri."), PK_ERROR => _("Il campo 'Applicazione' immesso è già presente in banca dati.")), 'us_login' => array(IN_USE => _("Impossibile cancellare questo utente perchè in uso."), MISSING_FIELD => _("Il campo 'Login' è obbligatorio."), INVALID_FIELD => _("Il campo 'Login' non è valido.")), 'us_name' => array(MISSING_FIELD => _("Il campo 'Nome' è obbligatorio.")));
    // print_r($elems);
    $elems = AjaxSplitArray($elems);
    if (!isset($elems['us_ip'])) {
        $elems['us_ip'] = null;
    }
    if (!isset($elems['us_start_date'])) {
        $elems['us_start_date'] = null;
    }
    if (!isset($elems['us_expire_date'])) {
        $elems['us_expire_date'] = null;
    }
    // print_r($elems);
    $objResponse = new xajaxResponse();
    /** User extra field for the common section */
    $extra_fields = $auth->getConfigValue('USER_MANAGER', 'EXTRA_FIELDS', array());
    if (isset($users_extra_fields)) {
        $extra_fields = array_merge($extra_fields, $users_extra_fields);
    }
    $error = array();
    try {
        if ($elems['act'] != 'del') {
            $errors = checkReq($extra_fields, $elems);
            if (!empty($errors)) {
                $errorMsg = implode('\\n', $errors);
                throw new Exception($errorMsg);
            }
        }
        /** extract the selected groups and permissions */
        $dn_name = strtoupper(trim($elems['dn_name']));
        $a = $auth->getDomainData($dn_name, true);
        $appList = $a['applications'];
        $groups = array();
        $perms = array();
        //$perms_n = array();
        if (is_array($appList)) {
            foreach ($appList as $appKey => $appVal) {
                if (isset($elems['selectedGroups_' . $appKey])) {
                    $elemValues = $elems['selectedGroups_' . $appKey];
                    foreach (explode(",", $elemValues) as $value) {
                        if ($value != '') {
                            $groups[] = array('app_code' => $appKey, 'gr_name' => $value);
                        }
                    }
                }
                if (isset($elems['selectedPerms_' . $appKey])) {
                    $elemValues = $elems['selectedPerms_' . $appKey];
                    foreach (explode(",", $elemValues) as $value) {
                        if ($value != '') {
                            $a = explode('|', $value);
                            $perms[] = array('app_code' => $appKey, 'ac_verb' => $a[0], 'ac_name' => $a[1], 'ua_kind' => 'ON');
                        }
                    }
                }
                if (isset($elems['selectedPerms_n_' . $appKey])) {
                    $elemValues = $elems['selectedPerms_n_' . $appKey];
                    foreach (explode(",", $elemValues) as $value) {
                        if ($value != '') {
                            $a = explode('|', $value);
                            $perms[] = array('app_code' => $appKey, 'ac_verb' => $a[0], 'ac_name' => $a[1], 'ua_kind' => 'OFF');
                        }
                    }
                }
            }
        }
        /** Extra fields in user table */
        $extras = array();
        foreach ($extra_fields as $key => $val) {
            if (!isset($val['inistorage']) && isset($elems[$key])) {
                if (isset($val['storagetable'])) {
                    $extras[$key] = array('table' => $val['storagetable'], 'data' => $elems[$key]);
                } else {
                    $extras[$key] = $elems[$key];
                }
            }
        }
        global $dbini;
        if ($elems['act'] == 'add') {
            /** add a new application */
            if ($elems['us_password'] != $elems['us_password2']) {
                throw new Exception('Invalid password');
            }
            $data = array('us_name' => $elems['us_name'], 'us_password' => $elems['us_password'], 'us_status' => $elems['us_status'], 'groups' => $groups, 'perms' => $perms, 'ip' => $auth->strToIPArray($elems['us_ip']), 'us_start_date' => dateToISO($elems['us_start_date']), 'us_expire_date' => dateToISO($elems['us_expire_date']), 'us_pw_expire' => $elems['us_pw_expire'], 'us_pw_expire_alert' => $elems['us_pw_expire_alert'], 'as_code' => isset($elems['as_code']) ? $elems['as_code'] : null, 'forceChangePassword' => isset($elems['us_force_password_change']) && $elems['us_force_password_change'] == 'T');
            $auth->addUserFromArray($dn_name, trim($elems['us_login']), $data, $extras, true);
        } else {
            if ($elems['act'] == 'mod') {
                /** modify an application */
                if ($elems['us_password'] != '' && $elems['us_password'] != $elems['us_password2']) {
                    throw new Exception('Invalid password');
                }
                $data = array('us_name' => $elems['us_name'], 'us_password' => $elems['us_password'], 'us_status' => $elems['us_status'], 'groups' => $groups, 'perms' => $perms, 'ip' => $auth->strToIPArray($elems['us_ip']), 'us_start_date' => dateToISO($elems['us_start_date']), 'us_expire_date' => dateToISO($elems['us_expire_date']), 'us_pw_expire' => $elems['us_pw_expire'], 'us_pw_expire_alert' => $elems['us_pw_expire_alert'], 'as_code' => isset($elems['as_code']) ? $elems['as_code'] : null, 'forceChangePassword' => isset($elems['us_force_password_change']) && $elems['us_force_password_change'] == 'T');
                $auth->modUserFromArray($elems['old_dn_name'], $elems['old_us_login'], $dn_name, trim($elems['us_login']), $data, $extras, true);
            } else {
                if ($elems['act'] == 'del') {
                    /** delete an application */
                    // Check constraint
                    $a = $auth->getConfigValue('USER_MANAGER', 'USER_CONSTRAINTS', array());
                    if (is_array($a)) {
                        $userData = $auth->getUserData($elems['dn_name'], null, $elems['us_login']);
                        if ($userData !== null) {
                            foreach ($a as $val) {
                                if (isset($val['sql'])) {
                                    $sql = $val['sql'];
                                    $sql = str_replace('<UID>', $userData['us_id'], $sql);
                                    $res =& $mdb2->query($sql);
                                    if (PEAR::isError($res)) {
                                        throw new EDatabaseError($res->getMessage() . $sql);
                                    }
                                    if ($row = $res->fetchRow()) {
                                        if ($row[0] > 0) {
                                            if (isset($val['error_message'])) {
                                                $s = $val['error_message'];
                                            } else {
                                                $s = $val['Constraint error'];
                                            }
                                            if (isset($txt[$s])) {
                                                $s = $txt[$s];
                                            }
                                            throw new EConstraintError($s);
                                        }
                                    }
                                }
                            }
                        }
                    }
                    $auth->delUser($elems['dn_name'], $elems['us_login'], false, true);
                } else {
                    throw new Exception('Invalid action');
                }
            }
        }
        /** Extra fields in user table */
        foreach ($extra_fields as $key => $val) {
            if (isset($val['inistorage'])) {
                if (isset($elems[$key])) {
                    // Creo il parametro per ogni applicazione
                    //SS: TODO: Salvare solo un valore nella banca dati
                    $domainData = $auth->getDomainData($dn_name, true);
                    foreach ($domainData['applications'] as $appKey => $appVal) {
                        $auth->setConfigValueFor($dn_name, $appKey, trim($elems['us_login']), $val['inistorage'][0], $val['inistorage'][1], $elems[$key]);
                    }
                }
            }
        }
    } catch (EPermissionDenied $e) {
        $error['element'][] = '';
        $error['message'][] = _('Permesso negato');
        //$e->getMessage();
    } catch (EDatabaseError $e) {
        //SS: E' sempre la login?
        if (strpos($e->getMessage(), 'constraint violation') !== false) {
            $error['element'][] = 'us_login';
            if ($elems['act'] == 'del') {
                $error['message'][] = _("Impossibile cancellare l'utente perchè vi sono dei dati ad esso legati");
            } else {
                $error['message'][] = "Database error: " . $e->getMessage();
            }
        } else {
            $error['element'][] = '';
            $error['message'][] = "Database error: " . $e->getMessage();
        }
    } catch (EConstraintError $e) {
        $error['element'][] = '';
        $error['message'][] = $e->getMessage();
    } catch (EInputError $e) {
        $error['element'][] = $e->getField();
        if (isset($fieldDescr[$e->getField()][$e->getCode()])) {
            $error['message'][] = $fieldDescr[$e->getField()][$e->getCode()];
        } else {
            $error['message'][] = $e->getMessage();
        }
    } catch (Exception $e) {
        $error['element'][] = '';
        $error['message'][] = 'Generic error: ' . $e->getMessage();
    }
    // Action
    if (count($error) > 0) {
        $errText = _('Attenzione!') . "\n - " . implode("\n - ", $error['message']);
        $objResponse->addScriptCall($errFunc, $errText, $error['element'][0]);
    } else {
        $objResponse->addScriptCall($doneFunc);
    }
    return $objResponse->getXML();
}