diff --git a/.temp/CheckCat.class b/.temp/CheckCat.class new file mode 100644 index 00000000..fd23a33b Binary files /dev/null and b/.temp/CheckCat.class differ diff --git a/.temp/CheckCat.java b/.temp/CheckCat.java new file mode 100644 index 00000000..4b4e2e47 --- /dev/null +++ b/.temp/CheckCat.java @@ -0,0 +1,22 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class CheckCat { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + PreparedStatement stmt = conn.prepareStatement("SELECT category_id FROM sis_post WHERE id = 6450"); + ResultSet rs = stmt.executeQuery(); + if (rs.next()) { + System.out.println("Category ID: " + rs.getLong(1)); + } + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/CheckCategories.class b/.temp/CheckCategories.class new file mode 100644 index 00000000..dd5d85f6 Binary files /dev/null and b/.temp/CheckCategories.class differ diff --git a/.temp/CheckCategories.java b/.temp/CheckCategories.java new file mode 100644 index 00000000..2bafb71b --- /dev/null +++ b/.temp/CheckCategories.java @@ -0,0 +1,26 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +public class CheckCategories { + public static void main(String[] args) { + try { + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT id, name, slug FROM sis_category"); + while (rs.next()) { + System.out.println(rs.getLong("id") + " - " + rs.getString("name") + " (" + rs.getString("slug") + ")"); + } + + System.out.println("--- POSTS ---"); + rs = stmt.executeQuery("SELECT id, title, slug, category_id, status FROM sis_post WHERE ROWNUM <= 10"); + while (rs.next()) { + System.out.println("Post: " + rs.getLong("id") + " - " + rs.getString("title") + " (Cat: " + rs.getLong("category_id") + ", Status: " + rs.getString("status") + ")"); + } + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/CheckCategories2.class b/.temp/CheckCategories2.class new file mode 100644 index 00000000..3037f083 Binary files /dev/null and b/.temp/CheckCategories2.class differ diff --git a/.temp/CheckCategories2.java b/.temp/CheckCategories2.java new file mode 100644 index 00000000..7ab546a8 --- /dev/null +++ b/.temp/CheckCategories2.java @@ -0,0 +1,22 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +public class CheckCategories2 { + public static void main(String[] args) { + try { + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + Statement stmt = conn.createStatement(); + + System.out.println("--- CATEGORIES ---"); + ResultSet rs = stmt.executeQuery("SELECT id, name, slug FROM sis_category"); + while (rs.next()) { + System.out.println(rs.getLong("id") + " - " + rs.getString("name") + " (" + rs.getString("slug") + ")"); + } + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/CheckComponents.class b/.temp/CheckComponents.class new file mode 100644 index 00000000..f9b0fc1b Binary files /dev/null and b/.temp/CheckComponents.class differ diff --git a/sisvietnamvn_main/CheckPosts.java b/.temp/CheckComponents.java similarity index 60% rename from sisvietnamvn_main/CheckPosts.java rename to .temp/CheckComponents.java index 7e473cca..2774ca7f 100644 --- a/sisvietnamvn_main/CheckPosts.java +++ b/.temp/CheckComponents.java @@ -3,15 +3,18 @@ import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; -public class CheckPosts { +public class CheckComponents { public static void main(String[] args) { try { Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); Statement stmt = conn.createStatement(); - ResultSet rs = stmt.executeQuery("SELECT id, slug, featured_image FROM sis_post WHERE featured_image IS NOT NULL"); + + System.out.println("--- COMPONENT TEMPLATES ---"); + ResultSet rs = stmt.executeQuery("SELECT slug, name FROM sis_component_template"); while (rs.next()) { - System.out.println("ID: " + rs.getLong("id") + " Slug: " + rs.getString("slug") + " IMG: " + rs.getString("featured_image")); + System.out.println(rs.getString("slug") + " - " + rs.getString("name")); } + conn.close(); } catch (Exception e) { e.printStackTrace(); } diff --git a/.temp/CheckJson.class b/.temp/CheckJson.class new file mode 100644 index 00000000..87f0364e Binary files /dev/null and b/.temp/CheckJson.class differ diff --git a/.temp/CheckJson.java b/.temp/CheckJson.java new file mode 100644 index 00000000..46e41185 --- /dev/null +++ b/.temp/CheckJson.java @@ -0,0 +1,27 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class CheckJson { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + PreparedStatement stmt = conn.prepareStatement( + "SELECT id, slug, data_json FROM sis_page" + ); + ResultSet rs = stmt.executeQuery(); + while (rs.next()) { + System.out.println("ID: " + rs.getLong("id") + " Slug: " + rs.getString("slug")); + String json = rs.getString("data_json"); + if (json != null && json.contains("livestream_posts")) { + System.out.println("Found livestream_posts in page: " + rs.getString("slug")); + } + } + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/CheckNewsEventsTemplate.class b/.temp/CheckNewsEventsTemplate.class new file mode 100644 index 00000000..06c7ca2a Binary files /dev/null and b/.temp/CheckNewsEventsTemplate.class differ diff --git a/.temp/CheckNewsEventsTemplate.java b/.temp/CheckNewsEventsTemplate.java new file mode 100644 index 00000000..8c9ab1a8 --- /dev/null +++ b/.temp/CheckNewsEventsTemplate.java @@ -0,0 +1,20 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +public class CheckNewsEventsTemplate { + public static void main(String[] args) { + try { + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT html_template FROM sis_component_template WHERE slug = 'news-events'"); + if (rs.next()) { + System.out.println(rs.getString("html_template")); + } + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/CheckNewsGrid.class b/.temp/CheckNewsGrid.class new file mode 100644 index 00000000..fb6c1b1e Binary files /dev/null and b/.temp/CheckNewsGrid.class differ diff --git a/sisvietnamvn_main/CheckNewsGrid.java b/.temp/CheckNewsGrid.java similarity index 100% rename from sisvietnamvn_main/CheckNewsGrid.java rename to .temp/CheckNewsGrid.java diff --git a/.temp/CheckPosts.class b/.temp/CheckPosts.class new file mode 100644 index 00000000..4be5cf8b Binary files /dev/null and b/.temp/CheckPosts.class differ diff --git a/.temp/CheckPosts.java b/.temp/CheckPosts.java new file mode 100644 index 00000000..91135690 --- /dev/null +++ b/.temp/CheckPosts.java @@ -0,0 +1,23 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class CheckPosts { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + PreparedStatement stmt = conn.prepareStatement( + "SELECT id, slug, title FROM sis_post ORDER BY id DESC FETCH FIRST 10 ROWS ONLY" + ); + ResultSet rs = stmt.executeQuery(); + while (rs.next()) { + System.out.println("ID: " + rs.getLong("id") + " Slug: " + rs.getString("slug") + " Title: " + rs.getString("title")); + } + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/sisvietnamvn_main/CheckRender.java b/.temp/CheckRender.java similarity index 100% rename from sisvietnamvn_main/CheckRender.java rename to .temp/CheckRender.java diff --git a/.temp/CheckSnippets.class b/.temp/CheckSnippets.class new file mode 100644 index 00000000..68ee27c3 Binary files /dev/null and b/.temp/CheckSnippets.class differ diff --git a/sisvietnamvn_main/CheckSnippets.java b/.temp/CheckSnippets.java similarity index 100% rename from sisvietnamvn_main/CheckSnippets.java rename to .temp/CheckSnippets.java diff --git a/.temp/CheckTables.class b/.temp/CheckTables.class new file mode 100644 index 00000000..4e2f52d1 Binary files /dev/null and b/.temp/CheckTables.class differ diff --git a/.temp/CheckTables.java b/.temp/CheckTables.java new file mode 100644 index 00000000..7ce02d10 --- /dev/null +++ b/.temp/CheckTables.java @@ -0,0 +1,23 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class CheckTables { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + PreparedStatement stmt = conn.prepareStatement( + "SELECT table_name FROM user_tables" + ); + ResultSet rs = stmt.executeQuery(); + while (rs.next()) { + System.out.println("Table: " + rs.getString("table_name")); + } + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/CheckTag.class b/.temp/CheckTag.class new file mode 100644 index 00000000..06bc8c54 Binary files /dev/null and b/.temp/CheckTag.class differ diff --git a/.temp/CheckTag.java b/.temp/CheckTag.java new file mode 100644 index 00000000..7292db53 --- /dev/null +++ b/.temp/CheckTag.java @@ -0,0 +1,22 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class CheckTag { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + PreparedStatement stmt = conn.prepareStatement("SELECT tag_id FROM sis_post_tag WHERE post_id = 6450"); + ResultSet rs = stmt.executeQuery(); + while (rs.next()) { + System.out.println("Tag ID: " + rs.getLong(1)); + } + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/CheckTags.class b/.temp/CheckTags.class new file mode 100644 index 00000000..e6ae326d Binary files /dev/null and b/.temp/CheckTags.class differ diff --git a/.temp/CheckTags.java b/.temp/CheckTags.java new file mode 100644 index 00000000..18934291 --- /dev/null +++ b/.temp/CheckTags.java @@ -0,0 +1,28 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +public class CheckTags { + public static void main(String[] args) { + try { + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + Statement stmt = conn.createStatement(); + + System.out.println("--- TAGS ---"); + ResultSet rs = stmt.executeQuery("SELECT id, name, slug FROM sis_tag"); + while (rs.next()) { + System.out.println(rs.getLong("id") + " - " + rs.getString("name") + " (" + rs.getString("slug") + ")"); + } + + System.out.println("--- POST TAGS ---"); + rs = stmt.executeQuery("SELECT post_id, tag_id FROM sis_post_tag"); + while (rs.next()) { + System.out.println("Post: " + rs.getLong("post_id") + " - Tag: " + rs.getLong("tag_id")); + } + conn.close(); + } catch (Exception e) { + System.out.println("Error: " + e.getMessage()); + } + } +} diff --git a/.temp/PopulateLivestream.class b/.temp/PopulateLivestream.class new file mode 100644 index 00000000..66b66d0a Binary files /dev/null and b/.temp/PopulateLivestream.class differ diff --git a/.temp/PopulateLivestream.java b/.temp/PopulateLivestream.java new file mode 100644 index 00000000..cc5bfd41 --- /dev/null +++ b/.temp/PopulateLivestream.java @@ -0,0 +1,105 @@ +import java.io.File; +import java.nio.file.Files; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PopulateLivestream { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + // Get category ID + PreparedStatement catStmt = conn.prepareStatement("SELECT id FROM sis_category WHERE slug = 'livestream'"); + ResultSet rsCat = catStmt.executeQuery(); + long catId = -1; + if (rsCat.next()) { + catId = rsCat.getLong("id"); + } + if (catId == -1) { + System.out.println("Category 'livestream' not found!"); + return; + } + + // Delete old posts + PreparedStatement delStmt = conn.prepareStatement("DELETE FROM sis_post WHERE category_id = ?"); + delStmt.setLong(1, catId); + delStmt.executeUpdate(); + + String baseDir = "/home/x79/sisvietnamvn_01/Media/Livestream"; + String uploadDir = "/home/x79/sisvietnamvn_01/sisvietnamvn_main/src/main/resources/static/upload/livestream"; + new File(uploadDir).mkdirs(); + + long currentId = 6500; + + for (int i = 1; i <= 4; i++) { + String folder = baseDir + "/Tuan" + i; + File f = new File(folder); + if (!f.exists()) continue; + + String title = "Tuần " + i; + String excerpt = ""; + StringBuilder content = new StringBuilder(); + String metaDesc = ""; + String imageUrl = ""; + + File contentFile = new File(folder, "content.txt"); + if (contentFile.exists()) { + List lines = Files.readAllLines(contentFile.toPath()); + if (lines.size() > 0) title = lines.get(0); + if (lines.size() > 1) excerpt = lines.get(1); + for (int j = 2; j < lines.size(); j++) { + content.append(lines.get(j)).append("
"); + } + } + + File embedFile = new File(folder, "embed.txt"); + if (!embedFile.exists()) embedFile = new File(folder, "url.txt"); + if (embedFile.exists()) { + String embedStr = Files.readString(embedFile.toPath()); + Matcher m = Pattern.compile("src=\"([^\"]+)\"").matcher(embedStr); + if (m.find()) { + metaDesc = m.group(1); + } + } + + for (File img : f.listFiles()) { + if (img.getName().endsWith(".jpg") || img.getName().endsWith(".png")) { + File dest = new File(uploadDir, "tuan" + i + "_" + img.getName()); + Files.copy(img.toPath(), dest.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING); + imageUrl = "/upload/livestream/" + dest.getName(); + break; + } + } + + String slug = "livestream-tuan-" + i; + + PreparedStatement insertStmt = conn.prepareStatement( + "INSERT INTO sis_post (id, slug, title, excerpt, content, meta_description, featured_image, category_id, created_date, is_published, views) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, SYSDATE, 1, 0)" + ); + insertStmt.setLong(1, currentId++); + insertStmt.setString(2, slug); + insertStmt.setString(3, title); + insertStmt.setString(4, excerpt); + insertStmt.setString(5, content.toString()); + insertStmt.setString(6, metaDesc); + insertStmt.setString(7, imageUrl); + insertStmt.setLong(8, catId); + insertStmt.executeUpdate(); + + System.out.println("Inserted Tuan " + i); + } + + conn.close(); + System.out.println("Done."); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/PopulateLivestreamFinal.class b/.temp/PopulateLivestreamFinal.class new file mode 100644 index 00000000..c9f3fd4a Binary files /dev/null and b/.temp/PopulateLivestreamFinal.class differ diff --git a/.temp/PopulateLivestreamFinal.java b/.temp/PopulateLivestreamFinal.java new file mode 100644 index 00000000..42c137ab --- /dev/null +++ b/.temp/PopulateLivestreamFinal.java @@ -0,0 +1,126 @@ +import java.io.File; +import java.nio.file.Files; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.util.List; +import java.util.stream.Collectors; + +public class PopulateLivestreamFinal { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + long tagId = 6351; + + // Delete old tags first, then old posts + PreparedStatement delTagStmt = conn.prepareStatement( + "DELETE FROM sis_post_tag WHERE tag_id = ?"); + delTagStmt.setLong(1, tagId); + delTagStmt.executeUpdate(); + + PreparedStatement delStmt = conn.prepareStatement( + "DELETE FROM sis_post WHERE id BETWEEN 6600 AND 6610"); + delStmt.executeUpdate(); + + String baseDir = "/home/x79/sisvietnamvn_01/Media/Livestream"; + String uploadDir = "/home/x79/sisvietnamvn_01/sisvietnamvn_main/src/main/resources/static/upload/livestream"; + new File(uploadDir).mkdirs(); + + long currentId = 6600; + + for (int i = 1; i <= 4; i++) { + String folder = baseDir + "/Tuan" + i; + File f = new File(folder); + if (!f.exists()) continue; + + // Title is just the week number for tab display + String title = String.valueOf(i); + // Excerpt is the short topic headline (line 2 of content.txt, after the program name) + String excerpt = ""; + StringBuilder content = new StringBuilder(); + String metaDescRaw = ""; + String imageUrl = ""; + + File contentFile = new File(folder, "content.txt"); + if (contentFile.exists()) { + List lines = Files.readAllLines(contentFile.toPath()) + .stream().filter(l -> !l.trim().isEmpty()).collect(Collectors.toList()); + + // Line 0 = full program name (used as excerpt/subtitle) + // Extract the topic after "Chủ đề:" if present + if (lines.size() > 0) { + String fullTitle = lines.get(0); + int chuDeIdx = fullTitle.indexOf("Chủ đề:"); + if (chuDeIdx >= 0) { + excerpt = fullTitle.substring(chuDeIdx + "Chủ đề:".length()).trim(); + } else { + chuDeIdx = fullTitle.indexOf("Chủ đề: "); + if (chuDeIdx >= 0) { + excerpt = fullTitle.substring(chuDeIdx + "Chủ đề: ".length()).trim(); + } else { + excerpt = fullTitle; + } + } + } + + // Line 1 onward = description content + if (lines.size() > 1) { + // Take first 2-3 meaningful lines as description + int maxLines = Math.min(lines.size(), 4); + for (int j = 1; j < maxLines; j++) { + content.append(lines.get(j)); + if (j < maxLines - 1) content.append("
"); + } + } + } + + File embedFile = new File(folder, "embed.txt"); + if (embedFile.exists()) { + metaDescRaw = Files.readString(embedFile.toPath()).trim(); + } + + // Find image + for (File img : f.listFiles()) { + String name = img.getName().toLowerCase(); + if (name.endsWith(".jpg") || name.endsWith(".png") || name.endsWith(".jpeg")) { + File dest = new File(uploadDir, "tuan" + i + "_" + img.getName()); + Files.copy(img.toPath(), dest.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING); + imageUrl = "/upload/livestream/" + dest.getName(); + break; + } + } + + String slug = "livestream-tuan-" + i; + + PreparedStatement insertStmt = conn.prepareStatement( + "INSERT INTO sis_post (id, slug, title, excerpt, content, meta_description, featured_image, category_id, created_date, status, layout, created_by) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, NULL, SYSDATE, 'PUBLISHED', 'STANDARD', 'admin')" + ); + insertStmt.setLong(1, currentId); + insertStmt.setString(2, slug); + insertStmt.setString(3, title); + insertStmt.setString(4, excerpt); + insertStmt.setString(5, content.toString()); + insertStmt.setString(6, metaDescRaw); + insertStmt.setString(7, imageUrl); + insertStmt.executeUpdate(); + + PreparedStatement tagStmt = conn.prepareStatement( + "INSERT INTO sis_post_tag (post_id, tag_id) VALUES (?, ?)"); + tagStmt.setLong(1, currentId); + tagStmt.setLong(2, tagId); + tagStmt.executeUpdate(); + + currentId++; + System.out.println("Inserted Tuan " + i + " | excerpt=" + excerpt + " | image=" + imageUrl); + } + + conn.close(); + System.out.println("Done populating livestream data."); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/PopulateLivestreamRaw.class b/.temp/PopulateLivestreamRaw.class new file mode 100644 index 00000000..39a2e415 Binary files /dev/null and b/.temp/PopulateLivestreamRaw.class differ diff --git a/.temp/PopulateLivestreamRaw.java b/.temp/PopulateLivestreamRaw.java new file mode 100644 index 00000000..b464cf40 --- /dev/null +++ b/.temp/PopulateLivestreamRaw.java @@ -0,0 +1,100 @@ +import java.io.File; +import java.nio.file.Files; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.List; +import java.util.stream.Collectors; + +public class PopulateLivestreamRaw { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + // Get tag ID + long tagId = 6351; // Hardcoded from CheckTag + + // Delete old tags + PreparedStatement delTagStmt = conn.prepareStatement("DELETE FROM sis_post_tag WHERE post_id IN (SELECT id FROM sis_post WHERE category_id IS NULL) OR tag_id = ?"); + delTagStmt.setLong(1, tagId); + delTagStmt.executeUpdate(); + + // Delete old posts + PreparedStatement delStmt = conn.prepareStatement("DELETE FROM sis_post WHERE id = 6450 OR id >= 6600"); + delStmt.executeUpdate(); + + String baseDir = "/home/x79/sisvietnamvn_01/Media/Livestream"; + String uploadDir = "/home/x79/sisvietnamvn_01/sisvietnamvn_main/src/main/resources/static/upload/livestream"; + new File(uploadDir).mkdirs(); + + long currentId = 6600; + + for (int i = 1; i <= 4; i++) { + String folder = baseDir + "/Tuan" + i; + File f = new File(folder); + if (!f.exists()) continue; + + String title = "Tuần " + i; + String excerpt = "Tuần " + i; + StringBuilder content = new StringBuilder(); + String metaDescRaw = ""; + String imageUrl = ""; + + File contentFile = new File(folder, "content.txt"); + if (contentFile.exists()) { + List lines = Files.readAllLines(contentFile.toPath()).stream().filter(l -> !l.trim().isEmpty()).collect(Collectors.toList()); + if (lines.size() > 0) title = lines.get(0); + if (lines.size() > 1) excerpt = lines.get(1); + for (int j = 2; j < lines.size(); j++) { + content.append(lines.get(j)).append("
"); + } + } + + File embedFile = new File(folder, "embed.txt"); + if (!embedFile.exists()) embedFile = new File(folder, "url.txt"); + if (embedFile.exists()) { + metaDescRaw = Files.readString(embedFile.toPath()); // Keep entire raw iframe + } + + for (File img : f.listFiles()) { + if (img.getName().endsWith(".jpg") || img.getName().endsWith(".png")) { + File dest = new File(uploadDir, "tuan" + i + "_" + img.getName()); + Files.copy(img.toPath(), dest.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING); + imageUrl = "/upload/livestream/" + dest.getName(); + break; + } + } + + String slug = "livestream-tuan-" + i; + + PreparedStatement insertStmt = conn.prepareStatement( + "INSERT INTO sis_post (id, slug, title, excerpt, content, meta_description, featured_image, category_id, created_date, status, layout, created_by) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, NULL, SYSDATE, 'PUBLISHED', 'STANDARD', 'admin')" + ); + insertStmt.setLong(1, currentId); + insertStmt.setString(2, slug); + insertStmt.setString(3, title); + insertStmt.setString(4, excerpt); + insertStmt.setString(5, content.toString()); + insertStmt.setString(6, metaDescRaw); + insertStmt.setString(7, imageUrl); + insertStmt.executeUpdate(); + + PreparedStatement tagStmt = conn.prepareStatement("INSERT INTO sis_post_tag (post_id, tag_id) VALUES (?, ?)"); + tagStmt.setLong(1, currentId); + tagStmt.setLong(2, tagId); + tagStmt.executeUpdate(); + + currentId++; + System.out.println("Inserted Tuan " + i); + } + + conn.close(); + System.out.println("Done."); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/PopulateNewsEventsEducation.class b/.temp/PopulateNewsEventsEducation.class new file mode 100644 index 00000000..cc914ed2 Binary files /dev/null and b/.temp/PopulateNewsEventsEducation.class differ diff --git a/.temp/PopulateNewsEventsEducation.java b/.temp/PopulateNewsEventsEducation.java new file mode 100644 index 00000000..a4f0d9c8 --- /dev/null +++ b/.temp/PopulateNewsEventsEducation.java @@ -0,0 +1,88 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class PopulateNewsEventsEducation { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + // Delete old duplicate posts + PreparedStatement delTagStmt = conn.prepareStatement("DELETE FROM sis_post_tag WHERE post_id >= 7000"); + delTagStmt.executeUpdate(); + + PreparedStatement delStmt = conn.prepareStatement("DELETE FROM sis_post WHERE id >= 7000"); + delStmt.executeUpdate(); + + // Get post 4151 to duplicate + PreparedStatement getPost = conn.prepareStatement("SELECT title, excerpt, content, meta_description, featured_image, category_id, layout, created_by FROM sis_post WHERE id = 4151"); + ResultSet rs = getPost.executeQuery(); + if (!rs.next()) { + System.out.println("Post 4151 not found!"); + return; + } + + String originalTitle = rs.getString("title"); + String excerpt = rs.getString("excerpt"); + String content = rs.getString("content"); + String metaDesc = rs.getString("meta_description"); + String featuredImage = rs.getString("featured_image"); + long categoryId = rs.getLong("category_id"); + boolean catIsNull = rs.wasNull(); + + String layout = rs.getString("layout"); + String createdBy = rs.getString("created_by"); + + long currentId = 7000; + + long[] tagIds = {4251, 4252, 6151}; // news, event, education + String[] prefixes = {"[Tin Tức] ", "[Sự Kiện] ", "[Đào Tạo] "}; + String[] slugPrefixes = {"tin-tuc-", "su-kien-", "dao-tao-"}; + + PreparedStatement insertStmt = conn.prepareStatement( + "INSERT INTO sis_post (id, slug, title, excerpt, content, meta_description, featured_image, category_id, created_date, status, layout, created_by) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, SYSDATE - ?, 'PUBLISHED', ?, ?)" + ); + PreparedStatement tagStmt = conn.prepareStatement("INSERT INTO sis_post_tag (post_id, tag_id) VALUES (?, ?)"); + + for (int t = 0; t < 3; t++) { + for (int i = 1; i <= 4; i++) { + String title = prefixes[t] + originalTitle + " " + i; + String slug = slugPrefixes[t] + currentId; + + insertStmt.setLong(1, currentId); + insertStmt.setString(2, slug); + insertStmt.setString(3, title); + insertStmt.setString(4, excerpt); + insertStmt.setString(5, content); + insertStmt.setString(6, metaDesc); + insertStmt.setString(7, featuredImage); + + if (catIsNull) { + insertStmt.setNull(8, java.sql.Types.BIGINT); + } else { + insertStmt.setLong(8, categoryId); + } + + insertStmt.setInt(9, i); // Subtract i days to vary dates + insertStmt.setString(10, layout); + insertStmt.setString(11, createdBy); + insertStmt.executeUpdate(); + + tagStmt.setLong(1, currentId); + tagStmt.setLong(2, tagIds[t]); + tagStmt.executeUpdate(); + + currentId++; + } + } + + conn.close(); + System.out.println("Done duplicating posts."); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/UpdateLivestreamTemplate.class b/.temp/UpdateLivestreamTemplate.class new file mode 100644 index 00000000..027beb56 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate.class differ diff --git a/sisvietnamvn_main/UpdateLivestreamTemplate.java b/.temp/UpdateLivestreamTemplate.java similarity index 100% rename from sisvietnamvn_main/UpdateLivestreamTemplate.java rename to .temp/UpdateLivestreamTemplate.java diff --git a/.temp/UpdateLivestreamTemplate10.class b/.temp/UpdateLivestreamTemplate10.class new file mode 100644 index 00000000..89e4677e Binary files /dev/null and b/.temp/UpdateLivestreamTemplate10.class differ diff --git a/.temp/UpdateLivestreamTemplate10.java b/.temp/UpdateLivestreamTemplate10.java new file mode 100644 index 00000000..3089618d --- /dev/null +++ b/.temp/UpdateLivestreamTemplate10.java @@ -0,0 +1,159 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; + +public class UpdateLivestreamTemplate10 { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + String htmlTemplate = +"\n" + +"\n" + +"
\n" + +"
\n" + +"
\n" + +" \n" + +"
\n" + +"

Livestream Tháng 07

\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +" Tuần {{title}}\n" + +" {{/each}}\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"

{{excerpt}}

\n" + +"
{{content}}
\n" + +" Tìm Hiểu Thêm\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +" \n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"
\n" + +" \"{{title}}\"\n" + +"
\n" + +"
\n" + +"
\n" + +" {{{metaDescriptionRaw}}}\n" + +"
\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +"
\n" + +"\n" + +""; + + PreparedStatement updateTemplate = conn.prepareStatement( + "UPDATE sis_component_template SET html_template = ? WHERE slug = 'tabbed-livestream'" + ); + updateTemplate.setString(1, htmlTemplate); + int rows = updateTemplate.executeUpdate(); + System.out.println("Updated " + rows + " row(s)."); + + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/UpdateLivestreamTemplate11.class b/.temp/UpdateLivestreamTemplate11.class new file mode 100644 index 00000000..7d251978 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate11.class differ diff --git a/.temp/UpdateLivestreamTemplate11.java b/.temp/UpdateLivestreamTemplate11.java new file mode 100644 index 00000000..28becdad --- /dev/null +++ b/.temp/UpdateLivestreamTemplate11.java @@ -0,0 +1,157 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; + +public class UpdateLivestreamTemplate11 { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + String htmlTemplate = +"\n" + +"\n" + +"
\n" + +"
\n" + +" \n" + +"
\n" + +"

Livestream Tháng 07

\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +" Tuần {{title}}\n" + +" {{/each}}\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"

{{excerpt}}

\n" + +"
{{content}}
\n" + +" Tìm Hiểu Thêm\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +" \n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"
\n" + +" \"{{title}}\"\n" + +"
\n" + +"
\n" + +"
\n" + +" {{{metaDescriptionRaw}}}\n" + +"
\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +"\n" + +""; + + PreparedStatement updateTemplate = conn.prepareStatement( + "UPDATE sis_component_template SET html_template = ? WHERE slug = 'tabbed-livestream'" + ); + updateTemplate.setString(1, htmlTemplate); + int rows = updateTemplate.executeUpdate(); + System.out.println("Updated " + rows + " row(s)."); + + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/UpdateLivestreamTemplate12.class b/.temp/UpdateLivestreamTemplate12.class new file mode 100644 index 00000000..4343c0ef Binary files /dev/null and b/.temp/UpdateLivestreamTemplate12.class differ diff --git a/.temp/UpdateLivestreamTemplate12.java b/.temp/UpdateLivestreamTemplate12.java new file mode 100644 index 00000000..2d8aa6cf --- /dev/null +++ b/.temp/UpdateLivestreamTemplate12.java @@ -0,0 +1,156 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; + +public class UpdateLivestreamTemplate12 { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + String htmlTemplate = +"\n" + +"\n" + +"
\n" + +"
\n" + +" \n" + +"
\n" + +"

Livestream Tháng 07

\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +" Tuần {{title}}\n" + +" {{/each}}\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"

{{excerpt}}

\n" + +"
{{content}}
\n" + +" Tìm Hiểu Thêm\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +" \n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"
\n" + +" \"{{title}}\"\n" + +"
\n" + +"
\n" + +"
\n" + +" {{{metaDescriptionRaw}}}\n" + +"
\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +"\n" + +""; + + PreparedStatement updateTemplate = conn.prepareStatement( + "UPDATE sis_component_template SET html_template = ? WHERE slug = 'tabbed-livestream'" + ); + updateTemplate.setString(1, htmlTemplate); + int rows = updateTemplate.executeUpdate(); + System.out.println("Updated " + rows + " row(s)."); + + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/UpdateLivestreamTemplate13.class b/.temp/UpdateLivestreamTemplate13.class new file mode 100644 index 00000000..0075efc4 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate13.class differ diff --git a/.temp/UpdateLivestreamTemplate13.java b/.temp/UpdateLivestreamTemplate13.java new file mode 100644 index 00000000..046b8103 --- /dev/null +++ b/.temp/UpdateLivestreamTemplate13.java @@ -0,0 +1,156 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; + +public class UpdateLivestreamTemplate13 { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + String htmlTemplate = +"\n" + +"\n" + +"
\n" + +"
\n" + +" \n" + +"
\n" + +"

Livestream Tháng 07

\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +" Tuần {{title}}\n" + +" {{/each}}\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"

{{excerpt}}

\n" + +"
{{content}}
\n" + +" Tìm Hiểu Thêm\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +" \n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"
\n" + +" \"{{title}}\"\n" + +"
\n" + +"
\n" + +"
\n" + +" {{{metaDescriptionRaw}}}\n" + +"
\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +"\n" + +""; + + PreparedStatement updateTemplate = conn.prepareStatement( + "UPDATE sis_component_template SET html_template = ? WHERE slug = 'tabbed-livestream'" + ); + updateTemplate.setString(1, htmlTemplate); + int rows = updateTemplate.executeUpdate(); + System.out.println("Updated " + rows + " row(s)."); + + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/UpdateLivestreamTemplate14.class b/.temp/UpdateLivestreamTemplate14.class new file mode 100644 index 00000000..efd94079 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate14.class differ diff --git a/.temp/UpdateLivestreamTemplate14.java b/.temp/UpdateLivestreamTemplate14.java new file mode 100644 index 00000000..3baf3d08 --- /dev/null +++ b/.temp/UpdateLivestreamTemplate14.java @@ -0,0 +1,156 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; + +public class UpdateLivestreamTemplate14 { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + String htmlTemplate = +"\n" + +"\n" + +"
\n" + +"
\n" + +" \n" + +"
\n" + +"

Livestream Tháng 07

\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +" Tuần {{title}}\n" + +" {{/each}}\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"

{{excerpt}}

\n" + +"
{{content}}
\n" + +" Tìm Hiểu Thêm\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +" \n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"
\n" + +" \"{{title}}\"\n" + +"
\n" + +"
\n" + +"
\n" + +" {{{metaDescriptionRaw}}}\n" + +"
\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +"\n" + +""; + + PreparedStatement updateTemplate = conn.prepareStatement( + "UPDATE sis_component_template SET html_template = ? WHERE slug = 'tabbed-livestream'" + ); + updateTemplate.setString(1, htmlTemplate); + int rows = updateTemplate.executeUpdate(); + System.out.println("Updated " + rows + " row(s)."); + + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/UpdateLivestreamTemplate2.class b/.temp/UpdateLivestreamTemplate2.class new file mode 100644 index 00000000..2a534764 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate2.class differ diff --git a/sisvietnamvn_main/UpdateLivestreamTemplate2.java b/.temp/UpdateLivestreamTemplate2.java similarity index 100% rename from sisvietnamvn_main/UpdateLivestreamTemplate2.java rename to .temp/UpdateLivestreamTemplate2.java diff --git a/.temp/UpdateLivestreamTemplate3.class b/.temp/UpdateLivestreamTemplate3.class new file mode 100644 index 00000000..68d25248 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate3.class differ diff --git a/sisvietnamvn_main/UpdateLivestreamTemplate3.java b/.temp/UpdateLivestreamTemplate3.java similarity index 100% rename from sisvietnamvn_main/UpdateLivestreamTemplate3.java rename to .temp/UpdateLivestreamTemplate3.java diff --git a/.temp/UpdateLivestreamTemplate4.class b/.temp/UpdateLivestreamTemplate4.class new file mode 100644 index 00000000..e06d0d9d Binary files /dev/null and b/.temp/UpdateLivestreamTemplate4.class differ diff --git a/sisvietnamvn_main/UpdateLivestreamTemplate4.java b/.temp/UpdateLivestreamTemplate4.java similarity index 100% rename from sisvietnamvn_main/UpdateLivestreamTemplate4.java rename to .temp/UpdateLivestreamTemplate4.java diff --git a/.temp/UpdateLivestreamTemplate5.class b/.temp/UpdateLivestreamTemplate5.class new file mode 100644 index 00000000..50e7cfd5 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate5.class differ diff --git a/sisvietnamvn_main/UpdateLivestreamTemplate5.java b/.temp/UpdateLivestreamTemplate5.java similarity index 100% rename from sisvietnamvn_main/UpdateLivestreamTemplate5.java rename to .temp/UpdateLivestreamTemplate5.java diff --git a/.temp/UpdateLivestreamTemplate6.class b/.temp/UpdateLivestreamTemplate6.class new file mode 100644 index 00000000..b9f0f1a0 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate6.class differ diff --git a/.temp/UpdateLivestreamTemplate6.java b/.temp/UpdateLivestreamTemplate6.java new file mode 100644 index 00000000..2a30f14b --- /dev/null +++ b/.temp/UpdateLivestreamTemplate6.java @@ -0,0 +1,109 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; + +public class UpdateLivestreamTemplate6 { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + String htmlTemplate = +"\n" + +"
\n" + +"
\n" + +"
\n" + +"
\n" + +"

LiveStream

\n" + +"
\n" + +"
\n" + +"
\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +" {{title}}\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"
\n" + +"

{{excerpt}}

\n" + +"
\n" + +"
\n" + +"
{{content}}
\n" + +"
\n" + +"
\n" + +" \n" + +"
\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"
\n" + +" {{{metaDescriptionRaw}}}\n" + +"
\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +""; + + PreparedStatement updateTemplate = conn.prepareStatement( + "UPDATE sis_component_template SET html_template = ? WHERE slug = 'tabbed-livestream'" + ); + updateTemplate.setString(1, htmlTemplate); + updateTemplate.executeUpdate(); + + System.out.println("Update complete!"); + + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/UpdateLivestreamTemplate7.class b/.temp/UpdateLivestreamTemplate7.class new file mode 100644 index 00000000..a7e71111 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate7.class differ diff --git a/.temp/UpdateLivestreamTemplate7.java b/.temp/UpdateLivestreamTemplate7.java new file mode 100644 index 00000000..010d96cb --- /dev/null +++ b/.temp/UpdateLivestreamTemplate7.java @@ -0,0 +1,117 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; + +public class UpdateLivestreamTemplate7 { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + String htmlTemplate = +"\n" + +"\n" + +"
\n" + +"
\n" + +" \n" + +"
\n" + +"

Livestream Tháng 07

\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +" Tuần {{title}}\n" + +" {{/each}}\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"

{{excerpt}}

\n" + +"
{{content}}
\n" + +" Tìm Hiểu Thêm\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +" \n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +" \"{{title}}\"\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +"\n" + +""; + + PreparedStatement updateTemplate = conn.prepareStatement( + "UPDATE sis_component_template SET html_template = ? WHERE slug = 'tabbed-livestream'" + ); + updateTemplate.setString(1, htmlTemplate); + int rows = updateTemplate.executeUpdate(); + System.out.println("Updated " + rows + " row(s)."); + + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/UpdateLivestreamTemplate8.class b/.temp/UpdateLivestreamTemplate8.class new file mode 100644 index 00000000..0836baec Binary files /dev/null and b/.temp/UpdateLivestreamTemplate8.class differ diff --git a/.temp/UpdateLivestreamTemplate8.java b/.temp/UpdateLivestreamTemplate8.java new file mode 100644 index 00000000..6c74c380 --- /dev/null +++ b/.temp/UpdateLivestreamTemplate8.java @@ -0,0 +1,157 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; + +public class UpdateLivestreamTemplate8 { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + String htmlTemplate = +"\n" + +"\n" + +"
\n" + +"
\n" + +" \n" + +"
\n" + +"

Livestream Tháng 07

\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +" Tuần {{title}}\n" + +" {{/each}}\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"

{{excerpt}}

\n" + +"
{{content}}
\n" + +" Tìm Hiểu Thêm\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +" \n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"
\n" + +" \"{{title}}\"\n" + +"
\n" + +"
\n" + +"
\n" + +" {{{metaDescriptionRaw}}}\n" + +"
\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +"\n" + +""; + + PreparedStatement updateTemplate = conn.prepareStatement( + "UPDATE sis_component_template SET html_template = ? WHERE slug = 'tabbed-livestream'" + ); + updateTemplate.setString(1, htmlTemplate); + int rows = updateTemplate.executeUpdate(); + System.out.println("Updated " + rows + " row(s)."); + + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/.temp/UpdateLivestreamTemplate9.class b/.temp/UpdateLivestreamTemplate9.class new file mode 100644 index 00000000..cacbd647 Binary files /dev/null and b/.temp/UpdateLivestreamTemplate9.class differ diff --git a/.temp/UpdateLivestreamTemplate9.java b/.temp/UpdateLivestreamTemplate9.java new file mode 100644 index 00000000..e7a63500 --- /dev/null +++ b/.temp/UpdateLivestreamTemplate9.java @@ -0,0 +1,159 @@ +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; + +public class UpdateLivestreamTemplate9 { + public static void main(String[] args) { + try { + Class.forName("oracle.jdbc.OracleDriver"); + Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/sisvietnam", "sisvietnam", "sisvietnam"); + + String htmlTemplate = +"\n" + +"\n" + +"
\n" + +"
\n" + +"
\n" + +" \n" + +"
\n" + +"

Livestream Tháng 07

\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +" Tuần {{title}}\n" + +" {{/each}}\n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"

{{excerpt}}

\n" + +"
{{content}}
\n" + +" Tìm Hiểu Thêm\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +" \n" + +"
\n" + +" {{#each livestream_posts}}\n" + +"
\n" + +"
\n" + +" \"{{title}}\"\n" + +"
\n" + +"
\n" + +"
\n" + +" {{{metaDescriptionRaw}}}\n" + +"
\n" + +"
\n" + +" {{/each}}\n" + +"
\n" + +"
\n" + +"
\n" + +"
\n" + +"\n" + +""; + + PreparedStatement updateTemplate = conn.prepareStatement( + "UPDATE sis_component_template SET html_template = ? WHERE slug = 'tabbed-livestream'" + ); + updateTemplate.setString(1, htmlTemplate); + int rows = updateTemplate.executeUpdate(); + System.out.println("Updated " + rows + " row(s)."); + + conn.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/check_paths.sql b/.temp/check_paths.sql similarity index 100% rename from check_paths.sql rename to .temp/check_paths.sql diff --git a/create_pdb.sql b/.temp/create_pdb.sql similarity index 100% rename from create_pdb.sql rename to .temp/create_pdb.sql diff --git a/fix_img.js b/.temp/fix_img.js similarity index 100% rename from fix_img.js rename to .temp/fix_img.js diff --git a/get_umass.js b/.temp/get_umass.js similarity index 100% rename from get_umass.js rename to .temp/get_umass.js diff --git a/reset_pwd.sql b/.temp/reset_pwd.sql similarity index 100% rename from reset_pwd.sql rename to .temp/reset_pwd.sql diff --git a/sisvietnamvn_main/test-iframe.html b/.temp/test-iframe.html similarity index 100% rename from sisvietnamvn_main/test-iframe.html rename to .temp/test-iframe.html diff --git a/Media/Livestream/Tuan1/content.txt b/Media/Livestream/Tuan1/content.txt new file mode 100644 index 00000000..3493a4fb --- /dev/null +++ b/Media/Livestream/Tuan1/content.txt @@ -0,0 +1,22 @@ +CHƯƠNG TRÌNH S.I.S VÌ SỨC KHỎE CỘNG ĐỒNG | Chủ đề: Thoát vị đĩa đệm – Khi nào mới phẫu thuật? +Đau lưng, đau cổ, tê tay, tê chân... là những triệu chứng thường gặp của thoát vị đĩa đệm. Tuy nhiên, không phải ai mắc bệnh cũng cần phẫu thuật. +⚠️ Vậy khi nào nên điều trị bảo tồn? Khi nào cần phẫu thuật? Làm sao để tránh bỏ lỡ "thời điểm vàng" điều trị? +Cùng lắng nghe những chia sẻ từ các chuyên gia trong chương trình Livestream "S.I.S vì sức khỏe cộng đồng" vào lúc 𝟏𝟗𝐡𝟒𝟓 Thứ Ba, ngày 𝟎𝟕/𝟎𝟕/𝟐𝟎𝟐𝟔. +📌 Đồng hành và tư vấn trực tiếp cùng quý khán giả là các bác sĩ giàu kinh nghiệm tại Bệnh viện ĐKQT S.I.S Cần Thơ: +• BS.CKI Nguyễn Quang Hưng, chuyên khoa Ngoại Thần kinh +• BS.CKI Trương Đan Kha, chuyên khoa Vật lý trị liệu - Phục hồi chức năng +• ThS.BS Lê Thị Chi Lan, chuyên khoa Ngoại Thần kinh. +Kính mời quý bà con chú ý đón xem livestream tại: +• Fanpage Bệnh viện ĐKQT S.I.S Cần Thơ +• Fanpage S.I.S Charity Foundation (QUỸ TT BNN BỊ ĐQ KV.ĐBSCL) +🎁 Quà tặng đặc biệt: Khán giả đặt câu hỏi giao lưu trực tiếp sẽ có hội nhận Voucher 2 triệu đồng cho các gói khám sức khoẻ tại S.I.S! +====================================== + +● Để đặt lịch hẹn khám chữa bệnh MIỄN PHÍ: +► https://booking.sisvietnam.vn/booking + +Bệnh Viện Đa Khoa Quốc Tế S.I.S Cần Thơ: +🏥 397 Nguyễn Văn Cừ nối dài, P.An Bình, Q.Ninh Kiều, TP. Cần Thơ +--------------------- +© Bản quyền thuộc về Bệnh viện Đa khoa Quốc tế S.I.S Cần Thơ +© Copyright by S.I.S Hospital ☞ Do not Reup \ No newline at end of file diff --git a/Media/Livestream/Tuan1/embed.txt b/Media/Livestream/Tuan1/embed.txt new file mode 100644 index 00000000..5fc67abb --- /dev/null +++ b/Media/Livestream/Tuan1/embed.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Media/livestream/livestream_tuan1.jpg b/Media/Livestream/Tuan1/livestream_tuan1.jpg similarity index 100% rename from Media/livestream/livestream_tuan1.jpg rename to Media/Livestream/Tuan1/livestream_tuan1.jpg diff --git a/Media/Livestream/Tuan2/KlYevjYrBeI-maxresdefault.jpg b/Media/Livestream/Tuan2/KlYevjYrBeI-maxresdefault.jpg new file mode 100644 index 00000000..31058f7f Binary files /dev/null and b/Media/Livestream/Tuan2/KlYevjYrBeI-maxresdefault.jpg differ diff --git a/Media/Livestream/Tuan2/KlYevjYrBeI-maxresdefault.jpg:Zone.Identifier b/Media/Livestream/Tuan2/KlYevjYrBeI-maxresdefault.jpg:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/Media/Livestream/Tuan2/KlYevjYrBeI-maxresdefault.jpg:Zone.Identifier differ diff --git a/Media/Livestream/Tuan2/YTDown.com_YouTube_SIS-VSKCD-ky-133-Tam-soat-va-phong-ngua-_Media_KlYevjYrBeI_001_1080p.mp4 b/Media/Livestream/Tuan2/YTDown.com_YouTube_SIS-VSKCD-ky-133-Tam-soat-va-phong-ngua-_Media_KlYevjYrBeI_001_1080p.mp4 new file mode 100644 index 00000000..d30f90b8 Binary files /dev/null and b/Media/Livestream/Tuan2/YTDown.com_YouTube_SIS-VSKCD-ky-133-Tam-soat-va-phong-ngua-_Media_KlYevjYrBeI_001_1080p.mp4 differ diff --git a/Media/Livestream/Tuan2/YTDown.com_YouTube_SIS-VSKCD-ky-133-Tam-soat-va-phong-ngua-_Media_KlYevjYrBeI_001_1080p.mp4:Zone.Identifier b/Media/Livestream/Tuan2/YTDown.com_YouTube_SIS-VSKCD-ky-133-Tam-soat-va-phong-ngua-_Media_KlYevjYrBeI_001_1080p.mp4:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/Media/Livestream/Tuan2/YTDown.com_YouTube_SIS-VSKCD-ky-133-Tam-soat-va-phong-ngua-_Media_KlYevjYrBeI_001_1080p.mp4:Zone.Identifier differ diff --git a/Media/Livestream/Tuan2/content.txt b/Media/Livestream/Tuan2/content.txt new file mode 100644 index 00000000..d1bb01cb --- /dev/null +++ b/Media/Livestream/Tuan2/content.txt @@ -0,0 +1,13 @@ + +CHƯƠNG TRÌNH S.I.S VÌ SỨC KHỎE CỘNG ĐỒNG | Chủ đề: Tầm soát và phòng ngừa ung thư gan – Chủ động bảo vệ lá gan, bảo vệ sự sống +Ung thư gan là một trong những bệnh ung thư có tỷ lệ tử vong hàng đầu tại Việt Nam. Đáng lo ngại, phần lớn người bệnh chỉ được phát hiện khi bệnh đã ở giai đoạn muộn, khi các cơ hội điều trị hiệu quả đã bị thu hẹp đáng kể. +⚠️ Ai là người có nguy cơ cao mắc ung thư gan? Tầm soát ung thư gan gồm những phương pháp nào? Bao lâu nên kiểm tra một lần để phát hiện bệnh sớm? +Cùng lắng nghe những chia sẻ từ các chuyên gia trong chương trình Livestream "S.I.S vì sức khỏe cộng đồng" vào lúc 𝟏𝟗𝐡𝟒𝟓 Thứ Ba, ngày 𝟑𝟎/𝟎𝟔/𝟐𝟎𝟐𝟔. +📌 Đồng hành và tư vấn trực tiếp cùng quý khán giả là các bác sĩ giàu kinh nghiệm: +• BS.CKII Huỳnh Thị Kim Yến, Nguyên Trưởng bộ môn Nhiễm trường Đại học Y Dược Cần Thơ, Liên chi hội Trưởng Liên Chi hội Truyền nhiễm các tỉnh miền Tây +• BS.CKII Ngô Minh Tuấn, Chuyên khoa CĐHA - Điện quang can thiệp, Bệnh viện ĐKQT S.I.S Cần Thơ +• Ths.BS Lê Xuân Triệu, Chuyên khoa Ung thư, Bệnh viện ĐKQT S.I.S Cần Thơ. +Kính mời quý bà con chú ý đón xem livestream tại: +• Fanpage Bệnh viện ĐKQT S.I.S Cần Thơ +• Fanpage S.I.S Charity Foundation (QUỸ TT BNN BỊ ĐQ KV.ĐBSCL) +🎁 Quà tặng đặc biệt: Khán giả đặt câu hỏi giao lưu trực tiếp sẽ có hội nhận Voucher 2 triệu đồng cho các gói khám sức khoẻ tại S.I.S! \ No newline at end of file diff --git a/Media/Livestream/Tuan2/embed.txt b/Media/Livestream/Tuan2/embed.txt new file mode 100644 index 00000000..cf34feac --- /dev/null +++ b/Media/Livestream/Tuan2/embed.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Media/Livestream/Tuan3/JqEJ6PQYjkA-maxresdefault.jpg b/Media/Livestream/Tuan3/JqEJ6PQYjkA-maxresdefault.jpg new file mode 100644 index 00000000..b1cb22b0 Binary files /dev/null and b/Media/Livestream/Tuan3/JqEJ6PQYjkA-maxresdefault.jpg differ diff --git a/Media/Livestream/Tuan3/JqEJ6PQYjkA-maxresdefault.jpg:Zone.Identifier b/Media/Livestream/Tuan3/JqEJ6PQYjkA-maxresdefault.jpg:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/Media/Livestream/Tuan3/JqEJ6PQYjkA-maxresdefault.jpg:Zone.Identifier differ diff --git a/Media/Livestream/Tuan3/YTDown.com_YouTube_SIS-Vi-Suc-khoe-Cong-dong-ky-132-Con-dau_Media_JqEJ6PQYjkA_001_1080p.mp4 b/Media/Livestream/Tuan3/YTDown.com_YouTube_SIS-Vi-Suc-khoe-Cong-dong-ky-132-Con-dau_Media_JqEJ6PQYjkA_001_1080p.mp4 new file mode 100644 index 00000000..06906cd0 Binary files /dev/null and b/Media/Livestream/Tuan3/YTDown.com_YouTube_SIS-Vi-Suc-khoe-Cong-dong-ky-132-Con-dau_Media_JqEJ6PQYjkA_001_1080p.mp4 differ diff --git a/Media/Livestream/Tuan3/YTDown.com_YouTube_SIS-Vi-Suc-khoe-Cong-dong-ky-132-Con-dau_Media_JqEJ6PQYjkA_001_1080p.mp4:Zone.Identifier b/Media/Livestream/Tuan3/YTDown.com_YouTube_SIS-Vi-Suc-khoe-Cong-dong-ky-132-Con-dau_Media_JqEJ6PQYjkA_001_1080p.mp4:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/Media/Livestream/Tuan3/YTDown.com_YouTube_SIS-Vi-Suc-khoe-Cong-dong-ky-132-Con-dau_Media_JqEJ6PQYjkA_001_1080p.mp4:Zone.Identifier differ diff --git a/Media/Livestream/Tuan3/content.txt b/Media/Livestream/Tuan3/content.txt new file mode 100644 index 00000000..103bd4d4 --- /dev/null +++ b/Media/Livestream/Tuan3/content.txt @@ -0,0 +1,22 @@ +CHƯƠNG TRÌNH S.I.S VÌ SỨC KHỎE CỘNG ĐỒNG| Chủ đề: Cơn đau thắt ngực, khi nào phải đi cấp cứu ngay? +Nhiều người cho rằng đau tức ngực chỉ là do mệt mỏi, stress hay đau bao tử. Thế nhưng, đây cũng có thể là dấu hiệu cảnh báo sớm của nhồi máu cơ tim. +⚠️ Khi nào cơn đau thắt ngực trở thành tín hiệu báo động đỏ? Người bệnh cần xử trí ra sao để tránh những hậu quả đáng tiếc? +Cùng lắng nghe giải đáp từ các chuyên gia trong chương trình Livestream "S.I.S vì sức khỏe cộng đồng" vào lúc 𝟏𝟗𝐡𝟒𝟓 Thứ Ba, ngày 𝟐𝟑/𝟎𝟔/𝟐𝟎𝟐𝟔. +📌 Đồng hành và tư vấn trực tiếp cùng quý khán giả là các bác sĩ giàu kinh nghiệm tại Bệnh viện ĐKQT S.I.S Cần Thơ: +• BS.CKII Huỳnh Quốc Sĩ, Chuyên khoa Nội tổng quát +• BS.CKII Ngô Miên Tường, Chuyên khoa Nội khoa +• BS.CKI Nguyễn Đức Chỉnh, Chuyên khoa Tim mạch can thiệp +Kính mời quý bà con chú ý đón xem livestream tại: +• Fanpage Bệnh viện ĐKQT S.I.S Cần Thơ +• Fanpage S.I.S Charity Foundation (QUỸ TT BNN BỊ ĐQ KV.ĐBSCL) +🎁 Quà tặng đặc biệt: Khán giả đặt câu hỏi giao lưu trực tiếp sẽ có hội nhận Voucher 2 triệu đồng cho các gói khám sức khoẻ tại S.I.S! +====================================== + +● Để đặt lịch hẹn khám chữa bệnh MIỄN PHÍ: +► https://booking.sisvietnam.vn/booking + +Bệnh Viện Đa Khoa Quốc Tế S.I.S Cần Thơ: +🏥 397 Nguyễn Văn Cừ nối dài, P.An Bình, Q.Ninh Kiều, TP. Cần Thơ +--------------------- +© Bản quyền thuộc về Bệnh viện Đa khoa Quốc tế S.I.S Cần Thơ +© Copyright by S.I.S Hospital ☞ Do not Reup \ No newline at end of file diff --git a/Media/Livestream/Tuan3/embed.txt b/Media/Livestream/Tuan3/embed.txt new file mode 100644 index 00000000..01b480c2 --- /dev/null +++ b/Media/Livestream/Tuan3/embed.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Media/Livestream/Tuan4/Mn-dsRNXZwU-maxresdefault.jpg b/Media/Livestream/Tuan4/Mn-dsRNXZwU-maxresdefault.jpg new file mode 100644 index 00000000..51938e02 Binary files /dev/null and b/Media/Livestream/Tuan4/Mn-dsRNXZwU-maxresdefault.jpg differ diff --git a/Media/Livestream/Tuan4/Mn-dsRNXZwU-maxresdefault.jpg:Zone.Identifier b/Media/Livestream/Tuan4/Mn-dsRNXZwU-maxresdefault.jpg:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/Media/Livestream/Tuan4/Mn-dsRNXZwU-maxresdefault.jpg:Zone.Identifier differ diff --git a/Media/Livestream/Tuan4/content.txt b/Media/Livestream/Tuan4/content.txt new file mode 100644 index 00000000..140ef7a6 --- /dev/null +++ b/Media/Livestream/Tuan4/content.txt @@ -0,0 +1,23 @@ +CHƯƠNG TRÌNH S.I.S VÌ SỨC KHỎE CỘNG ĐỒNG | Chủ đề: Khi bị chấn thương cổ hoặc gãy tay chân - Ta cần làm gì? +Điều phụ huynh mong nhất trong dịp hè là con được vui chơi an toàn. Tuy nhiên, những cú té ngã hay va chạm khi chạy nhảy vẫn có thể xảy ra bất cứ lúc nào. +❓ Khi trẻ bị té ngã, nghi gãy xương hay chấn thương vùng đầu cổ, cần xử trí thế nào? +❓ Những sai lầm nào khi sơ cứu có thể khiến tình trạng nặng hơn? +Trong chương trình livestream "S.I.S vì sức khỏe cộng đồng" vào lúc 𝟏𝟗𝐡𝟒𝟓 Thứ Ba, ngày 𝟏𝟔/𝟎𝟔/𝟐𝟎𝟐𝟔. Các bác sĩ sẽ chia sẻ những kỹ năng sơ cứu cần thiết, giúp phụ huynh bình tĩnh và xử trí đúng khi tai nạn xảy ra. +📌 Đồng hành và tư vấn trực tiếp cùng quý khán giả là: +• BS.CKII Nguyễn Anh Trung, chuyên khoa Chấn thương chỉnh hình - Cơ xương khớp +• Ths.BS Nguyễn Trần Duy, chuyên khoa Chấn thương chỉnh hình - Cơ xương khớp +• ĐD. Trần Minh Kha, khoa Ngoại tổng hợp +Kính mời quý bà con chú ý đón xem livestream tại: +• Fanpage Bệnh viện ĐKQT S.I.S Cần Thơ +• Fanpage S.I.S Charity Foundation (QUỸ TT BNN BỊ ĐQ KV.ĐBSCL) +🎁 Quà tặng đặc biệt: Khán giả đặt câu hỏi giao lưu trực tiếp sẽ có hội nhận Voucher 2 triệu đồng cho các gói khám sức khoẻ tại S.I.S! +====================================== + +● Để đặt lịch hẹn khám chữa bệnh MIỄN PHÍ: +► https://booking.sisvietnam.vn/booking + +Bệnh Viện Đa Khoa Quốc Tế S.I.S Cần Thơ: +🏥 397 Nguyễn Văn Cừ nối dài, P.An Bình, Q.Ninh Kiều, TP. Cần Thơ +--------------------- +© Bản quyền thuộc về Bệnh viện Đa khoa Quốc tế S.I.S Cần Thơ +© Copyright by S.I.S Hospital ☞ Do not Reup \ No newline at end of file diff --git a/Media/Livestream/Tuan4/embed.txt b/Media/Livestream/Tuan4/embed.txt new file mode 100644 index 00000000..acd64452 --- /dev/null +++ b/Media/Livestream/Tuan4/embed.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Media/Sách đột quỵ Ngang.png b/Media/Sách đột quỵ Ngang.png new file mode 100644 index 00000000..ef0e22d1 Binary files /dev/null and b/Media/Sách đột quỵ Ngang.png differ diff --git a/sis_charity_professional_v4.zip b/sis_charity_professional_v4.zip new file mode 100644 index 00000000..9cac9083 Binary files /dev/null and b/sis_charity_professional_v4.zip differ diff --git a/sis_charity_professional_v4/assets/Web2Artboard1.png:Zone.Identifier b/sis_charity_professional_v4/assets/Web2Artboard1.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sis_charity_professional_v4/assets/Web2Artboard1.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/Web2Artboard2.png:Zone.Identifier b/sis_charity_professional_v4/assets/Web2Artboard2.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sis_charity_professional_v4/assets/Web2Artboard2.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/Web2Artboard3.png:Zone.Identifier b/sis_charity_professional_v4/assets/Web2Artboard3.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sis_charity_professional_v4/assets/Web2Artboard3.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/Web2Artboard4.png:Zone.Identifier b/sis_charity_professional_v4/assets/Web2Artboard4.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sis_charity_professional_v4/assets/Web2Artboard4.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/Web2Artboard5.png:Zone.Identifier b/sis_charity_professional_v4/assets/Web2Artboard5.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sis_charity_professional_v4/assets/Web2Artboard5.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/Web2Artboard6.png:Zone.Identifier b/sis_charity_professional_v4/assets/Web2Artboard6.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sis_charity_professional_v4/assets/Web2Artboard6.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/Web2Artboard7.png:Zone.Identifier b/sis_charity_professional_v4/assets/Web2Artboard7.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sis_charity_professional_v4/assets/Web2Artboard7.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/Web2Artboard8.png:Zone.Identifier b/sis_charity_professional_v4/assets/Web2Artboard8.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sis_charity_professional_v4/assets/Web2Artboard8.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/Web2Artboard9.png:Zone.Identifier b/sis_charity_professional_v4/assets/Web2Artboard9.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sis_charity_professional_v4/assets/Web2Artboard9.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/logo.png b/sis_charity_professional_v4/assets/logo.png index 33261d64..0fd0c603 100644 Binary files a/sis_charity_professional_v4/assets/logo.png and b/sis_charity_professional_v4/assets/logo.png differ diff --git a/sis_charity_professional_v4/assets/logo.png:Zone.Identifier b/sis_charity_professional_v4/assets/logo.png:Zone.Identifier new file mode 100644 index 00000000..cc01ef70 Binary files /dev/null and b/sis_charity_professional_v4/assets/logo.png:Zone.Identifier differ diff --git a/sis_charity_professional_v4/assets/photo-01.jpg b/sis_charity_professional_v4/assets/photo-01.jpg index 7719fa05..b4c3c9bd 100644 Binary files a/sis_charity_professional_v4/assets/photo-01.jpg and b/sis_charity_professional_v4/assets/photo-01.jpg differ diff --git a/sis_charity_professional_v4/assets/photo-02.jpg b/sis_charity_professional_v4/assets/photo-02.jpg index de2e7885..262a374e 100644 Binary files a/sis_charity_professional_v4/assets/photo-02.jpg and b/sis_charity_professional_v4/assets/photo-02.jpg differ diff --git a/sis_charity_professional_v4/assets/photo-03.jpg b/sis_charity_professional_v4/assets/photo-03.jpg index 31002c86..598b6f7d 100644 Binary files a/sis_charity_professional_v4/assets/photo-03.jpg and b/sis_charity_professional_v4/assets/photo-03.jpg differ diff --git a/sis_charity_professional_v4/assets/photo-04.jpg b/sis_charity_professional_v4/assets/photo-04.jpg index 14ed0396..e5190201 100644 Binary files a/sis_charity_professional_v4/assets/photo-04.jpg and b/sis_charity_professional_v4/assets/photo-04.jpg differ diff --git a/sis_charity_professional_v4/assets/photo-05.jpg b/sis_charity_professional_v4/assets/photo-05.jpg index dcc73b08..85d4a375 100644 Binary files a/sis_charity_professional_v4/assets/photo-05.jpg and b/sis_charity_professional_v4/assets/photo-05.jpg differ diff --git a/sis_charity_professional_v4/assets/photo-06.jpg b/sis_charity_professional_v4/assets/photo-06.jpg index 2f730cb4..093421d9 100644 Binary files a/sis_charity_professional_v4/assets/photo-06.jpg and b/sis_charity_professional_v4/assets/photo-06.jpg differ diff --git a/sis_charity_professional_v4/assets/photo-07.jpg b/sis_charity_professional_v4/assets/photo-07.jpg index bd387154..489a743f 100644 Binary files a/sis_charity_professional_v4/assets/photo-07.jpg and b/sis_charity_professional_v4/assets/photo-07.jpg differ diff --git a/sis_charity_professional_v4/assets/photo-08.jpg b/sis_charity_professional_v4/assets/photo-08.jpg index a01066f0..d742c387 100644 Binary files a/sis_charity_professional_v4/assets/photo-08.jpg and b/sis_charity_professional_v4/assets/photo-08.jpg differ diff --git a/sis_charity_professional_v4/assets/photo-09.jpg b/sis_charity_professional_v4/assets/photo-09.jpg index fe60cc87..5b0f2fa6 100644 Binary files a/sis_charity_professional_v4/assets/photo-09.jpg and b/sis_charity_professional_v4/assets/photo-09.jpg differ diff --git a/sis_charity_professional_v4/index.html b/sis_charity_professional_v4/index.html index cdfa3c70..0c606f72 100644 --- a/sis_charity_professional_v4/index.html +++ b/sis_charity_professional_v4/index.html @@ -1,96 +1,178 @@ - + - - - - S.I.S Charity Foundation - - - -
-
- - - - -
- -
- +
+
+ + + diff --git a/sis_charity_professional_v4/style.css b/sis_charity_professional_v4/style.css index 17ccaf16..18e984c8 100644 --- a/sis_charity_professional_v4/style.css +++ b/sis_charity_professional_v4/style.css @@ -111,7 +111,7 @@ a{text-decoration:none;color:inherit} .photo-card.is-active:before{animation:shine 1.3s ease .25s} .photo-card.is-active{ left:50%;top:50%;width:min(480px, 58vw); - transform:translate(-50%,-50%) rotate(0deg) scale(1.06); + transform:translate(-50%,-50%) rotate(0deg) scale(1.06) !important; opacity:1; z-index:30; border-color:#fff; diff --git a/sisvietnamvn_main/check_json.sql b/sisvietnamvn_main/check_json.sql new file mode 100644 index 00000000..ea1e4ad1 --- /dev/null +++ b/sisvietnamvn_main/check_json.sql @@ -0,0 +1 @@ +SELECT data_json FROM sis_page_component WHERE component_id IN (SELECT id FROM sis_component_template WHERE slug = 'tabbed-livestream'); diff --git a/sisvietnamvn_main/check_posts.sql b/sisvietnamvn_main/check_posts.sql new file mode 100644 index 00000000..a0a83416 --- /dev/null +++ b/sisvietnamvn_main/check_posts.sql @@ -0,0 +1 @@ +SELECT id, slug, title, content FROM sis_post WHERE category_id = (SELECT id FROM sis_category WHERE slug = 'livestream'); diff --git a/sisvietnamvn_main/check_tables.sql b/sisvietnamvn_main/check_tables.sql new file mode 100644 index 00000000..6a959c2c --- /dev/null +++ b/sisvietnamvn_main/check_tables.sql @@ -0,0 +1 @@ +SELECT table_name FROM user_tables; diff --git a/sisvietnamvn_main/html_snippets/content_main_blocks/charity_v4_snippet.html b/sisvietnamvn_main/html_snippets/content_main_blocks/charity_v4_snippet.html new file mode 100644 index 00000000..cabaa3b2 --- /dev/null +++ b/sisvietnamvn_main/html_snippets/content_main_blocks/charity_v4_snippet.html @@ -0,0 +1,748 @@ + + +
+
+ + + + +
+ +
+ + +
+
+
+

Quỹ từ thiện bệnh nhân nghèo bị đột quỵ
khu vực Đồng bằng sông Cửu Long

+

S.I.S Charity Foundation

+
+ Stroke International Services Charity Foundation +
+ +
+ +

Sẻ chia yêu thương
đến bệnh nhân nghèo bị đột quỵ

+ +
+ + +
+
+
+ + diff --git a/sisvietnamvn_main/html_snippets/content_main_blocks/temp b/sisvietnamvn_main/html_snippets/content_main_blocks/temp index 0b378c8b..bae56d4d 100644 --- a/sisvietnamvn_main/html_snippets/content_main_blocks/temp +++ b/sisvietnamvn_main/html_snippets/content_main_blocks/temp @@ -1,180 +1,172 @@ - -
-
-
-
-

LiveStream tháng 07

-
-
- -
-
-
-

Tầm soát và phòng ngừa ung thư gan

-
-
-

Ung thư gan là một trong những bệnh ung thư có tỷ lệ tử vong hàng đầu tại Việt Nam. Đáng lo ngại, phần lớn người bệnh chỉ được phát hiện khi bệnh đã ở giai đoạn muộn, khi các cơ hội điều trị hiệu quả đã bị thu hẹp đáng kể.

-
- -
-
-
-

Your Campus Home

-
-
-

Choose from vibrant residential communities where students live, study, and build lasting friendships steps from the classroom.

-
- -
-
-
-

Food Worth Talking About

-
-
-

Discover why UMass dining is ranked #1 nationally—recognized for quality, variety, and sustainability.

-
- -
-
-
-

Amherst, Uncommon

-
-
-

A vibrant creative culture, great food, and the natural beauty of the Pioneer Valley come together to shape this town’s distinctive, welcoming spirit.

-
- -
-
-
-
-
-
-
- A UMass student plays ping pong. -
- -
- -
-
-
-
- A UMass student sits on her bed in a dorm room. -
- -
- -
-
-
-
- A student gets food at a UMass Amherst dining hall. -
- -
- -
-
-
-
- A UMass student holds a hote bag that reads "I Love Amherst." -
- -
- -
-
-
-
-
- - \ No newline at end of file + + .sbb-left { + justify-content: center; + } + + .sbb-right { + align-items: center; + padding-right: 0; + } + + .sbb-title { + font-size: 2.5rem; + } + + .sbb-features li { + text-align: left; + justify-content: flex-start; + } +} + + +
+
+
+ Cẩm nang sức khỏe phòng chống đột quỵ +
+
+
CẨM NANG SỨC KHỎE
+

PHÒNG CHỐNG ĐỘT QUỴ

+
Hiểu đúng – Phòng sớm – Sống khỏe mỗi ngày
+
    +
  • Kiến thức khoa học, dễ hiểu
  • +
  • Nhận biết sớm dấu hiệu – Xử trí kịp thời
  • +
  • Phòng ngừa hiệu quả – Giảm thiểu nguy cơ
  • +
  • Dành cho mọi lứa tuổi
  • +
+ TÌM HIỂU NGAY +
+
+
\ No newline at end of file diff --git a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/config/SecurityConfiguration.java b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/config/SecurityConfiguration.java index a7227b1e..28652b25 100644 --- a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/config/SecurityConfiguration.java +++ b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/config/SecurityConfiguration.java @@ -56,7 +56,7 @@ public class SecurityConfiguration { authz .requestMatchers(HttpMethod.GET, "/", "/about", "/flex-finish", "/tin-tuc", "/tin-tuc/**", "/lien-he", "/manage/login", "/css/**", "/images/**", "/js/**", "/vendor/**", "/fonts/**", "/login-assets/**", "/UMass*/**", "/Undergraduate*/**", - "/favicon.ico", "/favicons/**", "/flex-finish/**", "/contact-us/**", "/uploads/**", "/api/manage/snippets/**", "/page/**", "/news/article/**", "/post/**", "/error", + "/favicon.ico", "/favicons/**", "/flex-finish/**", "/contact-us/**", "/uploads/**", "/upload/**", "/api/manage/snippets/**", "/page/**", "/news/article/**", "/post/**", "/error", "/about-us", "/specialty", "/doctor", "/service", "/health-library", "/news-and-events", "/patient-support", "/medical-expert", "/umcers", "/bidding", "/contact-us", "/theme-assets/**") .permitAll() .requestMatchers(HttpMethod.POST, "/api/manage/media/upload").permitAll() diff --git a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/service/ComponentTemplateService.java b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/service/ComponentTemplateService.java index b2121e68..a17d4b59 100644 --- a/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/service/ComponentTemplateService.java +++ b/sisvietnamvn_main/src/main/java/com/sisvietnamvn/web/service/ComponentTemplateService.java @@ -224,6 +224,7 @@ public class ComponentTemplateService { itemHtml = itemHtml.replace("{{excerpt}}", safeExcerpt); itemHtml = itemHtml.replace("{{content}}", post.getContent() != null ? parseContentToHtml(post.getContent()) : ""); itemHtml = itemHtml.replace("{{metaDescription}}", post.getMetaDescription() != null ? org.springframework.web.util.HtmlUtils.htmlEscape(post.getMetaDescription()) : ""); + itemHtml = itemHtml.replace("{{{metaDescriptionRaw}}}", post.getMetaDescription() != null ? post.getMetaDescription() : ""); itemHtml = itemHtml.replace("{{featuredImageUrl}}", post.getFeaturedImage() != null ? post.getFeaturedImage() : ""); String dateStr = post.getCreatedDate() != null ? formatter.format(post.getCreatedDate()) : ""; itemHtml = itemHtml.replace("{{date}}", dateStr); diff --git a/sisvietnamvn_main/src/main/resources/static/css/custom.css b/sisvietnamvn_main/src/main/resources/static/css/custom.css index cc61641e..75f2908c 100644 --- a/sisvietnamvn_main/src/main/resources/static/css/custom.css +++ b/sisvietnamvn_main/src/main/resources/static/css/custom.css @@ -1,7 +1,7 @@ /* Custom CSS - This file has the highest priority and will override other styles */ /* ========================================================================== - Design System Tokens (Project-wide CSS Variables) + 1. Design System Tokens (Project-wide CSS Variables) ========================================================================== */ :root { /* Primary brand colors */ @@ -36,11 +36,27 @@ --radius-lg: 8px; } +/* ========================================================================== + 2. Global / Base Overrides + ========================================================================== */ [data-component-id="umass_base:tophat"] { background-color: transparent !important; } -/* Creates an overlay gradient on top of the ambient video */ +/* Navigation Container (Base) */ +.navigation-container { + display: flex; + align-items: center; + justify-content: flex-end; + gap: 1.5rem; + flex-grow: 1; +} + +/* ========================================================================== + 3. Component Styles (Global) + ========================================================================== */ + +/* --- Ambient Video --- */ .f--ambient-video { position: relative; } @@ -60,266 +76,7 @@ /* Ensures it sits above the video */ } -/* News Grid Tablet Layout */ -@media screen and (min-width: 769px) and (max-width: 1024px) { - .news-list { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 24px; - align-items: stretch; - } - .featured-grid__item { - height: 100%; - display: flex; - } - .featured-grid__item .news-card--featured { - display: flex; - flex-direction: column; - align-items: flex-start; - border: 1px solid #881C1C; - border-radius: 16px; - padding: 16px; - box-sizing: border-box; - width: 100%; - height: 100%; - gap: 16px; - background: #fff; - margin-bottom: 0 !important; - } - .featured-grid__item .news-card__image { - flex: none; - width: 100%; - aspect-ratio: 1 / 1; - margin-bottom: 0 !important; - } - .featured-grid__item .news-card__image > div { - height: 100%; - width: 100%; - } - .featured-grid__item .news-card__image img { - width: 100%; - height: 100%; - object-fit: cover; - object-position: center; - border-radius: 8px; - } - .featured-grid__item .news-card__content { - flex: 1; - display: flex; - flex-direction: column; - justify-content: flex-start; - min-width: 0; - padding: 0 !important; - margin: 0 !important; - } - .featured-grid__item .featured-grid__category { - margin-bottom: 12px; - } - .featured-grid__item .featured-grid__category a { - display: inline-block; - background-color: #f2f2f2; - color: #881C1C; - padding: 4px 8px; - border-radius: 4px; - font-size: 0.75rem; - font-weight: bold; - text-decoration: none; - text-transform: uppercase; - } - .featured-grid__item .news-card__title { - font-size: 1.1rem; - font-weight: 700; - margin-top: 0; - margin-bottom: 12px; - line-height: 1.4; - } - .featured-grid__item .news-card__title a { - color: #000; - text-decoration: none; - } - .featured-grid__item .news-card__title a:hover { - color: #881C1C; - } - .featured-grid__item .news-card__date { - margin-top: auto; - color: #881C1C; - font-size: 0.85rem; - font-weight: 500; - } -} - -/* News Grid Desktop Layout */ -@media screen and (min-width: 1025px){ - .news-list { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 24px; - align-items: stretch; - } - - .education-column .news-list { - grid-template-columns: repeat(3, 1fr); - } - - .featured-grid__item { - height: 100%; - display: flex; - } - .featured-grid__item .news-card--featured { - display: flex; - flex-direction: row; - align-items: flex-start; - border: 1px solid #881C1C; - border-radius: 16px; - padding: 16px; - box-sizing: border-box; - width: 100%; - height: 100%; - gap: 16px; - background: #fff; - margin-bottom: 0 !important; - } - .featured-grid__item .news-card__image { - flex: 0 0 170px; - width: 100%; - height: 170px; - margin-bottom: 0 !important; - } - .featured-grid__item .news-card__image > div { - height: 100%; - width: 100%; - } - .featured-grid__item .news-card__image img { - width: 100%; - height: 100%; - object-fit: cover; - object-position: center; - border-radius: 8px; - } - .featured-grid__item .news-card__content { - flex: 1; - display: flex; - flex-direction: column; - justify-content: flex-start; - min-width: 0; - padding: 0 !important; - margin: 0 !important; - } - .featured-grid__item .featured-grid__category { - margin-bottom: 12px; - } - .featured-grid__item .featured-grid__category a { - display: inline-block; - background-color: #f2f2f2; - color: #881C1C; - padding: 4px 8px; - border-radius: 4px; - font-size: 0.75rem; - font-weight: bold; - text-decoration: none; - text-transform: uppercase; - } - .featured-grid__item .news-card__title { - font-size: 1.1rem; - font-weight: 700; - margin-top: 0; - margin-bottom: 12px; - line-height: 1.4; - } - .featured-grid__item .news-card__title a { - color: #000; - text-decoration: none; - } - .featured-grid__item .news-card__title a:hover { - color: #881C1C; - } - .featured-grid__item .news-card__date { - margin-top: auto; - color: #881C1C; - font-size: 0.85rem; - font-weight: 500; - } -} - -/* ========================================================================== - Desktop Layouts (>= 1024px) - ========================================================================== */ -@media screen and (min-width: 1025px) { - /* Side-by-side layout for News and Events */ - .news-events-row { - display: flex; - flex-direction: row; - gap: 40px; - align-items: stretch; - } - .news-events-row > .news-column { - flex: 1.8; - min-width: 0; - } - .news-events-row > .events-column { - flex: 1; - min-width: 0; - } -} - -/* ========================================================================== - Navigation Container & Mobile Menu - ========================================================================== */ - -/* --- Desktop (>1024px) --- */ -.navigation-container { - display: flex; - align-items: center; - justify-content: flex-end; - gap: 1.5rem; - flex-grow: 1; -} - -/* Desktop: show horizontal menu, hide hamburger */ -@media (min-width: 1025px) { - #mobile-hamburger { - display: none !important; - } - #mobile-flyout-container { - display: flex !important; - align-items: center; - } - .primary-navigation { - display: flex; - align-items: center; - } - /* Desktop: hide arrow toggles and back buttons */ - .mc--main-menu .arrow-toggle, - .mc--main-menu .button-back, - .mc--main-menu .navigation-title { - display: none !important; - } - /* Desktop: horizontal main menu */ - .m--main-menu { - display: flex; - gap: 0; - list-style: none; - margin: 0; - padding: 0; - } - .m--main-menu > .menu-item > .link-arrow-wrapper > a { - text-transform: uppercase; - font-weight: 700; - padding: 10px 15px; - white-space: nowrap; - } -} - -/* --- Mobile (<= 768px) --- */ -@media (max-width: 768px) { - /* Hide ambient video on mobile to save bandwidth and use image fallback */ - .f--ambient-video, - .video-controls { - display: none !important; - } -} - -/* Override Tabbed Media Content text colors since background was changed to light gray */ +/* --- Tabbed Media Content --- */ .cc--tabbed-media-content .f--description p { color: #000000 !important; } @@ -327,7 +84,6 @@ color: var(--color-brand) !important; } -/* Style tab labels and borders to black */ .cc--tabbed-media-content .tab-labels-inner { border-bottom-color: #cccccc !important; /* light gray line for the tab row */ } @@ -340,13 +96,37 @@ border-bottom: 3px solid #000000 !important; /* solid black underline for active tab */ } -/* Center children inside tabbed-media-content-media-col */ .cc--tabbed-media-content .tabbed-media-content-media-col { align-items: center !important; justify-content: center !important; } -/* --- Mobile & Tablet (<=1024px) --- */ + +/* ========================================================================== + 4. Media Queries + ========================================================================== */ + +/* --- Mobile (<= 768px) --- */ +@media (max-width: 768px) { + /* Hide ambient video on mobile to save bandwidth and use image fallback */ + .f--ambient-video, + .video-controls { + display: none !important; + } + + .cc--tabbed-media-content { + .c--tabbed-media-content { + max-width: var(--max-width); + margin: 0 auto; + padding: var(--s2) var(--s1); + display: grid; + grid-template-columns: 1fr; + gap: var(--s2); + } +} +} + +/* --- Mobile & Tablet (<= 1024px) --- */ @media (max-width: 1024px) { .navigation-container { gap: 0.5rem; @@ -454,8 +234,6 @@ .arrow-toggle { background: none; border: none; - /* border-left: 1px solid #e0e0e0; */ - /* padding: 15px 20px; */ cursor: pointer; display: flex; align-items: center; @@ -469,8 +247,6 @@ transform: rotate(180deg); } - - /* Submenu list */ .submenu { list-style: none; @@ -516,8 +292,239 @@ } } -/* On Desktop, hide mobile-only elements */ -@media (min-width: 1366) { +/* --- Tablet Only (769px to 1024px) --- */ +@media screen and (min-width: 769px) and (max-width: 1024px) { + .news-list { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 24px; + align-items: stretch; + } + .featured-grid__item { + height: 100%; + display: flex; + } + .featured-grid__item .news-card--featured { + display: flex; + flex-direction: column; + align-items: flex-start; + border: 1px solid #881C1C; + border-radius: 16px; + padding: 16px; + box-sizing: border-box; + width: 100%; + height: 100%; + gap: 16px; + background: #fff; + margin-bottom: 0 !important; + } + .featured-grid__item .news-card__image { + flex: none; + width: 100%; + aspect-ratio: 1 / 1; + margin-bottom: 0 !important; + } + .featured-grid__item .news-card__image > div { + height: 100%; + width: 100%; + } + .featured-grid__item .news-card__image img { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center; + border-radius: 8px; + } + .featured-grid__item .news-card__content { + flex: 1; + display: flex; + flex-direction: column; + justify-content: flex-start; + min-width: 0; + padding: 0 !important; + margin: 0 !important; + } + .featured-grid__item .featured-grid__category { + margin-bottom: 12px; + } + .featured-grid__item .featured-grid__category a { + display: inline-block; + background-color: #f2f2f2; + color: #881C1C; + padding: 4px 8px; + border-radius: 4px; + font-size: 0.75rem; + font-weight: bold; + text-decoration: none; + text-transform: uppercase; + } + .featured-grid__item .news-card__title { + font-size: 1.1rem; + font-weight: 700; + margin-top: 0; + margin-bottom: 12px; + line-height: 1.4; + } + .featured-grid__item .news-card__title a { + color: #000; + text-decoration: none; + } + .featured-grid__item .news-card__title a:hover { + color: #881C1C; + } + .featured-grid__item .news-card__date { + margin-top: auto; + color: #881C1C; + font-size: 0.85rem; + font-weight: 500; + } +} + +/* --- Desktop (>= 1025px) --- */ +@media screen and (min-width: 1025px) { + /* News Grid */ + .news-list { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 24px; + align-items: stretch; + } + + .education-column .news-list { + grid-template-columns: repeat(3, 1fr); + } + + .featured-grid__item { + height: 100%; + display: flex; + } + .featured-grid__item .news-card--featured { + display: flex; + flex-direction: row; + align-items: flex-start; + border: 1px solid #881C1C; + border-radius: 16px; + padding: 16px; + box-sizing: border-box; + width: 100%; + height: 100%; + gap: 16px; + background: #fff; + margin-bottom: 0 !important; + } + .featured-grid__item .news-card__image { + flex: 0 0 170px; + width: 100%; + height: 170px; + margin-bottom: 0 !important; + } + .featured-grid__item .news-card__image > div { + height: 100%; + width: 100%; + } + .featured-grid__item .news-card__image img { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center; + border-radius: 8px; + } + .featured-grid__item .news-card__content { + flex: 1; + display: flex; + flex-direction: column; + justify-content: flex-start; + min-width: 0; + padding: 0 !important; + margin: 0 !important; + } + .featured-grid__item .featured-grid__category { + margin-bottom: 12px; + } + .featured-grid__item .featured-grid__category a { + display: inline-block; + background-color: #f2f2f2; + color: #881C1C; + padding: 4px 8px; + border-radius: 4px; + font-size: 0.75rem; + font-weight: bold; + text-decoration: none; + text-transform: uppercase; + } + .featured-grid__item .news-card__title { + font-size: 1.1rem; + font-weight: 700; + margin-top: 0; + margin-bottom: 12px; + line-height: 1.4; + } + .featured-grid__item .news-card__title a { + color: #000; + text-decoration: none; + } + .featured-grid__item .news-card__title a:hover { + color: #881C1C; + } + .featured-grid__item .news-card__date { + margin-top: auto; + color: #881C1C; + font-size: 0.85rem; + font-weight: 500; + } + + /* Side-by-side layout for News and Events */ + .news-events-row { + display: flex; + flex-direction: row; + gap: 40px; + align-items: stretch; + } + .news-events-row > .news-column { + flex: 1.8; + min-width: 0; + } + .news-events-row > .events-column { + flex: 1; + min-width: 0; + } + + /* Navigation Container */ + #mobile-hamburger { + display: none !important; + } + #mobile-flyout-container { + display: flex !important; + align-items: center; + } + .primary-navigation { + display: flex; + align-items: center; + } + /* Hide arrow toggles and back buttons */ + .mc--main-menu .arrow-toggle, + .mc--main-menu .button-back, + .mc--main-menu .navigation-title { + display: none !important; + } + /* Horizontal main menu */ + .m--main-menu { + display: flex; + gap: 0; + list-style: none; + margin: 0; + padding: 0; + } + .m--main-menu > .menu-item > .link-arrow-wrapper > a { + text-transform: uppercase; + font-weight: 700; + padding: 10px 15px; + white-space: nowrap; + } +} + +/* --- Large Desktop (>= 1366px) --- */ +@media screen and (min-width: 1366px) { .mobile-only { display: none !important; } diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard1.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard1.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard1.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard2.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard2.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard2.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard3.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard3.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard3.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard4.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard4.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard4.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard5.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard5.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard5.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard6.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard6.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard6.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard7.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard7.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard7.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard8.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard8.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard8.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard9.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard9.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/Web2Artboard9.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/logo.png b/sisvietnamvn_main/src/main/resources/static/upload/charity/logo.png new file mode 100644 index 00000000..0fd0c603 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/logo.png differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/logo.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity/logo.png:Zone.Identifier new file mode 100644 index 00000000..cc01ef70 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/logo.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-01.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-01.jpg new file mode 100644 index 00000000..b4c3c9bd Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-01.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-02.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-02.jpg new file mode 100644 index 00000000..262a374e Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-02.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-03.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-03.jpg new file mode 100644 index 00000000..598b6f7d Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-03.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-04.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-04.jpg new file mode 100644 index 00000000..e5190201 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-04.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-05.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-05.jpg new file mode 100644 index 00000000..85d4a375 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-05.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-06.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-06.jpg new file mode 100644 index 00000000..093421d9 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-06.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-07.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-07.jpg new file mode 100644 index 00000000..489a743f Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-07.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-08.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-08.jpg new file mode 100644 index 00000000..d742c387 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-08.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-09.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-09.jpg new file mode 100644 index 00000000..5b0f2fa6 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/photo-09.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/slogan.png b/sisvietnamvn_main/src/main/resources/static/upload/charity/slogan.png new file mode 100644 index 00000000..9151552c Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/slogan.png differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity/title.png b/sisvietnamvn_main/src/main/resources/static/upload/charity/title.png new file mode 100644 index 00000000..edc80b22 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity/title.png differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard1.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard1.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard1.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard2.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard2.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard2.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard3.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard3.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard3.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard4.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard4.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard4.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard5.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard5.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard5.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard6.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard6.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard6.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard7.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard7.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard7.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard8.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard8.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard8.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard9.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard9.png:Zone.Identifier new file mode 100644 index 00000000..d6c1ec68 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/Web2Artboard9.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/logo.png b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/logo.png new file mode 100644 index 00000000..0fd0c603 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/logo.png differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/logo.png:Zone.Identifier b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/logo.png:Zone.Identifier new file mode 100644 index 00000000..cc01ef70 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/logo.png:Zone.Identifier differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-01.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-01.jpg new file mode 100644 index 00000000..b4c3c9bd Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-01.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-02.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-02.jpg new file mode 100644 index 00000000..262a374e Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-02.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-03.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-03.jpg new file mode 100644 index 00000000..598b6f7d Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-03.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-04.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-04.jpg new file mode 100644 index 00000000..e5190201 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-04.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-05.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-05.jpg new file mode 100644 index 00000000..85d4a375 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-05.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-06.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-06.jpg new file mode 100644 index 00000000..093421d9 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-06.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-07.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-07.jpg new file mode 100644 index 00000000..489a743f Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-07.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-08.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-08.jpg new file mode 100644 index 00000000..d742c387 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-08.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-09.jpg b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-09.jpg new file mode 100644 index 00000000..5b0f2fa6 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/photo-09.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/slogan.png b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/slogan.png new file mode 100644 index 00000000..9151552c Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/slogan.png differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/title.png b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/title.png new file mode 100644 index 00000000..edc80b22 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/charity_v4/title.png differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan1_livestream_tuan1.jpg b/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan1_livestream_tuan1.jpg new file mode 100644 index 00000000..0f605732 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan1_livestream_tuan1.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan2_KlYevjYrBeI-maxresdefault.jpg b/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan2_KlYevjYrBeI-maxresdefault.jpg new file mode 100644 index 00000000..31058f7f Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan2_KlYevjYrBeI-maxresdefault.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan3_JqEJ6PQYjkA-maxresdefault.jpg b/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan3_JqEJ6PQYjkA-maxresdefault.jpg new file mode 100644 index 00000000..b1cb22b0 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan3_JqEJ6PQYjkA-maxresdefault.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan4_Mn-dsRNXZwU-maxresdefault.jpg b/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan4_Mn-dsRNXZwU-maxresdefault.jpg new file mode 100644 index 00000000..51938e02 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/livestream/tuan4_Mn-dsRNXZwU-maxresdefault.jpg differ diff --git a/sisvietnamvn_main/src/main/resources/static/upload/sach-dot-quy-ngang.png b/sisvietnamvn_main/src/main/resources/static/upload/sach-dot-quy-ngang.png new file mode 100644 index 00000000..ef0e22d1 Binary files /dev/null and b/sisvietnamvn_main/src/main/resources/static/upload/sach-dot-quy-ngang.png differ diff --git a/sisvietnamvn_main/src/main/resources/templates/themes/umass/footer.html b/sisvietnamvn_main/src/main/resources/templates/themes/umass/footer.html index 292238db..671b618b 100644 --- a/sisvietnamvn_main/src/main/resources/templates/themes/umass/footer.html +++ b/sisvietnamvn_main/src/main/resources/templates/themes/umass/footer.html @@ -4,189 +4,190 @@