function __searchConditions($conditions = array()) { //App::import('Vendor', 'array_map'); $default = array('category_id' => '', 'area_id' => '', 'pref' => '', 'keyword' => ''); // 検索項目を未入力で検索ボタンを押した場合のため、検索項目が空の場合は検索用の値を設定しない foreach ($default as $key => $val) { if (empty($this->passedArgs[$key])) { unset($this->passedArgs[$key]); } } //値のマージ $data = am($default, $this->passedArgs); $decode = array('pref', 'keyword'); foreach ($decode as $key) { if (!empty($data[$key]) && Configure::read('App.encoding') === 'euc-jp') { $data[$key] = mb_convert_encoding(str_replace(' ', ' ', urldecode($data[$key])), 'euc-jp', 'utf-8'); } else { $data[$key] = str_replace(' ', ' ', urldecode($data[$key])); } } //php4では動作しない //ArrayMap::create($data)->like_escape(); $data = like_escape_deep($data); //検索条件の設定 //各値によって指定の仕方が違うため、ループで回さないように if (!empty($data['category_id'])) { $conditions = am($conditions, array('Shop.category_id' => $data['category_id'])); } if (!empty($data['area_id'])) { if ($data['area_id'] == 4 || $data['area_id'] == 5) { //東京と関東のみ同時に掲載 $conditions = am($conditions, array('Shop.area_id' => array(4, 5))); } else { //それ以外は単一表示 $conditions = am($conditions, array('Shop.area_id' => $data['area_id'])); } } if (!empty($data['pref'])) { $conditions = am($conditions, array('Shop.pref' => $data['pref'])); } $data['keyword'] = mb_trim($data['keyword']); if (!empty($data['keyword'])) { $keywords = explode(' ', $data['keyword']); foreach ($keywords as $word) { $conditions = am($conditions, array(array('OR' => array('Shop.keyword01 LIKE' => "%{$word}%", 'Shop.keyword02 LIKE' => "%{$word}%", 'Shop.keyword03 LIKE' => "%{$word}%", 'Shop.tel LIKE' => "%{$word}%", 'Shop.fax LIKE' => "%{$word}%", 'Shop.comment LIKE' => "%{$word}%", 'Shop.name LIKE' => "%{$word}%", 'Shop.zip01 LIKE' => "%{$word}%", 'Shop.zip02 LIKE' => "%{$word}%", 'Shop.pref LIKE' => "%{$word}%", 'Shop.address LIKE' => "%{$word}%", 'concat(Shop.zip01,"-",Shop.zip02) LIKE' => "%{$word}%", 'concat(Shop.pref,Shop.address) LIKE' => "%{$word}%")))); } } unset($data); return $conditions; }
function admin_browse() { Configure::write('debug', 0); $this->pageTitle = "メールマガジン — 確認"; $query = array(); $word = array(); if (!empty($this->data)) { if (!empty($this->data['Send']['image01']['tmp_name'])) { move_uploaded_file($this->data['Send']['image01']['tmp_name'], WWW_ROOT . 'img' . DS . 'send' . DS . 'image01' . DS . $this->data['Send']['image01']['name']); } $word['type'] = $this->data['MailMagazine']['type']; $word['name'] = $this->data['MailMagazine']['name']; $word['mail'] = $this->data['MailMagazine']['mail']; $word['zip01'] = $this->data['MailMagazine']['zip01']; $word['zip02'] = $this->data['MailMagazine']['zip02']; $word['pref'] = $this->data['MailMagazine']['pref']; $word['address'] = $this->data['MailMagazine']['address']; $word['tel01'] = $this->data['MailMagazine']['tel01']; $word['tel02'] = $this->data['MailMagazine']['tel02']; $word['tel03'] = $this->data['MailMagazine']['tel03']; $word['sex'] = $this->data['MailMagazine']['sex']; $word['StartDateYear'] = $this->data['MailMagazine']['StartDateYear']; $word['StartDateMonth'] = $this->data['MailMagazine']['StartDate']['month']; $word['StartDateDay'] = $this->data['MailMagazine']['StartDate']['day']; $word['EndDateYear'] = $this->data['MailMagazine']['EndDateYear']; $word['EndDateMonth'] = $this->data['MailMagazine']['EndDate']['month']; $word['EndDateDay'] = $this->data['MailMagazine']['EndDate']['day']; $word['highschool'] = $this->data['MailMagazine']['highschool']; $word['school_year'] = $this->data['MailMagazine']['school_year']; $word['StartRegYear'] = $this->data['MailMagazine']['StartRegYear']; $word['StartRegMonth'] = $this->data['MailMagazine']['StartReg']['month']; $word['StartRegDay'] = $this->data['MailMagazine']['StartReg']['day']; $word['EndRegYear'] = $this->data['MailMagazine']['EndRegYear']; $word['EndRegMonth'] = $this->data['MailMagazine']['EndReg']['month']; $word['EndRegDay'] = $this->data['MailMagazine']['EndReg']['day']; $word['test'] = $this->data['MailMagazine']['test']; } else { if (isset($this->passedArgs['type0'])) { $word['type'][] = $this->passedArgs['type0']; } if (isset($this->passedArgs['type1'])) { $word['type'][] = $this->passedArgs['type1']; } if (isset($this->passedArgs['type2'])) { $word['type'][] = $this->passedArgs['type2']; } if (isset($this->passedArgs['type3'])) { $word['type'][] = $this->passedArgs['type3']; } $_passedArgs = array('name', 'mail', 'zip01', 'zip02', 'pref', 'address', 'tel01', 'tel02', 'tel03', 'sex', 'StartDateYear', 'StartDateMonth', 'StartDateDay', 'EndDateYear', 'EndDateMonth', 'EndDateDay', 'highschool', 'school_year', 'StartRegYear', 'StartRegMonth', 'StartRegDay', 'EndRegYear', 'EndRegMonth', 'EndRegDay', 'test'); foreach ($_passedArgs as $_pa) { if (isset($this->passedArgs[$_pa])) { $word[$_pa] = $this->passedArgs[$_pa]; } } } $word = like_escape_deep($word); if (!empty($word['type'])) { $query['MailMagazine.type'] = $word['type']; } if (!empty($word['name'])) { $query['MailMagazine.name LIKE'] = $word['name'] . '%'; } if (!empty($word['mail'])) { $query['MailMagazine.mail LIKE'] = $word['mail'] . '%'; } if (!empty($word['zip01'])) { $query['MailMagazine.zip01'] = $word['zip01']; } if (!empty($word['zip02'])) { $query['MailMagazine.zip02'] = $word['zip02']; } if (!empty($word['pref'])) { $query['MailMagazine.pref'] = $word['pref']; } if (!empty($word['address'])) { $query['MailMagazine.address01 LIKE'] = $word['address'] . '%'; } if (!empty($word['tel01'])) { $query['MailMagazine.tel01'] = $word['tel01']; } if (!empty($word['tel02'])) { $query['MailMagazine.tel02'] = $word['tel02']; } if (!empty($word['tel03'])) { $query['MailMagazine.tel03'] = $word['tel03']; } if (!empty($word['sex'])) { $query['MailMagazine.sex'] = $word['sex']; } if (!empty($word['StartDateYear']) && !empty($word['StartDateMonth']) && !empty($word['StartDateDay']) && !empty($word['EndDateYear']) && !empty($word['EndDateMonth']) && !empty($word['EndDateDay'])) { $query['MailMagazine.created BETWEEN ? AND ?'] = array($word['StartDateYear'] . '-' . $word['StartDateMonth'] . '-' . $word['StartDateDay'], $word['EndDateYear'] . '-' . $word['EndDateMonth'] . '-' . $word['EndDateDay']); } elseif (!empty($word['StartDateYear']) && !empty($word['StartDateMonth'])) { $query['MailMagazine.created >='] = $word['StartDateYear'] . '-' . $word['StartDateMonth'] . '-' . $word['StartDateDay']; } elseif (!empty($word['EndDateYear']) && !empty($word['EndDate'])) { $query['MailMagazine.created <='] = $word['EndDateYear'] . '-' . $word['EndDateMonth'] . '-' . $word['EndDateDay']; } if (!empty($word['highschool'])) { $query['MailMagazine.highschool'] = $word['highschool']; } if (!empty($word['school_year'])) { $query['MailMagazine.school_year'] = $word['school_year']; } if (!empty($word['doc'])) { $query['MailMagazine.doc LIKE'] = '%' . $word['doc'] . '%'; } if (!empty($word['StartRegYear']) && !empty($word['StartRegMonth']) && !empty($word['StartRegDay']) && !empty($word['EndRegYear']) && !empty($word['EndRegMonth']) && !empty($word['EndRegDay'])) { $query['MailMagazine.created BETWEEN ? AND ?'] = array($word['StartRegYear'] . '-' . $word['StartRegMonth'] . '-' . $word['StartRegDay'], $word['EndRegYear'] . '-' . $word['EndRegMonth'] . '-' . $word['EndRegDay']); } elseif (!empty($word['StartRegYear']) && !empty($word['StartRegMonth'])) { $query['MailMagazine.created >='] = $word['StartRegYear'] . '-' . $word['StartRegMonth'] . '-' . $word['StartRegDay']; } elseif (!empty($word['EndRegYear']) && !empty($word['EndReg'])) { $query['MailMagazine.created <='] = $word['EndRegYear'] . '-' . $word['EndRegMonth'] . '-' . $word['EndRegDay']; } //配列を個数分の引数に変換 if (isset($word['type']) && is_array($word['type'])) { foreach ($word['type'] as $k => $v) { $word['type' . $k] = $v; } } unset($word['type']); //エスケープ処理 foreach ($word as $k => $v) { $word[$k] = urlencode($v); } if (!empty($this->data['MailMagazine']['test'])) { $query = array('MailMagazine.no' => 99); } if (!empty($this->params['form']['csv'])) { $this->autoLayout = false; Configure::write('debug', 0); $mail_magazinesData = $this->MailMagazine->find('all', array('conditions' => $query, 'limit' => null)); $this->set('mail_magazinesData', $mail_magazinesData); $this->render('admin_download'); return; } /* * @テストアドレスに送信 */ if (!empty($this->params['form']['send']) && !empty($this->data['MailMagazine']['test'])) { mb_language("japanese"); $email = testAddress(); $subject = !empty($this->data['Send']['title']) ? $this->data['Send']['title'] : 'テスト送信'; $body = !empty($this->data['Send']['body']) ? $this->data['Send']['body'] : 'テスト送信本文'; foreach ($email as $user) { $mail =& new Qdmail(); $mail->kana(true); $mail->error_display = false; $mail->to($user['email'], $user['name']); $mail->subject($subject); $mail->text($body); $mail->from('*****@*****.**', ''); if (!empty($this->data['Send']['image'])) { $mail->attach(WWW_ROOT . 'img' . DS . 'send' . DS . 'image01' . DS . $this->data['Send']['image']); } if (!$mail->send()) { die("テストアドレスにメールが送信できませんでした。" . $mail->errorRender()); } } $this->Session->setFlash('テストアドレスにメール送信完了しました。'); $this->redirect('/admin/mail_magazines/browse'); } elseif (!empty($this->params['form']['send'])) { //メールマガジン配信 $mail_magazinesData = $this->MailMagazine->find('all', array('conditions' => $query, 'group' => array('MailMagazine.mail'), 'limit' => null)); $key = generateRandStr(16); $data = array(); foreach ($mail_magazinesData as $k => $v) { $data[] = array('name' => $v['MailMagazine']['name'], 'email' => $v['MailMagazine']['mail'], 'key' => $key, 'title' => $this->data['Send']['title'], 'body' => $this->data['Send']['body'], 'image' => $img = !empty($this->data['Send']['image']) ? $this->data['Send']['image'] : ''); } if ($this->Send->saveAll($data) !== false) { $this->redirect('/admin/sends/index/' . $key); exit; } else { $this->Session->setFlash('エラーが発生しました。'); $this->redirect('/admin/mail_magazines/browse'); } } $addurl = ''; if (!empty($word)) { foreach ($word as $key => $w) { $addurl .= '/' . $key . ":" . $w; } } if (!empty($addurl)) { $this->set('showpage', $this->requestAction('/admin/mail_magazines/showpage/' . $addurl, array('return'))); } $mail_magazinesData = $this->paginate('MailMagazine', $query); $this->set('mail_magazinesData', $mail_magazinesData); $this->set('word', $word); unset($word); unset($mail_magazinesData); }