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"; | ... | ... |