Exemple #1
0
/**
 * Read field-configuration as array and interpret array-keys
 * this function calls tagReplace
 *
 * @param mdb2    $mdb2 database object
 * @param R3Auth  $auth authentication object
 * @param array   $fields field-configuration
 * @param array   $data
 */
function readFieldArray($mdb2, $auth, &$fields, &$data, $opts = array())
{
    $opts = array_merge(array('ignoreReadOnly' => false, 'ignoreHidden' => false), $opts);
    $isAuthManager = get_class($auth) == 'R3AuthManager' || is_subclass_of($auth, 'R3AuthManager');
    if ($isAuthManager) {
        if (isset($data['do_name'])) {
            $dn_name = $data['dn_name'];
        } else {
            if (isset($data['do_id'])) {
                $domainData = $auth->getDomainDataFromID($data['do_id']);
                $dn_name = $domainData['dn_name'];
            } else {
                $dn_name = $auth->getDomainName();
            }
        }
        if (isset($data['app_code'])) {
            $app_code = $data['app_code'];
        } else {
            $app_code = $auth->getApplicationCode();
        }
        if (isset($data['us_login'])) {
            $us_login = $data['us_login'];
        } else {
            $us_login = $auth->getLogin();
        }
        // Se la chiamata fallisce l'utente non viene trovato. Considero un nuovo utente
        $isAdd = !$auth->loadConfigFor($dn_name, $app_code, $us_login);
    } else {
        $isAdd = false;
    }
    //$fixedValues = array();
    foreach ($fields as $fieldname => $settings) {
        if (isset($settings['inivalue']) && !isset($settings['value'])) {
            $fields[$fieldname]['value'] = $auth->getConfigValue($settings['inivalue'][0], $settings['inivalue'][1], $settings['inivalue'][2]);
        }
        if (isset($settings['label']) && isset($lbl[$settings['label']])) {
            $fields[$fieldname]['label'] = tagReplace($lbl[$settings['label']]);
        } else {
            if (isset($settings['label'])) {
                $fields[$fieldname]['label'] = _(tagReplace($settings['label']));
            }
        }
        if ($opts['ignoreReadOnly'] == true) {
            $ReadOnly = false;
        } else {
            $ReadOnly = isset($settings['kind']) && strToUpper(substr($settings['kind'], 0, 1)) == 'R';
        }
        if (isset($settings['type']) && in_array($settings['type'], array('select', 'select-multiple'))) {
            $a = array();
            if (isset($settings['sql']) && $settings['sql'] != '') {
                $sql = tagReplace($settings['sql']);
                $res =& $mdb2->query($sql);
                if (PEAR::isError($res)) {
                    throw new Exception($res->getMessage());
                }
                while ($row = $res->fetchRow(MDB2_FETCHMODE_ORDERED)) {
                    if (count($row) > 2) {
                        if ($ReadOnly || $row[0] == '' && $row[1] == '') {
                            $a[$row[0]] = $row[2];
                        } else {
                            $a[$row[1]][$row[0]] = $row[2];
                            /** men� a tendina con option */
                        }
                    } else {
                        $a[$row[0]] = $row[1];
                    }
                }
                $fields[$fieldname]['values'] = $a;
                if ($ReadOnly) {
                    /** Menu a tendina Read Only: Correggo valore (test_cbReplaceTexto e non value) */
                    if (isset($data[$fieldname]) && isset($a[$data[$fieldname]])) {
                        $data[$fieldname] = $a[$data[$fieldname]];
                    }
                }
            } else {
                if ($ReadOnly) {
                    if (!isset($settings['inistorage'])) {
                        $data[$fieldname] = @$fields[$fieldname]['values'][$auth->getParam($fieldname)];
                    }
                } else {
                    foreach ($fields[$fieldname]['values'] as $key => $val) {
                        $fields[$fieldname]['val'][$key] = _(tagReplace($val));
                    }
                    $fields[$fieldname]['values'] = $fields[$fieldname]['val'];
                }
            }
        }
    }
    // Assign the user values
    if (!$isAdd) {
        if (isset($fields) && is_array($fields)) {
            foreach ($fields as $fieldname => $settings) {
                if (isset($settings['inistorage'])) {
                    $default = @$auth->getConfigValue($settings['inivalue'][0], $settings['inivalue'][1], $settings['inivalue'][2]);
                    $fields[$fieldname]['value'] = $auth->getConfigValue($settings['inistorage'][0], $settings['inistorage'][1], $default);
                } else {
                    if (isset($settings['storagetable'])) {
                        if (isset($data['us_id'])) {
                            $sql = "SELECT {$fieldname} FROM {$settings['storagetable']} WHERE us_id={$data['us_id']} ";
                            $res =& $mdb2->query($sql);
                            if (PEAR::isError($res)) {
                                throw new Exception($res->getMessage());
                            }
                            $fields[$fieldname]['value'] = array();
                            while ($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)) {
                                $fields[$fieldname]['value'][] = $row[$fieldname];
                            }
                        }
                    } else {
                        if (isset($data[$fieldname])) {
                            $fields[$fieldname]['value'] = $data[$fieldname];
                        }
                    }
                }
            }
        }
    }
}
function checkReq($extra_fields, $elems)
{
    /** checks * */
    $parseError = null;
    $errors = array();
    foreach ($extra_fields as $key => $val) {
        $label = tagReplace($val['label']);
        /** check required * */
        if (isset($val['required']) && $val['required'] === true) {
            if ($elems[$key] == '' && !in_array($label, $errors)) {
                $msg = sprintf(_("\"%s\" è obbligatorio"), $label);
                $errors[$label] = $msg;
                break;
            }
        }
        /** check maxlength * */
        if (isset($val['type']) && $val['type'] == 'text' || $val['type'] == 'string') {
            // check string length
            if (isset($val['maxlength']) && mb_strlen($elems[$key]) > $val['maxlength']) {
                $sanValue = mb_substr($rv, 0, $val['maxlength']);
            } else {
                $sanValue = $elems[$key];
            }
        }
        /** check type integer * */
        if (isset($val['type']) && $val['type'] == 'integer') {
            if (trim($elems[$key]) === '') {
                $sanValue = null;
            } else {
                if (is_numeric($elems[$key])) {
                    if ((int) $elems[$key] == $elems[$key]) {
                        $sanValue = (int) $elems[$key];
                    } else {
                        $parseError = true;
                    }
                } else {
                    if (is_string($elems[$key])) {
                        if (preg_match('/^[+-]?[0-9]+$/', trim($elems[$key]))) {
                            $sanValue = (int) $elems[$key];
                        } else {
                            $parseError = true;
                        }
                    } else {
                        $parseError = true;
                    }
                }
            }
            if ($parseError) {
                $msg = sprintf(_("La stringa '%s' non può essere interpretata come intero"), $elems[$key]);
                $errors[$label] = $msg;
                break;
            }
        }
        /** check type float * */
        if (isset($val['type']) && $val['type'] == 'float') {
            if (trim($elems[$key]) === '') {
                $sanValue = null;
            } else {
                if (is_numeric($elems[$key])) {
                    $sanValue = $elems[$key];
                } else {
                    if (is_string($elems[$key])) {
                        $sign = +1;
                        // is integer?
                        if (preg_match('/^\\s*([+-]?)([0-9]+)\\s*$/', $elems[$key], $parts)) {
                            if ($parts[1] == '-') {
                                $sign = -1;
                            }
                            $sanValue = $sign * (double) $parts[2];
                            // or float?
                        } else {
                            if (preg_match('/^([+-]?)([0-9]*)([\\.,]?)([0-9]*)$/', $elems[$key], $parts)) {
                                if ($parts[1] == '-') {
                                    $sign = -1;
                                }
                                $sanValue = $sign * (double) ($parts[2] . '.' . $parts[4]);
                            } else {
                                $parseError = true;
                            }
                        }
                    }
                }
            }
            if ($parseError) {
                $msg = sprintf(_("La stringa '%s' non può essere interpretata come float"), $elems[$key]);
                $errors[$label] = $msg;
                break;
            }
        }
        /** check uniqes * */
        if (isset($val['unique']) && is_array($val['unique'])) {
            global $mdb2;
            $sql = "SELECT count(*) from {$val['unique']['table']} where {$val['unique']['key']} = " . $mdb2->quote($elems[$key]);
            if (!empty($elems['us_login'])) {
                $sql .= " AND us_login <> " . $mdb2->quote($elems['us_login']);
            }
            $result =& $mdb2->query($sql);
            $vlu = $result->fetchRow(0);
            if ($vlu[0] > 0) {
                $msg = sprintf(_("{$label} \"%s\" esiste già"), $elems[$key]);
                $errors[$label] = $msg;
                break;
            }
            continue;
        }
    }
    return $errors;
}
     $res = tagSave($system, $_REQUEST);
 } else {
     if ($action == "delete" && @$_REQUEST['ids']) {
         $res = tagDelete($system, $_REQUEST['ids'], @$_REQUEST['UGrpID']);
     } else {
         if ($action == "search" && @$_REQUEST['UGrpID']) {
             $res = tagGetByRecords($system, @$_REQUEST['info'] != "short", @$_REQUEST['recIDs'], @$_REQUEST['UGrpID']);
             if (is_array($res)) {
                 $res['recIDs'] = @$_REQUEST['recIDs'];
             }
             /*
             $res = tagGetByUser($system, false, $_REQUEST['UGrpID']);
             */
         } else {
             if ($action == "replace" && @$_REQUEST['UGrpID']) {
                 $res = tagReplace($system, $_REQUEST['ids'], $_REQUEST['new_id'], @$_REQUEST['UGrpID']);
             } else {
                 if ($action == "rating") {
                     $res = bookmarkRating($system, @$_REQUEST['recIDs'], @$_REQUEST['rating'], @$_REQUEST['UGrpID']);
                 } else {
                     if ($action == "set") {
                         // assign/remove tags to records
                         if (@$_REQUEST['assign']) {
                             $res = tagsAssign($system, @$_REQUEST['recIDs'], @$_REQUEST['assign'], null, @$_REQUEST['UGrpID']);
                         } else {
                             $res = array();
                         }
                         if (!is_bool($res) && @$_REQUEST['remove']) {
                             $res2 = tagsRemove($system, @$_REQUEST['recIDs'], @$_REQUEST['remove'], null, @$_REQUEST['UGrpID']);
                             if (is_bool($res) && !$res) {
                                 $res = false;