164 lines
4.1 KiB
PHP
164 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace ElfsightYoutubeGalleryApi\Core;
|
|
|
|
class Helper {
|
|
public $pluginSlug;
|
|
|
|
public function __construct($pluginSlug) {
|
|
$this->pluginSlug = $pluginSlug;
|
|
}
|
|
|
|
public function getOptionName($name, $delimiter = '_') {
|
|
return str_replace('-', $delimiter, $this->pluginSlug) . ($name ? $delimiter . $name : '');
|
|
}
|
|
|
|
public function getPluginSlug() {
|
|
return $this->pluginSlug;
|
|
}
|
|
|
|
public function getTableName($name) {
|
|
global $wpdb;
|
|
|
|
return esc_sql($wpdb->prefix . $this->getOptionName($name));
|
|
}
|
|
|
|
public function tableExist($table_name) {
|
|
global $wpdb;
|
|
|
|
return !!$wpdb->get_var($wpdb->prepare(
|
|
"SHOW TABLES LIKE %s",
|
|
$table_name
|
|
));
|
|
}
|
|
|
|
public function tableCreate($table_name, $columns) {
|
|
global $wpdb;
|
|
|
|
$columns['updated_at'] = 'int(12)';
|
|
$columns_query = '';
|
|
|
|
foreach ($columns as $key => $type) {
|
|
$columns_query .= '`' . $key . '` ' . $type . ' NOT NULL,';
|
|
}
|
|
|
|
return $wpdb->query(
|
|
"CREATE TABLE $table_name (`id` int(11) unsigned NOT NULL AUTO_INCREMENT, $columns_query PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;"
|
|
);
|
|
}
|
|
|
|
public function tableRowGet($table_name, $where) {
|
|
global $wpdb;
|
|
|
|
list ($key, $value) = $this->getKeyValue($where);
|
|
|
|
return $wpdb->get_row($wpdb->prepare(
|
|
"SELECT * FROM $table_name WHERE `$key` = %s",
|
|
esc_sql($value)
|
|
), ARRAY_A);
|
|
}
|
|
|
|
public function tableRowExist($table_name, $where) {
|
|
global $wpdb;
|
|
|
|
list ($key, $value) = $this->getKeyValue($where);
|
|
|
|
return !!$wpdb->get_var($wpdb->prepare(
|
|
"SELECT COUNT(*) FROM $table_name WHERE `$key` = %s",
|
|
esc_sql($value)
|
|
));
|
|
}
|
|
|
|
public function getKeyValue($array) {
|
|
$keys = array_keys($array);
|
|
$values = array_values($array);
|
|
return array($keys[0], $values[0]);
|
|
}
|
|
|
|
public function tableRowUpdate($table_name, $data, $where) {
|
|
global $wpdb;
|
|
|
|
$data['updated_at'] = time();
|
|
|
|
if ($this->tableRowExist($table_name, $where)) {
|
|
$status = $wpdb->update(
|
|
$table_name,
|
|
$data,
|
|
$where
|
|
);
|
|
} else {
|
|
$status = $wpdb->insert(
|
|
$table_name,
|
|
$data
|
|
);
|
|
}
|
|
|
|
return !!$status;
|
|
}
|
|
|
|
public function addQueryParam($url, $key, $val) {
|
|
return $url . (strpos($url,'?') !== false ? '&' : '?') . $key . '=' . $val;
|
|
}
|
|
|
|
public function removeQueryParam($url, $key) {
|
|
$result = $url;
|
|
$url_data = parse_url($url);
|
|
|
|
if (!empty($url_data['query'])) {
|
|
parse_str($url_data['query'], $query_params);
|
|
|
|
if (!empty($query_params[$key])) {
|
|
unset($query_params[$key]);
|
|
}
|
|
|
|
$result = $url_data['path'] . '?' . http_build_query($query_params);
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function uniqueSort($array, $key) {
|
|
$result = array();
|
|
|
|
$array_unique = array();
|
|
|
|
$ids = array();
|
|
$timestamps = array();
|
|
|
|
foreach ($array as $item) {
|
|
if (!in_array($item['id'], $ids)) {
|
|
$ids_unique[] = $item['id'];
|
|
$array_unique[$item['id']] = $item;
|
|
$timestamps[$item['id']] = $item[$key];
|
|
}
|
|
}
|
|
|
|
arsort($timestamps);
|
|
|
|
foreach ($timestamps as $id => $node) {
|
|
$result[] = $array_unique[$id];
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function arrayMergeAssoc() {
|
|
$mixed = null;
|
|
$arrays = func_get_args();
|
|
|
|
foreach ($arrays as $k => $arr) {
|
|
if ($k === 0) {
|
|
$mixed = $arr;
|
|
continue;
|
|
}
|
|
|
|
$mixed = array_combine(
|
|
array_merge(array_keys($mixed), array_keys($arr)),
|
|
array_merge(array_values($mixed), array_values($arr))
|
|
);
|
|
}
|
|
|
|
return $mixed;
|
|
}
|
|
}
|