view->setTemplateAfter('common');
}
function indexAction($id){
if($id){
$this->session->set("project-id", $id);
}
$model_sections = \parserSections::query()
->where("project_id = {$this->session->get('project-id')}")
->execute()->toArray();
foreach($model_sections as $k => $v){
$model_section[$v['id']] = $v;
}
$sections_id = implode("','",$this->common->array_column( $model_sections, 'id' ));
if($sections_id) {
$model_items = \parserItems::query()
->where("section_id IN ('$sections_id')")
->execute()->toArray();
$items_id = implode("','", $this->common->array_column($model_items, 'id'));
$model_competitors = \parserCompetitors::query()
->where("project_id = {$this->session->get('project-id')}")
->execute()->toArray();
foreach($model_competitors as $competitors){
$model_competitors_items = \parserCompetitorsItems::find("item_id IN ('$items_id') AND competitor_id = {$competitors['id']} AND status = 1 AND link_status = 'ok' AND exist = ''")->toArray();
if($model_competitors_items) {
foreach($model_competitors_items as $item_data){
$competitor_item[$competitors['id']][$item_data['item_id']] = $item_data;
}
}
}
$model_competitors = \parserCompetitors::query()
->where(!empty($competitors_id) ? "id IN ('$competitors_id')" : '1=1')
->execute()->toArray();
$this->view->setVars([
'model_sections' => $model_section,
'model_items' => $model_items,
'model_competitors_items' => $model_competitors_items,
'model_competitors' => $model_competitors,
'controller' => $this,
'competitor_item' => $competitor_item
]);
} else {
die('
Активных разделов не найдено
');
}
}
function checkRegAction(){
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$site_url = $this->request->get('site_url');
$regex_h1 = $this->request->get('regex_h1');
$regex_price = $this->request->get('regex_price');
$exist_regexr = $this->request->get('regex_exist');
$exist[1] = '';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $site_url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT , "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)");
$headers = array
(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*;q=0.8',
'Accept-Language: ru,en-us;q=0.7,en;q=0.3',
'Accept-Encoding: utf-8',
'Accept-Charset: utf-8;q=0.7,*;q=0.7'
);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
$page = curl_exec($ch);
$header = curl_getinfo($ch);
curl_close($ch);
if(preg_match('/windows/i',$header['content_type'])) {
$page = iconv("windows-1251", "utf-8", $page);
}
preg_match($regex_price, $page, $price);
preg_match($regex_h1, $page, $h1);
if($exist_regexr) {
preg_match($exist_regexr, $page, $exist);
}
$price = preg_replace("/[^0-9]/", '', $price[1]);
$result = array(
'price' => $price,
'h1' => $h1[1],
'exist' => $exist[1]
);
die(json_encode($result));
}
function parseAction(){
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$competitors = \parserCompetitors::find();
$i=0;
$parser_data = array();
foreach($competitors as $competitor){
$model_sections = \parserSections::query()
->where("id IN ('".str_replace(",","','",$competitor->sections_id)."')")
->execute();
foreach($model_sections as $items) {
foreach($items->parserItems as $item){
$parser_data[$i] = $this->a_parser->parseLinks($competitor->url, $item->item_name, $competitor->h1_regexr, $competitor->price_regexr, $competitor->exist_regexr);
if($parser_data[$i]) {
$parser_data[$i]['competitor_id'] = $competitor->id;
$parser_data[$i]['item_id'] = $item->id;
$i++;
}
}
}
}
foreach($parser_data as $data) {
if($parser_data) {
$model_competitors_items = \parserCompetitorsItems::checkSection($data['item_id'], $data['competitor_id']);
if(!$model_competitors_items){
$model_competitors_items = new \parserCompetitorsItems();
$model_competitors_items->price = $data['price'];
$model_competitors_items->h1 = $data['h1'];
$model_competitors_items->item_url = $data['link'];
$model_competitors_items->competitor_id = $data['competitor_id'];
$model_competitors_items->item_id = $data['item_id'];
$model_competitors_items->status = 0;
$model_competitors_items->save();
} else {
$model_competitors_items->price = $data['price'];
$model_competitors_items->h1 = $data['h1'];
$model_competitors_items->item_url = $data['link'];
$model_competitors_items->competitor_id = $data['competitor_id'];
$model_competitors_items->item_id = $data['item_id'];
$model_competitors_items->item_id = 0;
$model_competitors_items->save();
}
}
}
}
function sectionsAction(){
$user_id = $this->session->get('user-id');
$project_id = $this->session->get('project-id');
//Check if the user has uploaded files
if ($this->request->hasFiles() == true) {
//Print the real file names and their sizes
foreach ($this->request->getUploadedFiles() as $file){
//Move the file into the application
$route = STORAGE_PATH.'temp/'.$file->getName();
$file->moveTo($route);
}
$this->ServiceExcel->addFile($route);
$result = $this->ServiceExcel->getRows();
$data = new \parserItems();
// $data->updateStatus($this->modelsManager);
/*foreach($result as $row){
$model_sections = \parserSections::checkSection($project_id, $row[0]);
if(!$model_sections){
$model_sections = new \parserSections();
$model_sections->project_id = $project_id;
$model_sections->section_name = $row[1];
$model_sections->section_user_id = $row[0];
$model_sections->save();
} else {
$model_sections->project_id = $project_id;
$model_sections->section_name = $row[1];
$model_sections->section_user_id = $row[0];
$model_sections->save();
}
$model_items = \parserItems::checkSection($model_sections->id, $row[2]);
if(!$model_items){
$model_items = new \parserItems();
$model_items->item_name = $row[3];
$model_items->item_users_id = $row[2];
$model_items->price = $row[4];
$model_items->status = 1;
$model_items->url = $row[5];
$model_items->section_id = $model_sections->id;
$model_items->save();
} else {
$model_items->item_name = $row[3];
$model_items->item_users_id = $row[2];
$model_items->price = $row[4];
$model_items->status = 1;
$model_items->url = $row[5];
$model_items->section_id = $model_sections->id;
$model_items->save();
}
}*/
$data->DeleteNonActive($this->modelsManager);
return $this->response->redirect([ 'for' => 'price_parser_sections' ]);
}
$model = new \parserSections();
$data = $model->getData($this->modelsManager,$project_id);
$this->view->setVars([
'data' => $data,
]);
}
function sectionsIndexAction(){
$params = $this->dispatcher->getParams();
$currentPage = $this->request->get('page', 'int', 1);
// Набор данных для разбивки на страницы
$data = \parserSections::find(array("project_id = {$this->session->get('project-id')}"));
$this->view->setVars([
'data' => $data
]);
}
function sectionsAddAction(){
}
function competitorsRelAction($id){
$model_competitors = \parserCompetitors::query()
->where("id = $id")
->execute()->toArray();
$sections_id = str_replace(",","','",$model_competitors[0]['sections_id']);
$model = new \parserCompetitors;
$data = $model->getData($this->modelsManager,$sections_id, $id);
$this->view->setVars([
'data' => $data,
'controller' => $this
]);
}
function competitorsAction(){
$params = $this->dispatcher->getParams();
$currentPage = $this->request->get('page', 'int', 1);
// Набор данных для разбивки на страницы
$data = \parserCompetitors::find(array("project_id = {$this->session->get('project-id')}"));
$sections = \parserSections::find(array("project_id = {$this->session->get('project-id')}"));
// Создаём пагинатор, отображаются 10 элементов на странице, начиная с текущей - $currentPage
// Получение результатов работы ппагинатора
$this->view->setVars([
'data' => $data,
'sections' => $sections
]);
}
function competitorsAddAction(){
if( $this->request->isPost() )
{
$data['project_id'] = $this->session->get('project-id');
$data['name'] = $this->request->getPost('name', 'string', NULL );
$data['url'] = $this->request->getPost('url', 'string', NULL );
$data['price_regexr'] = $this->request->getPost('price_regexr');
$data['h1_regexr'] = $this->request->getPost('h1_regexr');
$data['exist_regexr'] = $this->request->getPost('exist_regexr');
$data['section'] = $this->request->getPost('section');
$data['email'] = $this->request->getPost('email');
if($data['section']){
$data['sections_id'] = implode(',',$data['section'] );
}
$model = new \parserCompetitors();
if( !empty( $data['name'] ) && !empty( $data['url']))
{
if( $model->save( $data ) )
{
$this->flash->success( 'Сохранение прошло успешно' );
return $this->response->redirect([ 'for' => 'price_parser_competitors' ]);
}
else
{
$this->flash->error( 'Произошла ошибка во время добавления.' );
}
}
}
$sections = \parserSections::find(array("project_id = {$this->session->get('project-id')}"));
$this->view->setVars([
'sections' => $sections
]);
}
function competitorsUpdateAction($id){
$model = \parserCompetitors::findFirst("id = '$id' AND project_id = {$this->session->get('project-id')}");
if( $this->request->isPost() )
{
$data['project_id'] = $this->session->get('project-id');
$data['name'] = $this->request->getPost('name', 'string', NULL );
$data['url'] = $this->request->getPost('url', 'string', NULL );
$data['price_regexr'] = $this->request->getPost('price_regexr' );
$data['h1_regexr'] = $this->request->getPost('h1_regexr');
$data['exist_regexr'] = $this->request->getPost('exist_regexr');
$data['section'] = $this->request->getPost('section');
$data['email'] = $this->request->getPost('email');
if($data['section']){
$data['sections_id'] = implode(',',$data['section'] );
}
if( !empty( $data['name'] ) && !empty( $data['url']))
{
if( $model->save( $data ) )
{
$this->flash->success( 'Сохранение прошло успешно' );
return $this->response->redirect([ 'for' => 'price_parser_competitors' ]);
}
else
{
$this->flash->error( 'Произошла ошибка во время добавления.' );
}
}
}
$sections_model = new \parserSections();
$sections = \parserSections::find(array("project_id = {$this->session->get('project-id')}"));
$this->view->pick( 'price_parser/competitorsAdd' );
$this->view->setVars([
'page' => $model,
'sections' => $sections,
'sections_model' => $sections_model
]);
}
function competitorsDeleteAction($id){
$model = \parserCompetitors::query()
->where("id = $id")
->andWhere("project_id = {$this->session->get('project-id')}")
->execute();
if($model->toArray()){
$model->delete();
$this->flash->error( 'Данные успешно удалены' );
return $this->response->redirect([ 'for' => 'price_parser_competitors' ]);
} else {
$this->flash->error( 'Произошла ошибка при попытке удаления' );
return $this->response->redirect([ 'for' => 'price_parser_competitors' ]);
}
}
function updateParserAction()
{
$data = $this->request->getPost('data');
$id = $this->request->getPost('id');
$data = json_decode($data);
$model = \parserCompetitorsItems::findFirst(array("id = '$id'"));
foreach(get_object_vars($data) as $key=>$value) {
$array[$key] = $value;
}
$model->save($array);
}
public function sortAction()
{
$section = '';
$competitor = '';
$order = $this->request->getPost('data', 'string', NULL );
if($this->session->get('section')){
$section = $this->session->get('section');
}
if($this->session->get('competitors')){
$competitor = $this->session->get('competitor');
}
$model_sections = \parserSections::query()
->where("project_id = {$this->session->get('project-id')}")
->execute()->toArray();
if(!$section) {
$sections_id = implode("','",$this->common->array_column( $model_sections, 'id' ));
$active_sections = '';
} else {
$sections_id =implode("','",$section);
$active_sections = $section;
}
$model_items = \parserItems::query()
->where(!empty($sections_id) ? "section_id IN ('$sections_id')" : '1=1')
->order(!empty($order) ? $order : "price")
->execute()->toArray();
$items_id = implode("','",$this->common->array_column( $model_items, 'id' ));
$model_competitors_items = \parserCompetitorsItems::query()
->where(!empty($items_id) ? "item_id IN ('$items_id')" : '1=1')
->andWhere("status = 1")
->execute()->toArray();
if(!$competitor) {
$competitors_id = implode("','",array_unique($this->common->array_column( $model_competitors_items, 'competitor_id' )));
$active_competitors = '';
} else {
$competitors_id =implode("','",$competitor);
$active_competitors = $competitor;
}
$model_competitors = \parserCompetitors::query()
->where(!empty($competitors_id) ? "id IN ('$competitors_id')" : '1=1')
->execute()->toArray();
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$this->view->setVars([
'active_sections' => $active_sections,
'active_competitors' => $active_competitors,
'model_sections' => $model_sections,
'model_items' => $model_items,
'model_competitors_items' => $model_competitors_items,
'model_competitors' => $model_competitors,
'controller' => $this
]);
}
function test($uip, $cip){
if(!$cip || !$uip ){
return 'ffffff';
}
if($uip > $cip){
$proc = ($uip - $cip)/$cip *100;
if($proc < 10 ){
return 'rgb(237, 203, 202)';
}
if($proc < 25 ){
return 'rgb(215, 95, 89)';
}
if($proc < 50 ){
return 'rgb(222, 50, 42)';
}
if($proc < 100 ){
return 'rgb(255, 12, 0)';
}
if($proc >= 100 ){
return 'rgb(255, 12, 0)';
}
} else {
$proc = ($cip - $uip)/$uip *100;
if($proc < 10 ){
return 'rgb(0, 0, 0)';
}
if($proc < 25 ){
return 'rgb(207, 255, 199)';
}
if($proc < 50 ){
return 'rgb(116, 205, 101)';
}
if($proc < 100 ){
return 'rgb(55, 147, 40)';
}
if($proc >= 100 ){
return 'rgb(55, 147, 40)';
}
}
}
function approveLinkAction($id) {
$model = \parserCompetitorsItems::findFirst("id = '$id'");
$model->link_status = 'ok';
$model->save();
}
function deleteLinkAction($id) {
$model = \parserCompetitorsItems::findFirst("id = '$id'");
$model->status = 0;
$model->h1 = 'Товар не найден';
$model->price = '';
$model->link_status = 'delete';
$model->save();
return $this->response->redirect([ 'for' => 'price_parser_competitors' ]);
}
function updateLinkAction() {
$this->view->setTemplateAfter('none');
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$data['new_link'] = $this->request->get('new_link', 'string', NULL );
$id = $this->request->get('id');
$model = \parserCompetitorsItems::findFirst("id = '$id'");
$modelComp = \parserCompetitors::findFirst("id = '$model->competitor_id'");
$parser_data_arr = $this->a_parser->parseExistLink(array(
'link' => $data['new_link'],
'google_link' => $model->google_link),
$modelComp->h1_regexr, $modelComp->price_regexr, $modelComp->exist_regexr);
$model->price = $parser_data_arr['price'];
$model->h1 = $parser_data_arr['h1'];
$model->exist = $parser_data_arr['exist'];
$model->item_url = $data['new_link'];
$model->status = 1;
$model->link_status = 'ok';
$model->save();
echo json_encode($parser_data_arr );
}
function sectionsChooseAction() {
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$name = $this->request->getQuery('term');
$model = new \parserSections();
$modelsManager = $this->modelsManager;
$projectId = $this->session->get('project-id');
$result = $model->getDistinct("section_name",$name,$modelsManager, $projectId);
echo json_encode(
array_reduce(
$result,
function($return, $elem) {
$return[] = array(
"label" => $elem['section_name'],
"value" => $elem['id']
);
return $return;
}
)
);
}
function competitorsChooseAction() {
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$name = $this->request->getQuery('term');
$model = new \parserCompetitors();
$modelsManager = $this->modelsManager;
$projectId = $this->session->get('project-id');
$result = $model->getDistinct("name",$name,$modelsManager, $projectId);
echo json_encode(
array_reduce(
$result,
function($return, $elem) {
$return[] = array(
"label" => $elem['name'],
"value" => $elem['id']
);
return $return;
}
)
);
}
function selectAllRowsAction(){
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$model = $this->request->getQuery('model');
switch ($model) {
case 'sections':
$model = \parserSections::query()
->where("project_id = {$this->session->get('project-id')}")
->execute()->toArray();
break;
case 'competitors':
$model = \parserCompetitors::query()
->where("project_id = {$this->session->get('project-id')}")
->execute()->toArray();
break;
}
die(json_encode($model));
}
function forIframeAction($id){
$this->view->setTemplateAfter('none');
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$section = '';
$competitor = '';
$projectData = \projects::findFirst("key_name = '$id'")->toArray();
$this->session->set('project-id', $projectData['id']);
/*$salt1 = "qm&h*";
$salt2 = "pg!@";
$token = md5("$salt1$id$salt2");
die($token);*/
$model_sections = \parserSections::query()
->where("project_id = {$this->session->get('project-id')}")
->execute()->toArray();
foreach($model_sections as $k => $v){
$model_section[$v['id']] = $v;
}
$sections_id = implode("','",$this->common->array_column( $model_sections, 'id' ));
$model_items = \parserItems::query()
->where("section_id IN ('$sections_id')")
->execute()->toArray();
$items_id = implode("','", $this->common->array_column($model_items, 'id'));
$model_competitors = \parserCompetitors::query()
->where("project_id = {$this->session->get('project-id')}")
->execute()->toArray();
foreach ($model_competitors as $competitors) {
$model_competitors_items = \parserCompetitorsItems::find("item_id IN ('$items_id') AND competitor_id = {$competitors['id']} AND status = 1 AND link_status = 'ok' AND exist = ''")->toArray();
if ($model_competitors_items) {
foreach ($model_competitors_items as $item_data) {
$competitor_item[$competitors['id']][$item_data['item_id']] = $item_data;
}
}
}
$model_competitors = \parserCompetitors::query()
->where(!empty($competitors_id) ? "id IN ('$competitors_id')" : '1=1')
->execute()->toArray();
$this->view->setVars([
'model_sections' => $model_section,
'model_items' => $model_items,
'model_competitors_items' => $model_competitors_items,
'model_competitors' => $model_competitors,
'controller' => $this,
'competitor_item' => $competitor_item
]);
}
function addBrandManagersAction() {
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$data['new_link'] = $this->request->get('new_link');
$data['new_link'] = json_decode($data['new_link']);
$data['id'] = $this->request->get('id' );
foreach($data['new_link'] as $email) {
$model = new \brandManagers();
$model->email = $email;
$model->brand_id = $data['id'];
$model->project_id = $this->session->get('project-id');
$model->save();
$id = $model->id;
}
die($id);
}
function deleteBrandManagersAction() {
$id = $this->request->get('id');
$model = \brandManagers::findFirst("id = '$id'");
$model->delete();
}
function sendEmailReportAction(){
$id = $this->request->get('id');
$rowData = json_decode($this->request->get('rowData'));
$managers = \brandManagers::find();
$data = $this->prepareEmailData($rowData, $managers);
foreach($data as $one){
$this->view->disableLevel(\Phalcon\Mvc\View::LEVEL_MAIN_LAYOUT);
$filename = ROOT_PATH."app/frontend/views/price_parser/forEmail.php";
$model = \parserCompetitors::findFirst("id = '$id'");
ob_start();
require( $filename);
$text = ob_get_contents();
ob_get_clean();
$this->sendData('test@test.ua', $text, $model, $one);
}
}
function prepareEmailData($rowData, $managers){
$send_sector = array('rgb(237, 203, 202)', 'rgb(215, 95, 89)', 'rgb(222, 50, 42)', 'rgb(255, 12, 0)', 'rgb(255, 12, 0)' );
$result = array();
foreach($rowData as $row){
if(in_array($row->sector_color, $send_sector) ){
if(!in_array($row->section_id, $result)) {
$result[$row->section_id]['id'] = $row->section_id;
foreach($managers as $manager){
if($manager->brand_id == $row->section_id) {
$result[$row->section_id]['email'][] = $manager->email;
}
}
}
$result[$row->section_id]['items'][] = $row->item_id;
}
}
return $result;
}
function sendData($email, $text,$model, $one)
{
require_once ROOT_PATH."lib/PHPMailer_5.2.4/class.phpmailer.php";
$mail = new \PHPMailer;
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';
$mail->Username = "seodevartweb@gmail.com";
$mail->Password = "respublika2014";
$mail->SetFrom($email, 'ArtWeb');
$mail->Subject = '[AtrWeb]'.$email;
$mail->MsgHTML($text);
$address = "dockdep@gmail.com";
$mail->AddAddress($address);
foreach($one['email'] as $email){
$mail->AddAddress($email);
}
$mail->Send();
}
}