33 $render->setTemplateName(
'user_data_upload_conf.html');
37 $user_handler =& $this->_getHandler();
38 $user_tmp = $user_handler->create();
39 $user_key = array_keys($user_tmp->gets());
40 foreach ($user_key as $key) {
41 $_f =
'_MD_USER_LANG_'.strtoupper($key);
42 $fields[] = defined($_f) ? constant($_f) : $key ;
44 $render->setAttribute(
'user_fields', $fields);
48 $csv_file = $_FILES[
'user_csv_file'][
'tmp_name'];
50 $user_h =& $this->_getHandler();
51 if (function_exists(
'mb_detect_encoding')) {
52 $_csv_contents = implode(
'', file($csv_file));
53 $csv_encoding = mb_detect_encoding($_csv_contents);
56 if (
false !== ($handle = fopen($csv_file,
'r'))) {
57 $current_locale =
false;
58 if (
'UTF-8' === $csv_encoding) {
59 $current_locale = setlocale(LC_ALL,
'0');
60 setlocale(LC_ALL,
'ja_JP.UTF-8');
61 $bom = fread($handle, 3);
62 if (0xef !== ord($bom[0]) || 0xbb !== ord($bom[1]) || 0xbf !== ord($bom[2])) {
67 while (
false !== ($_data = fgetcsv($handle))) {
69 mb_convert_variables(_CHARSET, $csv_encoding, $_data);
71 if (!$n++ || !implode(
'', $_data)) {
80 if (count((array) $_data) != count($user_key)) {
81 $user_data[
'error'] =
true;
84 $user =& $user_h->get($_data[0]);
86 for ($i=0; $i<count($user_key); $i++) {
87 $csv_value = $_data[$i];
88 $user_value = $user->get($user_key[$i]);
89 $update = $user_value != $csv_value;
90 switch ($user_key[$i]) {
93 $update = ($user_value || $csv_value) && 0 !== strcmp(formatTimestamp($user_value,
'Y/n/j H:i'), $csv_value);
98 if (strlen($csv_value) < 32) {
100 $update = $user_value !== $csv_value;
104 $user_data[
'update'] = $user_data[
'update'] | $update;
105 $user_data[
'value'][] = [
110 $user_data[
'is_new'] =
false;
113 if (
true == $user_data[
'is_new']) {
114 for ($i=0; $i<count($user_key); $i++) {
115 $var = isset($_data[$i]) &&
'' !== $_data[$i] ? $_data[$i] : $user_tmp->get($user_key[$i]);
116 switch ($user_key[$i]) {
119 $var = formatTimestamp($var,
'Y/n/j H:i');
122 $user_data[
'value'][] = [
128 $csv_data[] = $user_data;
130 if ($current_locale) {
131 setlocale(LC_ALL, $current_locale);
136 $render->setAttribute(
'csv_data', $csv_data);
137 $_SESSION[
'user_csv_upload_data'] = $csv_data;
154 foreach ([
' ',
"\t",
"\r",
"\n"] as $c) {
155 if ($c != $delimiter) {
161 if (preg_match(
"/([$space_list]+)\$/sS", $csv, $match)) {
162 $line_end = $match[1];
164 $csv = substr($csv, 0, strlen($csv)-strlen($line_end));
171 $csv_len = strlen($csv);
174 if (preg_match(
"/^([$space_list]+)/sS", substr($csv, $index), $match)) {
175 $index += strlen($match[1]);
177 if ($index >= $csv_len) {
182 if (
'"' == $csv[$index]) {
185 while ($index < $csv_len) {
186 if (
'"' == $csv[$index]) {
188 if (
'"' == $csv[$index + 1]) {
189 $field .= $csv[$index];
193 while ($csv[$index] != $delimiter && $index < $csv_len) {
196 if ($csv[$index] == $delimiter) {
203 if (preg_match(
'/^([^"]*)/S', substr($csv, $index), $match)) {
205 $index += strlen($match[1]);
208 if ($index == $csv_len) {
209 $field = substr($field, 0, strlen($field)-1);
219 if (preg_match(
"/^([^$delimiter]*)/S", substr($csv, $index), $match)) {
221 $index += strlen($match[1]);
225 $field = preg_replace(
"/[$space_list]+\$/S",
'', $field);
226 if (isset($csv[$index]) && $csv[$index] == $delimiter) {
232 }
while ($index < $csv_len);