1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
<?php /** * WPSEO plugin file. * * @package WPSEO\Admin\Links */
/** * Represents the state of the table being accessible. */ class WPSEO_Link_Table_Accessible {
/** * @var string */ const ACCESSIBLE = '0';
/** * @var string */ const INACCESSBILE = '1';
/** * Checks if the given table name exists. * * @return bool True when table is accessible. */ public static function is_accessible() { $value = get_transient( self::transient_name() );
// If the value is not set, check the table. if ( false === $value ) { return self::check_table(); }
return $value === self::ACCESSIBLE; }
/** * Sets the transient value to 1, to indicate the table is not accessible. * * @return void */ public static function set_inaccessible() { set_transient( self::transient_name(), self::INACCESSBILE, HOUR_IN_SECONDS ); }
/** * Removes the transient. * * @return void */ public static function cleanup() { delete_transient( self::transient_name() ); }
/** * Sets the transient value to 0, to indicate the table is accessible. * * @return void */ protected static function set_accessible() { /* * Prefer to set a 0 timeout, but if the timeout was set before WordPress will not delete the transient * correctly when overridden with a zero value. * * Setting a YEAR_IN_SECONDS instead. */ set_transient( self::transient_name(), self::ACCESSIBLE, YEAR_IN_SECONDS ); }
/** * Checks if the table exists if not, set the transient to indicate the inaccessible table. * * @return bool True if table is accessible. */ protected static function check_table() { global $wpdb;
$storage = new WPSEO_Link_Storage(); $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $storage->get_table_name() ); if ( $wpdb->get_var( $query ) !== $storage->get_table_name() ) { self::set_inaccessible(); return false; }
self::set_accessible(); return true; }
/** * Returns the name of the transient. * * @return string The name of the transient to use. */ protected static function transient_name() { return 'wpseo_link_table_inaccessible'; } }
|