1- <?php
1+ <?php namespace ProcessWire;
2+
3+ use DateTime;
4+ use PDO;
5+
26
37/**
48 * ProcessWire Webmentions Fieldtype
59 *
610 * A field that stores webmentions for a single Page.
711 *
8- * @author Gregor Morrill, http ://gregorlove.com
9- * @see http ://indiewebcamp.com/webmention
12+ * @author Gregor Morrill, https ://gregorlove.com
13+ * @see https ://webmention.net/
1014 */
1115
1216$dirname = dirname(__FILE__);
@@ -16,6 +20,13 @@ require_once($dirname . '/WebmentionList.php');
1620
1721class FieldtypeWebmentions extends FieldtypeMulti
1822{
23+ /**
24+ * Current database schema fieldtype tables
25+ * @var int SCHEMA_VERSION
26+ */
27+ const SCHEMA_VERSION = 1;
28+
29+
1930 /**
2031 * Provide module information to ProcessWire
2132 * @access public
@@ -25,7 +36,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
2536 {
2637 return array(
2738 'title' => __('Webmentions', __FILE__),
28- 'version' => 111 ,
39+ 'version' => 200 ,
2940 'summary' => __('Field that stores webmentions for a single Page', __FILE__),
3041 );
3142 } # end method getModuleInfo()
@@ -57,7 +68,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
5768 $webmentionArray = new WebmentionArray();
5869 $webmentionArray->setPage($page);
5970 $webmentionArray->setField($field);
60- $webmentionArray->setTrackChanges(TRUE );
71+ $webmentionArray->setTrackChanges(true );
6172 return $webmentionArray;
6273 } # end method getBlankValue()
6374
@@ -108,7 +119,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
108119
109120 if ( !$inputfield )
110121 {
111- return NULL ;
122+ return null ;
112123 }
113124
114125 $inputfield->class = $this->className();
@@ -185,7 +196,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
185196 $webmention->set($key, $val);
186197 }
187198
188- $webmention->resetTrackChanges(TRUE );
199+ $webmention->resetTrackChanges(true );
189200 $webmentionArray->add($webmention);
190201 }
191202
@@ -194,7 +205,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
194205 $webmentionArray->sort('-updated');
195206 }
196207
197- $webmentionArray->resetTrackChanges(TRUE );
208+ $webmentionArray->resetTrackChanges(true );
198209
199210 return $webmentionArray;
200211 } # end method ___wakeupValue()
@@ -294,33 +305,54 @@ class FieldtypeWebmentions extends FieldtypeMulti
294305 */
295306 public function getDatabaseSchema(Field $field)
296307 {
297- $schemaVersion = (int) $field->schemaVersion;
308+ $table_exists = in_array($field->getTable(), $this->database->getTables());
309+ $current_schema_version = (int) $field->schemaVersion;
310+ $new_schema_version = null;
298311
299- if ( !$schemaVersion )
312+ # if: table exists; perform schema updates as necessary
313+ if ( $table_exists )
300314 {
301- $database = $this->wire('database');
302- $table = $database->escapeTable($field->getTable());
303315
304- try
305- {
306- $database->query("ALTER TABLE `$table` ADD content_plain TEXT");
307- $schemaVersion = 1;
308- }
309- catch ( Exception $e )
316+ # update to schema version 1
317+ if ( $current_schema_version < 1 )
310318 {
319+ $table = $this->database->escapeTable($field->getTable());
320+
321+ try
322+ {
323+ $this->database->query("ALTER TABLE `$table` ADD content_plain TEXT");
324+ $new_schema_version = 1;
325+ }
326+ catch ( Exception $e )
327+ {
328+ $this->message('Altering schema failed: %s', $e->getMessage(), Notice::log);
329+ }
330+
311331 }
312332
313333 }
334+ # else: table doesn't exist yet; use latest schema
335+ else
336+ {
337+ $this->message(sprintf('Setting initial schema version of field “%s” to: %d', $field->name, self::SCHEMA_VERSION), Notice::log);
338+ $field->schemaVersion = self::SCHEMA_VERSION;
339+ $field->save();
340+ } # end if
314341
315- if ( ((int) $field->schemaVersion) < $schemaVersion )
342+ # if: update schema version if necessary
343+ if ( $current_schema_version < $new_schema_version )
316344 {
317- $this->message("Updating schema version of '{$field->name}' from $field->schemaVersion to $schemaVersion", Notice::log);
318- $field->schemaVersion = $schemaVersion;
345+ $message = sprintf('Updating schema version of field “%s” from: %d to: %d',
346+ $field->name,
347+ $current_schema_version,
348+ $new_schema_version
349+ );
350+ $this->message($message, Notice::log);
351+ $field->schemaVersion = $new_schema_version;
319352 $field->save();
320353 }
321354
322- $schemaVersion = $field->schemaVersion;
323-
355+ $current_schema_version = $field->schemaVersion;
324356 $schema = parent::getDatabaseSchema($field);
325357
326358 $schema['data'] = 'text';
@@ -335,7 +367,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
335367 $schema['is_rsvp'] = "tinyint(1) unsigned NOT NULL DEFAULT '0'";
336368 $schema['content'] = 'text';
337369
338- if ( $schemaVersion > 0 )
370+ if ( $current_schema_version > 0 )
339371 {
340372 $schema['content_plain'] = 'text';
341373 }
@@ -354,7 +386,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
354386 $schema['status'] = "tinyint(3) NOT NULL DEFAULT '0'";
355387 $schema['visibility'] = "tinyint(3) NOT NULL DEFAULT '0'";
356388 $schema['created'] = "timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'";
357- $schema['deleted'] = "timestamp NULL DEFAULT NULL ";
389+ $schema['deleted'] = "timestamp null DEFAULT null ";
358390
359391 $schema['keys']['primary'] = "PRIMARY KEY (`id`)";
360392 $schema['keys']['pages_id_sort'] = "KEY `pages_id_sort` (`pages_id`, `sort`)";
@@ -377,7 +409,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
377409
378410 if ( !$page->id || !$field->id )
379411 {
380- return FALSE ;
412+ return false ;
381413 }
382414
383415 $allItems = $page->get($field->name);
@@ -386,12 +418,12 @@ class FieldtypeWebmentions extends FieldtypeMulti
386418
387419 if ( !$allItems )
388420 {
389- return FALSE ;
421+ return false ;
390422 }
391423
392424 if ( !$allItems->isChanged() && !$page->isChanged($field->name) )
393425 {
394- return TRUE ;
426+ return true ;
395427 }
396428
397429 $itemsRemoved = $allItems->getItemsRemoved();
@@ -436,7 +468,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
436468
437469 if ( !count($items) )
438470 {
439- return TRUE ;
471+ return true ;
440472 }
441473
442474 $values = $this->sleepValue($page, $field, $items);
@@ -483,14 +515,14 @@ class FieldtypeWebmentions extends FieldtypeMulti
483515 $sql .= 'sort=' . ++$maxSort;
484516 }
485517
486- if ( FALSE === $database->exec($sql) )
518+ if ( false === $database->exec($sql) )
487519 {
488520 $this->error("Error saving item $value[id] in savePageField", Notice::log);
489521 }
490522
491523 }
492524
493- return TRUE ;
525+ return true ;
494526 } # end method ___savePageField()
495527
496528
@@ -574,14 +606,14 @@ class FieldtypeWebmentions extends FieldtypeMulti
574606
575607
576608 /**
577- * For FieldtypeMulti interface, return NULL to indicate that the field is not auto-joinable
609+ * For FieldtypeMulti interface, return null to indicate that the field is not auto-joinable
578610 * @param Field $field
579611 * @param DatabaseQuerySelect $query
580612 * @access public
581613 */
582614 public function getLoadQueryAutojoin(Field $field, DatabaseQuerySelect $query)
583615 {
584- return NULL ;
616+ return null ;
585617 } # end method getLoadQueryAutojoin()
586618
587619
@@ -611,7 +643,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
611643
612644 $limit = 10;
613645 $start = 0;
614- $desc = TRUE ;
646+ $desc = true ;
615647 $sort = 'created';
616648 $database = $this->wire('database');
617649 $table = $database->escapeTable($field->getTable());
@@ -726,7 +758,7 @@ class FieldtypeWebmentions extends FieldtypeMulti
726758 $webmentionPages[$page->id] = $page;
727759 }
728760
729- $webmention->resetTrackChanges(TRUE );
761+ $webmention->resetTrackChanges(true );
730762 $webmentions->add($webmention);
731763
732764 if ( $page->id )
@@ -747,3 +779,4 @@ class FieldtypeWebmentions extends FieldtypeMulti
747779 } # end method find()
748780
749781}
782+
0 commit comments