Commit 637e6ffffc8e110dfc228b11dfebdd770d952b3e
1 parent
d3da0fec
+ выгрузка пользователей в zip файл
Showing
1 changed file
with
94 additions
and
26 deletions
Show diff stats
libs/catalogs.class.php
| ... | ... | @@ -1596,7 +1596,7 @@ ORDER BY catalogs_users.mktime DESC"; |
| 1596 | 1596 | $array_string = explode (" ", trim ($params['search_str'])); |
| 1597 | 1597 | foreach ($array_string as $row) |
| 1598 | 1598 | { |
| 1599 | - $search[] = "(catalogs_products.name LIKE '%" . $row . "%' OR catalogs_products.text LIKE '%" . $row . " %' OR catalogs_rubrics.name LIKE '%" . $row . "%' OR catalogs_brends.name LIKE '%" . $row . "%' OR catalogs_modifications.code='" . $row . "')"; | |
| 1599 | + $search[] = "(catalogs_products.name LIKE '%" . $row . "%' OR catalogs_products.text LIKE '%" . $row . "%' OR catalogs_rubrics.name LIKE '%" . $row . "%' OR catalogs_brends.name LIKE '%" . $row . "%' OR catalogs_modifications.code='" . $row . "%')"; | |
| 1600 | 1600 | } |
| 1601 | 1601 | $search_string = array (); |
| 1602 | 1602 | // $search_string[] = "catalogs_products.name like '%".mysql_real_escape_string($params['search_str'])."%'"; |
| ... | ... | @@ -4452,43 +4452,111 @@ ORDER BY catalogs_users.mktime DESC"; |
| 4452 | 4452 | 'is_update' => 0 |
| 4453 | 4453 | ), DB_AUTOQUERY_UPDATE); |
| 4454 | 4454 | } |
| 4455 | - | |
| 4455 | + | |
| 4456 | + /** | |
| 4457 | + * Ýêñïîðò ñ ðàçáèâêîé íà ÷àñòè | |
| 4458 | + */ | |
| 4456 | 4459 | function exportUsersCSV () |
| 4460 | + { | |
| 4461 | + set_time_limit(3000); | |
| 4462 | + ini_set('memory_limit', '256M'); | |
| 4463 | + | |
| 4464 | + $param = array ( | |
| 4465 | + 'parts' => 1, | |
| 4466 | + 'count' => 0, | |
| 4467 | + 'start' => 0, | |
| 4468 | + 'end' => 0, | |
| 4469 | + 'limit' => 0, | |
| 4470 | + 'folder' => $_SERVER['DOCUMENT_ROOT'].'/tmp', | |
| 4471 | + 'files' => array(), | |
| 4472 | + 'zip_name' => 'users.zip', | |
| 4473 | + ); | |
| 4474 | + | |
| 4475 | + | |
| 4476 | + $total = $this->db->getOne (' | |
| 4477 | + SELECT count(id) as total | |
| 4478 | + FROM zlo_users | |
| 4479 | + '); | |
| 4480 | + | |
| 4481 | + $param['limit'] = round ($total / $param['parts']); | |
| 4482 | + | |
| 4483 | + for ($i = 0; $i < $param['parts']; $i++) | |
| 4484 | + { | |
| 4485 | + $param['files'][] = $param['folder'].'/user-'.$i.'.csv'; | |
| 4486 | + $param['count'] = $i; | |
| 4487 | + $param['start'] = $i * $param['limit']; | |
| 4488 | + | |
| 4489 | + $this->exportUsersFiles ($param); | |
| 4490 | + } | |
| 4491 | + | |
| 4492 | + // ==== ZIP ==== | |
| 4493 | + | |
| 4494 | + $zip = new ZipArchive(); | |
| 4495 | + | |
| 4496 | + if ($zip->open($param['zip_name'], ZIPARCHIVE::CREATE) === TRUE) | |
| 4497 | + { | |
| 4498 | + foreach ($param['files'] as $i => $file) | |
| 4499 | + { | |
| 4500 | + $content = file_get_contents($file); | |
| 4501 | + $zip->addFromString(pathinfo ($file, PATHINFO_FILENAME).'.csv', $content); | |
| 4502 | + | |
| 4503 | + unlink ($file); | |
| 4504 | + } | |
| 4505 | + | |
| 4506 | + $zip->close(); | |
| 4507 | + | |
| 4508 | + if (file_exists ($param['zip_name'])) | |
| 4509 | + { | |
| 4510 | + // îòäà¸ì ôàéë íà ñêà÷èâàíèå | |
| 4511 | + header('Content-type: application/zip'); | |
| 4512 | + header('Content-Disposition: attachment; filename="'.$param['zip_name'].'"'); | |
| 4513 | + readfile($param['zip_name']); | |
| 4514 | + | |
| 4515 | + // óäàëÿåì zip ôàéë åñëè îí ñóùåñòâóåò | |
| 4516 | + unlink ($param['zip_name']); | |
| 4517 | + } | |
| 4518 | + } | |
| 4519 | + } | |
| 4520 | + | |
| 4521 | + function exportUsersFiles ($param) | |
| 4457 | 4522 | { |
| 4458 | - $tmpfname = "tmp/users.csv"; | |
| 4523 | + $tmpfname = $param['files'][$param['count']]; | |
| 4524 | + | |
| 4459 | 4525 | $handle = fopen ($tmpfname, "w"); |
| 4460 | 4526 | |
| 4461 | - $sql = "SELECT u.id,u.username,u.tel,u.city,u.email,g.name,u.registered,summary,u.birthday,c.card | |
| 4527 | + $sql = ' | |
| 4528 | + SELECT | |
| 4529 | + u.id, | |
| 4530 | + u.username, | |
| 4531 | + u.tel, | |
| 4532 | + u.city, | |
| 4533 | + u.email, | |
| 4534 | + g.name, | |
| 4535 | + u.registered, | |
| 4536 | + summary, | |
| 4537 | + u.birthday, | |
| 4538 | + c.card | |
| 4462 | 4539 | FROM zlo_users AS u |
| 4463 | - LEFT JOIN card c ON c.user_id = u.id | |
| 4464 | - LEFT JOIN zlo_users_group AS g ON u.group = g.id | |
| 4465 | - LEFT JOIN (SELECT user_id AS order_user_id, sum( `total` ) AS `summary` FROM catalogs_orders group by user_id ) o | |
| 4466 | - ON u.id = o.order_user_id | |
| 4467 | - "; | |
| 4540 | + LEFT JOIN card c ON c.user_id = u.id | |
| 4541 | + LEFT JOIN zlo_users_group AS g ON u.group = g.id | |
| 4542 | + LEFT JOIN ( | |
| 4543 | + SELECT user_id AS order_user_id, sum( `total` ) AS `summary` | |
| 4544 | + FROM catalogs_orders | |
| 4545 | + GROUP BY user_id | |
| 4546 | + ) o ON u.id = o.order_user_id | |
| 4547 | + LIMIT '.$param['start'].', '.$param['limit'].' | |
| 4548 | + '; | |
| 4549 | + | |
| 4468 | 4550 | $res = $this->db->getAll ($sql); |
| 4551 | + | |
| 4469 | 4552 | foreach ($res as $key => $row) |
| 4470 | 4553 | { |
| 4471 | 4554 | File_FGetCSV::fputcsv ($handle, $row, ';'); |
| 4472 | 4555 | } |
| 4473 | - fclose ($handle); | |
| 4474 | - $params = array ( | |
| 4475 | - 'file' => $tmpfname, | |
| 4476 | - 'contenttype' => 'application/xls', | |
| 4477 | - 'contentdisposition' => array ( | |
| 4478 | - HTTP_DOWNLOAD_ATTACHMENT, | |
| 4479 | - 'users.csv' | |
| 4480 | - ), | |
| 4481 | - 'cache' => false | |
| 4482 | - ); | |
| 4483 | - $error = HTTP_Download::staticSend ($params, false); // îòäà¸ì ôàéë | |
| 4484 | - if ($error === true) | |
| 4485 | - { | |
| 4486 | - // åñëè ôàéë çàãðóæåí óñïåøíî, îáíîâëÿåì äàòó ïîñëåäíåé çàêà÷êè | |
| 4487 | - } | |
| 4488 | 4556 | |
| 4489 | - unlink ($tmpfname); | |
| 4557 | + fclose ($handle); | |
| 4490 | 4558 | } |
| 4491 | - | |
| 4559 | + | |
| 4492 | 4560 | function exportUsersBirdthCSV () |
| 4493 | 4561 | { |
| 4494 | 4562 | $tmpfname = "tmp/usersBirdth.csv"; | ... | ... |