3 // Check if YOURLS is installed
\r
4 function yourls_is_installed() {
\r
5 static $is_installed = false;
\r
6 if (!$is_installed) {
\r
8 $is_installed = $ydb->get_var('SELECT next_id FROM '.YOURLS_DB_TABLE_NEXTDEC);
\r
10 return (bool)$is_installed;
\r
13 // Check if mod_rewrite is enabled
\r
14 function yourls_check_mod_rewrite() {
\r
15 return yourls_apache_mod_loaded('mod_rewrite');
\r
18 // Check if extension cURL is enabled
\r
19 function yourls_check_curl() {
\r
20 return function_exists('curl_init');
\r
23 // Check if extension BC Math is enabled
\r
24 function yourls_check_bcmath() {
\r
25 return function_exists('bccomp');
\r
28 // Check if server has MySQL 4.1+
\r
29 function yourls_check_database_version() {
\r
31 return ( version_compare( '4.1', $ydb->mysql_version() ) <= 0 );
\r
34 // Check if PHP > 4.3
\r
35 function yourls_check_php_version() {
\r
36 return ( version_compare( '4.3', phpversion() ) <= 0 );
\r
39 // Check if server is an Apache
\r
40 function yourls_is_apache() {
\r
42 strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false
\r
43 || strpos($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') !== false
\r
47 // Check if module exists in Apache config. Input string eg 'mod_rewrite', return true or $default
\r
48 function yourls_apache_mod_loaded($mod, $default = false) {
\r
49 if ( !yourls_is_apache() )
\r
52 if ( function_exists('apache_get_modules') ) {
\r
53 $mods = apache_get_modules();
\r
54 if ( in_array($mod, $mods) )
\r
56 } elseif ( function_exists('phpinfo') ) {
\r
59 $phpinfo = ob_get_clean();
\r
60 if ( false !== strpos($phpinfo, $mod) )
\r
66 // Create .htaccess. Returns boolean
\r
67 function yourls_create_htaccess() {
\r
68 $host = parse_url( YOURLS_SITE );
\r
69 $path = ( isset( $host['path'] ) ? $host['path'] : '' );
\r
72 '<IfModule mod_rewrite.c>',
\r
74 'RewriteBase '.$path.'/',
\r
75 'RewriteCond %{REQUEST_FILENAME} !-f',
\r
76 'RewriteCond %{REQUEST_FILENAME} !-d',
\r
77 'RewriteRule ^([0-9A-Za-z]+)/?$ '.$path.'/yourls-go.php?id=$1 [L]',
\r
81 $filename = dirname(dirname(__FILE__)).'/.htaccess';
\r
83 return ( yourls_insert_with_markers( $filename, 'YOURLS', $content ) );
\r
86 // Inserts $insertion (text in an array of lines) into $filename (.htaccess) between BEGIN/END $marker block. Returns bool. Stolen from WP
\r
87 function yourls_insert_with_markers( $filename, $marker, $insertion ) {
\r
88 if (!file_exists( $filename ) || is_writeable( $filename ) ) {
\r
89 if (!file_exists( $filename ) ) {
\r
92 $markerdata = explode( "\n", implode( '', file( $filename ) ) );
\r
95 if ( !$f = @fopen( $filename, 'w' ) )
\r
99 if ( $markerdata ) {
\r
101 foreach ( $markerdata as $n => $markerline ) {
\r
102 if (strpos($markerline, '# BEGIN ' . $marker) !== false)
\r
105 if ( $n + 1 < count( $markerdata ) )
\r
106 fwrite( $f, "{$markerline}\n" );
\r
108 fwrite( $f, "{$markerline}" );
\r
110 if (strpos($markerline, '# END ' . $marker) !== false) {
\r
111 fwrite( $f, "# BEGIN {$marker}\n" );
\r
112 if ( is_array( $insertion ))
\r
113 foreach ( $insertion as $insertline )
\r
114 fwrite( $f, "{$insertline}\n" );
\r
115 fwrite( $f, "# END {$marker}\n" );
\r
122 fwrite( $f, "\n# BEGIN {$marker}\n" );
\r
123 foreach ( $insertion as $insertline )
\r
124 fwrite( $f, "{$insertline}\n" );
\r
125 fwrite( $f, "# END {$marker}\n" );
\r
134 // Create MySQL tables. Return array( 'success' => array of success strings, 'errors' => array of error strings )
\r
135 function yourls_create_sql_tables() {
\r
138 $error_msg = array();
\r
139 $success_msg = array();
\r
141 // Create Table Query
\r
142 $create_tables = array();
\r
143 $create_tables[YOURLS_DB_TABLE_URL] =
\r
144 'CREATE TABLE IF NOT EXISTS `'.YOURLS_DB_TABLE_URL.'` ('.
\r
145 '`keyword` varchar(200) NOT NULL,'.
\r
146 '`url` VARCHAR(200) NOT NULL,'.
\r
147 '`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,'.
\r
148 '`ip` VARCHAR(41) NOT NULL,'.
\r
149 '`clicks` INT(10) UNSIGNED NOT NULL,'.
\r
150 'PRIMARY KEY (`keyword`)'.
\r
151 ') ENGINE=MyISAM DEFAULT CHARSET=utf8 ;';
\r
153 $create_tables[YOURLS_DB_TABLE_OPTIONS] =
\r
154 'CREATE TABLE IF NOT EXISTS `'.YOURLS_DB_TABLE_OPTIONS.'` ('.
\r
155 '`option_id` bigint(20) unsigned NOT NULL auto_increment,'.
\r
156 '`option_name` varchar(64) NOT NULL default "",'.
\r
157 '`option_value` longtext NOT NULL,'.
\r
158 'PRIMARY KEY (`option_id`,`option_name`),'.
\r
159 'KEY `option_name` (`option_name`)'.
\r
160 ') ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;';
\r
162 $create_tables[YOURLS_DB_TABLE_LOG] =
\r
163 'CREATE TABLE IF NOT EXISTS `'.YOURLS_DB_TABLE_LOG.'` ('.
\r
164 '`click_id` int(11) NOT NULL auto_increment,'.
\r
165 '`click_time` datetime NOT NULL,'.
\r
166 '`shorturl` varchar(200) NOT NULL,'.
\r
167 '`referrer` varchar(200) NOT NULL,'.
\r
168 '`user_agent` varchar(255) NOT NULL,'.
\r
169 '`ip_address` varchar(41) NOT NULL,'.
\r
170 '`country_code` char(2) NOT NULL,'.
\r
171 'PRIMARY KEY (`click_id`),'.
\r
172 'KEY `shorturl` (`shorturl`,`referrer`,`country_code`)'.
\r
173 ') ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;';
\r
176 // Insert Initial Records
\r
177 $insert_queries = array();
\r
178 $insert_queries[] = 'INSERT INTO '.YOURLS_DB_TABLE_OPTIONS.' VALUES (1, "next_id", 1)';
\r
179 $insert_queries[] = 'INSERT INTO '.YOURLS_DB_TABLE_OPTIONS.' VALUES (2, "version", '.YOURLS_VERSION.')';
\r
180 $insert_queries[] = 'INSERT INTO '.YOURLS_DB_TABLE_OPTIONS.' VALUES (3, "db_version", '.YOURLS_DB_VERSION.')';
\r
182 $create_table_count = 0;
\r
183 $insert_query_count = 0;
\r
185 //$ydb->show_errors = false;
\r
188 foreach ( $create_tables as $table_name => $table_query ) {
\r
189 $ydb->query($table_query);
\r
190 $create_success = $ydb->query("SHOW TABLES LIKE '$table_name'");
\r
191 if($create_success) {
\r
192 $create_table_count++;
\r
193 $success_msg[] = "Table '$table_name' created.";
\r
195 $error_msg[] = "Error creating table '$table_name'.";
\r
199 // Insert data into tables
\r
200 foreach ( $insert_queries as $insert_query ) {
\r
201 $insert_success = $ydb->query( $insert_query );
\r
202 if( $insert_success ) {
\r
203 $insert_query_count++;
\r
204 $success_msg[] = 'Query '.$insert_query_count.'/'.sizeof($insert_queries).' executed successfully.';
\r
206 $error_msg[] = 'Error executing '.$insert_query_count.'/'.sizeof($insert_queries).'.';
\r
210 // Check results of operations
\r
211 if ( sizeof($create_tables) == $create_table_count && sizeof($insert_queries) == $insert_query_count ) {
\r
212 $success_msg[] = 'YOURLS tables successfully created.';
\r
214 $error_msg[] = "Error creating YOURLS tables.";
\r
217 return array( 'success' => $success_msg, 'error' => $error_msg );
\r