|
@@ -55,14 +55,23 @@ class Publication {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public function getBySlug($slug) {
|
|
public function getBySlug($slug) {
|
|
|
- $sql = "SELECT p.*, GROUP_CONCAT(c.name) as categories
|
|
|
|
|
- FROM publications p
|
|
|
|
|
- LEFT JOIN publication_categories pc ON p.id = pc.publication_id
|
|
|
|
|
- LEFT JOIN categories c ON pc.category_id = c.id
|
|
|
|
|
- WHERE p.slug = ?
|
|
|
|
|
- GROUP BY p.id";
|
|
|
|
|
-
|
|
|
|
|
- $publication = $this->db->fetch($sql, [$slug]);
|
|
|
|
|
|
|
+ // Try to get by slug first
|
|
|
|
|
+ try {
|
|
|
|
|
+ $sql = "SELECT p.*, GROUP_CONCAT(c.name) as categories
|
|
|
|
|
+ FROM publications p
|
|
|
|
|
+ LEFT JOIN publication_categories pc ON p.id = pc.publication_id
|
|
|
|
|
+ LEFT JOIN categories c ON pc.category_id = c.id
|
|
|
|
|
+ WHERE p.slug = ?
|
|
|
|
|
+ GROUP BY p.id";
|
|
|
|
|
+
|
|
|
|
|
+ $publication = $this->db->fetch($sql, [$slug]);
|
|
|
|
|
+ } catch (Exception $e) {
|
|
|
|
|
+ // If slug column doesn't exist, fall back to ID-based lookup
|
|
|
|
|
+ if (strpos($e->getMessage(), "Unknown column 'slug'") !== false) {
|
|
|
|
|
+ return $this->getById($slug);
|
|
|
|
|
+ }
|
|
|
|
|
+ throw $e;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
if ($publication && $publication['categories']) {
|
|
if ($publication && $publication['categories']) {
|
|
|
$publication['categories_array'] = explode(',', $publication['categories']);
|
|
$publication['categories_array'] = explode(',', $publication['categories']);
|
|
@@ -77,9 +86,17 @@ class Publication {
|
|
|
$this->db->beginTransaction();
|
|
$this->db->beginTransaction();
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- // Generate slug from title
|
|
|
|
|
- $slug = $this->generateSlug($data['title']);
|
|
|
|
|
- $data['slug'] = $slug;
|
|
|
|
|
|
|
+ // Try to generate and add slug from title
|
|
|
|
|
+ try {
|
|
|
|
|
+ $slug = $this->generateSlug($data['title']);
|
|
|
|
|
+ $data['slug'] = $slug;
|
|
|
|
|
+ } catch (Exception $e) {
|
|
|
|
|
+ // If slug column doesn't exist, skip slug generation
|
|
|
|
|
+ if (strpos($e->getMessage(), "Unknown column 'slug'") === false) {
|
|
|
|
|
+ throw $e;
|
|
|
|
|
+ }
|
|
|
|
|
+ // Continue without slug
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// Set published_at if status is published
|
|
// Set published_at if status is published
|
|
|
if ($data['status'] === 'published' && !isset($data['published_at'])) {
|
|
if ($data['status'] === 'published' && !isset($data['published_at'])) {
|
|
@@ -106,9 +123,17 @@ class Publication {
|
|
|
$this->db->beginTransaction();
|
|
$this->db->beginTransaction();
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- // Update slug if title changed
|
|
|
|
|
|
|
+ // Try to update slug if title changed
|
|
|
if (isset($data['title'])) {
|
|
if (isset($data['title'])) {
|
|
|
- $data['slug'] = $this->generateSlug($data['title'], $id);
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ $data['slug'] = $this->generateSlug($data['title'], $id);
|
|
|
|
|
+ } catch (Exception $e) {
|
|
|
|
|
+ // If slug column doesn't exist, skip slug generation
|
|
|
|
|
+ if (strpos($e->getMessage(), "Unknown column 'slug'") === false) {
|
|
|
|
|
+ throw $e;
|
|
|
|
|
+ }
|
|
|
|
|
+ // Continue without slug
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Set published_at if status changed to published
|
|
// Set published_at if status changed to published
|