Commit 637e6ffffc8e110dfc228b11dfebdd770d952b3e

Authored by andryeyev
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,7 +1596,7 @@ ORDER BY catalogs_users.mktime DESC";
1596 $array_string = explode (" ", trim ($params['search_str'])); 1596 $array_string = explode (" ", trim ($params['search_str']));
1597 foreach ($array_string as $row) 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 $search_string = array (); 1601 $search_string = array ();
1602 // $search_string[] = "catalogs_products.name like '%".mysql_real_escape_string($params['search_str'])."%'"; 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,43 +4452,111 @@ ORDER BY catalogs_users.mktime DESC";
4452 'is_update' => 0 4452 'is_update' => 0
4453 ), DB_AUTOQUERY_UPDATE); 4453 ), DB_AUTOQUERY_UPDATE);
4454 } 4454 }
4455 - 4455 +
  4456 + /**
  4457 + * Ýêñïîðò ñ ðàçáèâêîé íà ÷àñòè
  4458 + */
4456 function exportUsersCSV () 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 $handle = fopen ($tmpfname, "w"); 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 FROM zlo_users AS u 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 $res = $this->db->getAll ($sql); 4550 $res = $this->db->getAll ($sql);
  4551 +
4469 foreach ($res as $key => $row) 4552 foreach ($res as $key => $row)
4470 { 4553 {
4471 File_FGetCSV::fputcsv ($handle, $row, ';'); 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 function exportUsersBirdthCSV () 4560 function exportUsersBirdthCSV ()
4493 { 4561 {
4494 $tmpfname = "tmp/usersBirdth.csv"; 4562 $tmpfname = "tmp/usersBirdth.csv";