foreach ข้อมูลแสดงได้แค่ 1 แถว ที่เหลือไม่แสดง ขอรบกวนผู้รู้ด้วยครับ
มาถูกทางหรือป่าวไม่รู้นะคับ ผมยังใหม่ เพราะห่างหายไปนานครับ
จากกระทู้เดิม
https://www.thaicreate.com/php/forum/137111.html
ตาราง
id........ ... topic
|74814 = นาย ก|
|74828 = นาย ข|
|74860 = นาย ค|
|74853 = นาย ง|
Code (PHP)
$name_departments=explode(",","74814,74828,74860,74853,"); //ตัด string ตาม , ใส่ array ไว้
//foreach ($name_departments as $gNAME){ echo $gNAME; }
$query_name_departments= \Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
foreach ($query_name_departments->execute() as $item_name_departments) { $gNAME=$item_name_departments->topic; }
ผลที่ได้คือ นาย ก อย่างเดียวครับ นาย ข ค ง ไม่ออกครับ
ผมต้องใช้คำสั่งอะไรเพิ่มเติมครับ while หรือ for หรืออื่นๆ ครับTag : PHP, HTML5, Laravel Framework, Apache
ประวัติการแก้ไข 2023-10-28 15:46:26 2023-10-28 15:46:48 2023-10-28 15:48:34 2023-10-28 15:49:18 2023-10-28 15:49:40
Date :
2023-10-28 15:46:00
By :
steamlose
View :
413
Reply :
11
Code (PHP)
$gNAME=[];
foreach ($query_name_departments->execute() as $item_name_departments) {
$gNAME[]=$item_name_departments->topic;
}
print_r($gNAME);
Date :
2023-10-30 20:33:38
By :
Chaidhanan
ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2023-10-30 20:33:38
รายละเอียดของการตอบ ::
ขอบคุณครับ
แต่ก็ยังไม่ได้ครับไม่รู้ติดอะไร
ตรงโค๊ต '{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$gNAME[0]
- ถ้าใส่ $gNAME[] จะแสดงว่า Array
- ถ้าใส่ $gNAME[0] จะแสดงว่า นาย ก ถ้าใส่ 1 ก็ แสดง นาย ข ตามลำดับครับ
- ถ้าใส่ print_r($gNAME); จะแสดงว่า 1 มันไม่เรียงตามเลขที่ต้องการ (74814,74828,74860,74853,)
Code (PHP)
// ค้นหาชื่อแผนกรับข้อความ
$names_departmentsS=$edocument['department']; // id ของแผนกรับข้อความ
// $name_departments=explode(",",$names_departmentsS);
$name_departments=explode(',',',74814,74828,74860,74853,'); //ตัด string ตาม , ใส่ array ไว้
$query_name_departments= \Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
$gNAME=[];
foreach ($query_name_departments->execute() as $item_name_departments) {
$gNAME[]=$item_name_departments->topic; }
// ข้อความที่แสดง หรือ ที่จะส่งไปทางเมล์
$msg = array(
'{LNG_E-Document}',
'', // เว้นบรรทัด
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$gNAME[0].',', // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
'', // เว้นบรรทัด
'{LNG_Document No.}: '.$edocument['document_no'],
'{LNG_Document title}: '.$edocument['topic'],
'{LNG_Date}: '.Date::format($edocument['last_update']),
// '', // เว้นบรรทัด
'{LNG_ผู้ส่ง ----->>>>}: '.$item_name->name, // แสดงผู้ส่งโดยจะดึงจาก \modules\edocument\views (index.php)
'', // เว้นบรรทัด
'{LNG_มีเอกสารใหม่ถึงคุณแล้ว โปรดเข้าไปตรวจสอบ}'
);
ประวัติการแก้ไข 2023-10-31 08:25:02 2023-10-31 08:26:13 2023-10-31 08:28:14
Date :
2023-10-31 05:39:18
By :
steamlose
ก็เอาไปทำนอก ลูป มันก็ทำงานครั้งเดียว อยากให้มันทำหลายๆ ครั้ง ก็ต้องทำในลูป
Code (PHP)
foreach ($query_name_departments->execute() as $item_name_departments) {
// ข้อความที่แสดง หรือ ที่จะส่งไปทางเมล์
$msg = array(
'{LNG_E-Document}',
'', // เว้นบรรทัด
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$item_name_departments->topic.',', // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
'', // เว้นบรรทัด
'{LNG_Document No.}: '.$edocument['document_no'],
'{LNG_Document title}: '.$edocument['topic'],
'{LNG_Date}: '.Date::format($edocument['last_update']),
// '', // เว้นบรรทัด
'{LNG_ผู้ส่ง ----->>>>}: '.$item_name->name, // แสดงผู้ส่งโดยจะดึงจาก \modules\edocument\views (index.php)
'', // เว้นบรรทัด
'{LNG_มีเอกสารใหม่ถึงคุณแล้ว โปรดเข้าไปตรวจสอบ}'
);
//เรียกใช้โค๊ดสงเมลตรงนี้
send_mail( $msg ); // บันทัดนี้แค่ตัวอย่าง เรียกใช้ ฟังก์ชั่น ส่งเมล
}
Date :
2023-10-31 20:09:17
By :
Chaidhanan
ตอบความคิดเห็นที่ : 3 เขียนโดย : Chaidhanan เมื่อวันที่ 2023-10-31 20:09:17
รายละเอียดของการตอบ ::
เหมือนเดิมครับ ออก แค่ id --> 74814 | นาย ก ครับ ข ค ง ไม่วนออกครับ
Code (PHP)
// ค้นหาชื่อแผนกรับข้อความ
// $names_departmentsX=$edocument['department']; // id ของแผนกรับข้อความ
// $name_departments=explode(',',$names_departmentsX);
$name_departments=explode(',',',74814,74828,74860,74853,'); //ตัด string ตาม , ใส่ array ไว้
// foreach ($name_departments as $gNAME){ echo $gNAME; }
$query_name_departments= \Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
//$gNAME=[];
foreach ($query_name_departments->execute() as $item_name_departments) {
// $gNAME[]=$item_name_departments->topic; }
$ret = array();
// ข้อความ
$msg = array(
'{LNG_E-Document}',
'', // เว้นบรรทัด
// '{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$item_name_departments->topic, // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$item_name_departments->topic.',', // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
'', // เว้นบรรทัด
'{LNG_Document No.}: '.$edocument['document_no'],
'{LNG_Document title}: '.$edocument['topic'],
'{LNG_Date}: '.Date::format($edocument['last_update']),
// '', // เว้นบรรทัด
'{LNG_ผู้ส่ง ----->>>>}: '.$item_name->name, // แสดงผู้ส่งโดยจะดึงจาก e-doc-server\modules\edocument\views (index.php)
//'{LNG_ผู้ส่ง ----->>>>}: '.$edocument['topic'], // แสดงผู้ส่งโดยจะดึงจาก e-doc-server\modules\edocument\views (index.php)
'', // เว้นบรรทัด
'{LNG_มีเอกสารใหม่ถึงคุณแล้ว โปรดเข้าไปตรวจสอบที่}',
'URL: '.WEB_URL.'index.php?module=edocument'
);
} // foreach ($query_name_departments->execute()
Date :
2023-11-01 16:49:28
By :
steamlose
ตรงไหนคำสั่ง send_mail($msg); เอามาแสดงหน่อยสิ
$msg มันถูกทับ หรือเปล่า
ใส่ print_r($msg); หน่อย
Code (PHP)
while(....){
$msg = array(
//........
);
print_r($msg);
}
Date :
2023-11-01 22:32:52
By :
Chaidhanan
ตอบความคิดเห็นที่ : 5 เขียนโดย : Chaidhanan เมื่อวันที่ 2023-11-01 22:32:52
รายละเอียดของการตอบ ::
ในส่วนโคตนี้ ผมได้นำมาจาก เว็บ kotchasan ของ อ.กรกฎ ครับ
ในส่วนของการแสดงผลที่ส่งเข้าเมล์ ปกติ ตามภาพด้านล่างครับ
ยกเว้นส่วนที่สอบถามเข้ามา คือ ไม่สามารถแสดง ผู้รับหลายรายการที่เลือกได้
ซึ่งการดึงข้อมูลออกมาจากฐานข้อมูลออกมาก็ปกติ ข้อมูล id ส่วนที่ต้องการ เพื่อนำมาค้นหาข้อมุลของอีกตารางก็ออกปกติ
(ผลการดึงข้อมูลจะเป้นลักษณะนี้ครับ --->> ,74814,74828,74860,74853, ) เพียงแต่ ต้องนำมา
explode เพื่อ เอา เครื่องหมาย , ออก แล้วมาเก็บในตัวแปลก่อน แล้วจึงนำไปเทียบกับตารางที่มีชื่อแผนกครับ
ส่วนหนึ่งผมได้สอบถามไปทางเว็บบอร์ดของ อ. ท่านแล้ว ท่านก็แนะนำมาให้ ดีบัก ดู ข้อมุลก็ออกมาปกติ ครับ
จากคำสั่ง
$name_departments=explode(',',',74814,74828,74860,74853,'); //ตัด string ตาม , ใส่ array ไว้
$query_name_departments= \Kotchasan\Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
->debug()
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
foreach ($query_name_departments->execute() as $item_name_departments) { $gNAME=$item_name_departments->topic; }
--------------------------------------------------------------
ผลออก ที่ console ออกมาเป็น ตามนี้ครับ
....public_html/modules/edocument/models/write.php on line 248
SELECT * FROM `devrdco1_edoc`.`edoc_category` WHERE `category_id` IN ('', '74814', '74828', '74860', '74853', '')
{"alert":"\u0e2a\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e1c\u0e39\u0e49\u0e17\u0e35\u0e48\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e02\u0e49\u0e2d\u0e07\u0e40\u0e23\u0e35\u0e22\u0e1a\u0e23\u0e49\u0e2d\u0e22\u0e41\u0e25\u0e49\u0e27","location":"index.php?module=edocument-sent&count=100&sort=last_update%20DESC&urgency=-1&sender=0"}
หมายเหตุ ลอง เปลี่ยน ตัวแปล ใน
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$name_departments[3].',', // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
$name_departments[0] ผลเป็นว่าง
$name_departments[1] ผลเป็น 74814
$name_departments[2] ผลเป็น 74828
$name_departments[3] ผลเป็น 74860 ซึ่งตรงกับ array ที่ต้องการให้แสดงครับ
ด่านล่างคือส่วนที่ส่งข้อมูลไปเมล์ ผลที่ได้ ตามภาพด้านบนครับ
Code (PHP)
if (!empty($emails)) {
// ส่งอีเมล
$subject = '['.self::$cfg->web_title.'] '.Language::get('There are new documents sent to you.');
$err = \Kotchasan\Email::send(implode(',', $emails), self::$cfg->noreply_email, $subject, nl2br($msg));
if ($err->error()) {
// คืนค่า error
$ret[] = strip_tags($err->getErrorMessage());
}
}
Date :
2023-11-02 18:33:12
By :
steamlose
ดูความต้องการ จาก คห.5
คุณกำหนดค่าให้ $msg=array(); ในลูป
แล้ว วนลูปในนั้นจนครบ result row ที่มี
แต่มันเอาค่าไปใสในตัวแปรเดียว คือ $msg
โดยที่ไม่เห็นว่า $msg ส่งไปให้การ ออกเมลตรงไหน
พอหลุด ลูป $msg มันก็จะเป็นค่าสุดท้าย ของ result row สุดท้าย
มันจะส่งเมล หลายเมลไม่ได้ เพราะมันมีค่าของเมลสุดท้ายเมลเดียว
และคชสาร นี่ผมไม่เคยใช้ คงตอบยาก เพราะไม่รู้ที่มาที่ไปของ framework ตัวนี้
ซ้ำคุณยังเอาโค๊ดมาแสดงบางส่วน ไม่รู้อันไหน model อันไหน controller
จำไว้ครับ โค๊ด มันต้องมี ครบ input calculate output
ในลูป คุณมี แค่ input คือ $msg แต่ ไม่ได้เอา $msg ไป calculate อะไรเลย
มันต้องจัดลำดับการทำงานให้ครบ
ประวัติการแก้ไข 2023-11-02 20:08:48
Date :
2023-11-02 20:06:46
By :
Chaidhanan
ตอบความคิดเห็นที่ : 7 เขียนโดย : Chaidhanan เมื่อวันที่ 2023-11-02 20:06:46
รายละเอียดของการตอบ ::
ขอบพระคุณครับสำหรับคำแนะนำครับผม ผมจะไปปรับปรุงแก้ไข และศึกษาให้ยิ่งขึ้นครับ
ผมอาจจะสื่อความหมายในสิ่งต้องการผิดไป และไม่เข้าใจในการทำงานของภาษามากพอ จึงสื่อให้ผู้มาคอมเม้นต์ให้คำตอบ ไม่เข้าใจไปด้วยครับ อันนี้ต้องขออภัยอย่างสูงครับ
ที่ผมต้องการ คืออยากให้ ค่า== ฝ่าย ก, ฝ่าย ข, ฝ่าย ค,
ที่ได้จากคำสั่ง
$name_departments=explode(',',',74814,74828,74860,74853,'); //ตัด string ตาม , ใส่ array ไว้
$query_name_departments= \Kotchasan\Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
foreach ($query_name_departments->execute() as $item_name_departments) { $gNAME=$item_name_departments->topic; }
$gNAME ที่ต้องการให้เก็บค่า เพื่อจะนำไปแสดงค่า คือ ฝ่าย ก, ฝ่าย ข, ฝ่าย ค, แต่มันออกมา 1 คือ ค่า 74814 ที่เท่ากับ ฝ่าย ก ครับ
แสดงในลักษณะแบบด้านล่าง เท่านั้นครับ
งานสารบรรณ
ส่งถึงฝ่าย / แผนก ----->>>>::: ฝ่าย ก, ฝ่าย ข, ฝ่าย ค, (ตัวแปร $gNAME)
เลขที่เอกสาร: ที่ 02-11-66/000012
เรื่อง: ตำราสอบ เลื่อนฐานะ เป็นนายตำรวจ
วันที่: 02 พ.ย. 2566 เวลา 20:16 น.
ผู้ส่ง ----->>>>: แอดมิน
มีเอกสารใหม่ถึงคุณแล้ว โปรดเข้าไปตรวจสอบที่
URL:
Date :
2023-11-02 21:10:51
By :
steamlose
ตอบความคิดเห็นที่ : 9 เขียนโดย : Chaidhanan เมื่อวันที่ 2023-11-03 10:17:02
รายละเอียดของการตอบ ::
ครับ ส่วนที่ส่งเมล์ ทั้งหมดคับ
Code (PHP)
<?php
/**
* @filesource modules/edocument/models/email.php
*
* @copyright 2016 Goragod.com
* @license https://www.kotchasan.com/license/
*
* @see https://www.kotchasan.com/
*/
namespace Edocument\Email;
use Kotchasan\Date;
use Kotchasan\Language;
/**
* ส่งอีเมลไปยังผู้ที่เกี่ยวข้อง
*
* @author Goragod Wiriya <[email protected] >
*
* @since 1.0
*/
class Model extends \Kotchasan\KBase
{
/**
* ส่งอีเมลแจ้งการทำรายการ
*
* @param string $receivers ID ผู้รับ
* @param array $departments แผนกผู้รับ
* @param array $edocument ข้อมูล
*/
public static function send($receivers, $departments, $edocument)
{
// query อีเมลผู้ส่ง
$name_sent=$edocument['sender_id']; // id ของผู้ส่งข้อความ
$query_view_name = \Kotchasan\Model::createQuery()
->select()
->from('user') // ดึงฐานข้อมูลจาก ตาราง user
->where(array('id', $name_sent)); // โดยที่ ข้อมูลจาก $name_sent เท่ากับ ข้อมูลตาราง id
foreach ($query_view_name->execute() as $item_name) { }
// echo $item_name->id;
//echo $queryss->text();
// จบ ค้นหาผู้ส่ง
// ค้นหาชื่อแผนกรับข้อความ
$names_departmentsX=$edocument['department']; // id ของแผนกรับข้อความ
$name_departments=explode(',',$names_departmentsX);
//$name_departments=explode(',',',74814,74828,74860,74853,'); //ตัด string ตาม , ใส่ array ไว้
// foreach ($name_departments as $gNAME){ echo $gNAME; }
$query_name_departments= \Kotchasan\Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
//->debug()
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
//$gNAME=[];
foreach ($query_name_departments->execute() as $item_name_departments) { $gNAME=$item_name_departments->topic; }// $gNAME[]=$item_name_departments->topic; }
$ret = array();
// ข้อความ
$msg = array(
'{LNG_E-Document}',
'', // เว้นบรรทัด
// '{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$item_name_departments->topic, // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$gNAME.',', // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
'', // เว้นบรรทัด
'{LNG_Document No.}: '.$edocument['document_no'],
'{LNG_Document title}: '.$edocument['topic'],
'{LNG_Date}: '.Date::format($edocument['last_update']),
// '', // เว้นบรรทัด
'{LNG_ผู้ส่ง ----->>>>}: '.$item_name->name, // แสดงผู้ส่งโดยจะดึงจาก e-doc-server\modules\edocument\views (index.php)
//'{LNG_ผู้ส่ง ----->>>>}: '.$edocument['topic'], // แสดงผู้ส่งโดยจะดึงจาก e-doc-server\modules\edocument\views (index.php)
'', // เว้นบรรทัด
'{LNG_มีเอกสารใหม่ถึงคุณแล้ว โปรดเข้าไปตรวจสอบที่}',
'URL: '.WEB_URL.'index.php?module=edocument'
);
//} // foreach ($query_name_departments->execute()
$msg = Language::trans(implode("\n", $msg));
// ส่งอีเมลไปยังผู้ที่เกี่ยวข้อง
$emails = array();
$lines = array();
if (!empty(self::$cfg->noreply_email) && (!empty($departments) || !empty($receivers))) {
// query อีเมลผู้รับ
$query = \Kotchasan\Model::createQuery()
->select('U.name', 'U.username', 'U.line_uid')
->from('user U')
->join('user_meta D', 'LEFT', array(array('D.member_id', 'U.id'), array('D.name', 'department')));
if (!empty($departments)) {
// ผู้รับในแผนกที่เลือก
$query->where(array(
array('U.username', '!=', ''),
array('U.active', 1),
array('D.value', $departments)
));
} elseif (!empty($receivers)) {
// ผู้รับที่เลือก
$query->where(array('id', $receivers));
}
foreach ($query->execute() as $item) {
if ($item->username != '') {
$emails[$item->username] = $item->name.'<'.$item->username.'>';
}
if ($item->line_uid != '') {
$lines[] = $item->line_uid;
}
}
if (!empty($emails)) {
// ส่งอีเมล
$subject = '['.self::$cfg->web_title.'] '.Language::get('There are new documents sent to you.');
$err = \Kotchasan\Email::send(implode(',', $emails), self::$cfg->noreply_email, $subject, nl2br($msg));
if ($err->error()) {
// คืนค่า error
$ret[] = strip_tags($err->getErrorMessage());
}
}
// LINE ส่วนตัว
if (!empty($lines) && !empty(self::$cfg->line_channel_access_token)) {
$err = \Gcms\Line::sendTo($lines, $msg);
//********************************************************************//
$error = \Gcms\Line::send($msg); // ส่งไลน์ line notify ในกลุ่ม+ที่ตั้งไว้ token
//********************************************************************//
if ($err != '') {
$ret[] = $err;
}
}
return empty($ret) ? Language::get('Your message was sent successfully') : implode("\n", array_unique($ret));
}
return Language::get('Saved successfully');
}
}
ส่วนไฟล์ที่เกี่ยวข้องกัน ก็ส่วนนี้ครับ
Code (PHP)
<?php
/**
* @filesource modules/edocument/models/write.php
*
* @copyright 2016 Goragod.com
* @license https://www.kotchasan.com/license/
*
* @see https://www.kotchasan.com/
*/
namespace Edocument\Write;
use Gcms\Login;
use Kotchasan\File;
use Kotchasan\Http\Request;
use Kotchasan\Language;
use Kotchasan\Number;
/**
* module=edocument-write
*
* @author Goragod Wiriya <[email protected] >
*
* @since 1.0
*/
class Model extends \Kotchasan\Model
{
/**
* อ่านข้อมูลรายการที่เลือก
* ถ้า $id = 0 หมายถึงรายการใหม่
*
* @param int $id ID
* @param array $login
*
* @return object|null คืนค่าข้อมูล object ไม่พบคืนค่า null
*/
public static function get($id, $login)
{
if (empty($id)) {
// ใหม่
return (object) array(
'id' => 0,
'document_no' => '',
'sender_id' => (int) $login['id'],
// ID ผู้รับเริ่มต้น
'receiver' => [],
// แผนกผู้รับเริ่มต้น
'department' => [],
'urgency' => 3, // บังคับให้เลือก 'URGENCIES' => ความเร่งด่วนเอกสาร 3 = ปกติ
'topic' => '',
'detail' => ''
);
} else {
// แก้ไข อ่านรายการที่เลือก
$result = static::createQuery()
->from('edocument E')
->join('edocument_download D', 'LEFT', array(array('D.document_id', 'E.id'), array('D.department_id', '')))
->join('user U', 'LEFT', array('U.id', 'D.member_id'))
->where(array('E.id', $id))
->groupBy('E.id')
->first('E.*', "SQL(GROUP_CONCAT(CONCAT(U.`id`,':',U.`username`) SEPARATOR ',') AS `receiver`)");
if ($result) {
$result->department = explode(',', trim($result->department, ','));
$receiver = array();
if ($result->receiver != '') {
foreach (explode(',', $result->receiver) as $item) {
$ds = explode(':', $item);
$receiver[$ds[0]] = isset($ds[1]) ? $ds[1] : $ds[0];
}
}
$result->receiver = $receiver;
}
return $result;
}
}
/**
* บันทึกข้อมูลที่ส่งมาจากฟอร์ม (write.php)
*
* @param Request $request
*/
public function submit(Request $request)
{
$ret = array();
// session, token, member, ไม่ใช่สมาชิกตัวอย่าง
if ($request->initSession() && $request->isSafe() && $login = Login::isMember()) {
if (Login::notDemoMode($login)) {
try {
// ค่าที่ส่งมา
$save = array(
'document_no' => $request->post('document_no')->topic(),
// ผู้รับตามแผนก
'department' => $request->post('department', [])->topic(),
'urgency' => $request->post('urgency')->toInt(),
'topic' => $request->post('topic')->topic(),
'detail' => $request->post('detail')->textarea()
);
// ตรวจสอบรายการที่เลือก
$index = self::get($request->post('id')->toInt(), $login);
if ($index && ($index->id == 0 || $login['id'] == $index->sender_id || Login::checkPermission($login, 'can_upload_edocument'))) {
// Database
$db = $this->db();
// Table
$table_edocument = $this->getTableName('edocument');
if ($index->id == 0) {
$save['id'] = $db->getNextId($table_edocument);
} else {
$save['id'] = $index->id;
}
if ($save['document_no'] == '') {
// ไม่ได้กรอกเลขที่เอกสาร
$save['document_no'] = Number::printf(self::$cfg->edocument_format_no, $save['id']);
}
// ตรวจสอบเลขที่เอกสารซ้ำ
$search = $db->first($table_edocument, array('document_no', $save['document_no']));
if ($search && ($index->id == 0 || $index->id != $search->id)) {
$ret['ret_document_no'] = Language::replace('This :name already exist', array(':name' => 'Document No.'));
}
if ($save['detail'] == '') {
// ไม่ได้กรอก detail
$ret['ret_detail'] = 'Please fill in';
}
// รายชื่อผู้รับ
$receiver = [];
// รายชื่อผู้รับ (ตามแผนกที่เลือก)
if (!empty($save['department'])) {
// query สมาชิกตามแผนกที่เลือก
$where = array(
array('U.active', 1),
array('U.id', '!=', $login['id']),
array('D.value', $save['department'])
);
$query = $this->db()->createQuery()
->select('U.id', 'D.value department')
->from('user U')
->join('user_meta D', 'LEFT', array(array('D.member_id', 'U.id'), array('D.name', 'department')))
->where($where);
foreach ($query->execute() as $item) {
$receiver[$item->id] = $item->department;
}
}
// รายชื่อผู้รับ (รายบุคคล)
foreach ($request->post('receiver', [])->toInt() as $receiver_id) {
$receiver[$receiver_id] = '';
}
if (empty($receiver)) {
// ไม่ได้ระบุผู้รับ
$ret['ret_department'] = Language::get('The recipient was not found. or no recipients found in the selected department.');
}
if (empty($ret)) {
$mktime = time();
// อัปโหลดไฟล์
$dir = ROOT_PATH.DATA_FOLDER.'edocument/';
foreach ($request->getUploadedFiles() as $item => $file) {
/* @var $file \Kotchasan\Http\UploadedFile */
if ($file->hasUploadFile()) {
if (!File::makeDirectory($dir)) {
// ไดเรคทอรี่ไม่สามารถสร้างได้
$ret['ret_'.$item] = Language::replace('Directory %s cannot be created or is read-only.', DATA_FOLDER.'edocument/');
} elseif (!$file->validFileExt(self::$cfg->edocument_file_typies)) {
// ชนิดของไฟล์ไม่ถูกต้อง
$ret['ret_'.$item] = Language::get('The type of file is invalid');
} elseif ($file->getSize() > self::$cfg->edocument_upload_size) {
// ขนาดของไฟล์ใหญ่เกินไป
$ret['ret_'.$item] = Language::get('The file size larger than the limit');
} else {
$save['ext'] = $file->getClientFileExt();
$file_name = str_replace('.'.$save['ext'], '', $file->getClientFilename());
if ($file_name == '' && $save['topic'] == '') {
$ret['ret_topic'] = 'Please fill in';
} else {
// อัปโหลด
$save['file'] = $mktime.'.'.$save['ext'];
while (file_exists($dir.$save['file'])) {
++$mktime;
$save['file'] = $mktime.'.'.$save['ext'];
}
try {
$file->moveTo($dir.$save['file']);
$save['size'] = $file->getSize();
if ($save['topic'] == '') {
$save['topic'] = $file_name;
}
if (!empty($index->file) && $save['file'] != $index->file) {
@unlink($dir.$index->file);
}
} catch (\Exception $exc) {
// ไม่สามารถอัปโหลดได้
$ret['ret_'.$item] = Language::get($exc->getMessage());
}
}
}
} elseif ($file->hasError()) {
// ข้อผิดพลาดการอัปโหลด
$ret['ret_'.$item] = Language::get($file->getErrorMessage());
} elseif ($index->id == 0) {
// ใหม่ ต้องมีไฟล์
$ret['ret_'.$item] = 'Please browse file';
}
}
}
if (empty($ret)) {
$save['last_update'] = $mktime;
$department = $save['department'];
$save['department'] = ','.implode(',', $department).',';
$save['topic'] = preg_replace('/[,;:_]{1,}/', '_', $save['topic']);
if ($index->id == 0) {
// ใหม่
$save['sender_id'] = $login['id'];
$db->insert($table_edocument, $save);
} else {
// แก้ไข
$db->update($table_edocument, $save['id'], $save);
}
// แอเรย์เก็บรายชื่อผู้รับ
$receivers = [];
// รายชื่อผู้รับที่เลือก
foreach ($receiver as $receiver_id => $department_id) {
$receivers[$receiver_id] = array(
'document_id' => $save['id'],
'member_id' => $receiver_id,
'department_id' => $department_id,
'downloads' => 0,
'last_update' => 0
);
}
// ตาราง
$table_download = $this->getTableName('edocument_download');
// query ผู้รับเดิม
foreach ($this->db()->select($table_download, array('document_id', $save['id'])) as $item) {
if (isset($receivers[$item['member_id']])) {
$receivers[$item['member_id']]['member_id'] = $item['member_id'];
$receivers[$item['member_id']]['downloads'] = $item['downloads'];
$receivers[$item['member_id']]['last_update'] = $item['last_update'];
}
}
// ลบ ผู้รับเดิม
$this->db()->delete($table_download, array('document_id', $save['id']), 0);
// บันทึกผู้รับใหม่ลงในตาราง
foreach ($receivers as $item) {
$this->db()->insert($table_download, $item);
}
// log
\Index\Log\Model::add($save['id'], 'edocument', 'Save', '{LNG_Send Document} ID : '.$save['id'], $login['id']);
// คืนค่า
if ($request->post('send_mail')->toInt() == 1) {
// ส่งอีเมล
$ret['alert'] = \Edocument\Email\Model::send(array_keys($receivers), $department, $save);
} else {
// ไม่ต้องส่งอีเมล
$ret['alert'] = Language::get('Saved successfully');
}
$ret['location'] = $request->getUri()->postBack('index.php', array('module' => 'edocument-sent'));
}
}
} catch (\Kotchasan\InputItemException $e) {
$ret['alert'] = $e->getMessage();
}
}
}
if (empty($ret)) {
$ret['alert'] = Language::get('Unable to complete the transaction');
}
// คืนค่าเป็น JSON
echo json_encode($ret);
}
}
ประวัติการแก้ไข 2023-11-03 10:28:31
Date :
2023-11-03 10:23:05
By :
steamlose
ตอบความคิดเห็นที่ : 9 เขียนโดย : Chaidhanan เมื่อวันที่ 2023-11-03 10:17:02
รายละเอียดของการตอบ ::
ขอบคุณครับ ทำได้แล้วครับ
ผมใช้ $XX = implode($...) เอาครับ
ข้อมูล ออกตามที่ต้องการแล้วครับ (ฝ่าย ก, ฝ่าย ข, ฝ่าย ค, ฝ่าย ง,)
จาก code ด้านล่าง
Code (PHP)
// จากฐานข้อมูล
// $names_departmentsX=$edocument['department']; // id ของแผนกรับข้อความ
// $name_departments = explode(',', trim($names_departmentsX, ','));
// กำหนดข้อมูลเพื่อทดสอบ
$datass = ',74814,74828,74860,74853,';
$name_departments = explode(',', trim($datass, ','));
// $name_departments=explode(',', ',74814,74828,74860,74853,'); //ตัด string ตาม , ใส่ array ไว้
// foreach ($name_departments as $gNAME){ $gNAME; } // foreach ($name_departments ออกปกติ
// $arrssss = print_r($name_departments);
$query_name_departments= \Kotchasan\Model::createQuery()
->select()
->from('category') // ดึงฐานข้อมูลจาก ตาราง category
//->debug()
->where(array('category_id',$name_departments));// โดยที่ ข้อมูลจาก name_departments เท่ากับ ข้อมูลตาราง category_id
//$gNAME = array();
//$gNAME=[];
foreach ($query_name_departments->execute() as $item_name_departments) {
$gNAME[]=$item_name_departments->topic;
$new_gNAME = implode($gNAME).',';
} // $gNAME[]=$item_name_departments->topic; }
$ret = array();
// ข้อความ
$msg = array(
'{LNG_E-Document}',
'', // เว้นบรรทัด
// '{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$item_name_departments->topic, // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
'{LNG_ส่งถึงฝ่าย / แผนก ----->>>>}::: '.$new_gNAME, // แสดงผู้รับ แผนก หรือผู้ที่ต้องการส่ง
'', // เว้นบรรทัด
'{LNG_Document No.}: '.$edocument['document_no'],
'{LNG_Document title}: '.$edocument['topic'],
'{LNG_Date}: '.Date::format($edocument['last_update']),
// '', // เว้นบรรทัด
'{LNG_ผู้ส่ง ----->>>>}: '.$item_name->name, // แสดงผู้ส่งโดยจะดึงจาก e-doc-server\modules\edocument\views (index.php)
//'{LNG_ผู้ส่ง ----->>>>}: '.$edocument['topic'], // แสดงผู้ส่งโดยจะดึงจาก e-doc-server\modules\edocument\views (index.php)
'', // เว้นบรรทัด
'{LNG_มีเอกสารใหม่ถึงคุณแล้ว โปรดเข้าไปตรวจสอบที่}',
'URL: '.WEB_URL.'index.php?module=edocument'
);
ประวัติการแก้ไข 2023-11-05 20:46:14
Date :
2023-11-05 20:45:44
By :
steamlose
Load balance : Server 05