10. DLE API Referansı
engine/api/api.class.php içindeki DLE_API sınıfı, DLE'yi
dışarıdan yönetmek için hazırlanmış bir araçtır. İçinde hem kullanıcı
yönetimi, hem önbellek yardımcıları, hem de eklenti geliştiricisinin işine yarayacak
panel modülü kayıt metotları bulunur.
DLE_API'nın kurucusu (__construct()) yalnızca önbellek dizinini
ayarlar. İçinde api_key gibi bir doğrulama bulunmaz. Ayrıca
sınıf, DLE çekirdeği tarafından hiçbir yerden include edilmez. Yani onu çağıran
betiğin güvenliğini siz sağlamak zorundasınız.
Nasıl kullanılır?
Sınıf kendini otomatik kurar: dosyanın sonunda bir örnek oluşturulur ve mevcut
$config ile $db ona bağlanır.
require_once(ENGINE_DIR . '/api/api.class.php');
// $dle_api bu noktada hazırdır (dosya sonunda oluşturulur)
$user = $dle_api->take_user_by_id(1);
echo $user['name'];
Tüm public metotlar (25 adet)
Kullanıcı sorgulama
| Metot | Döndürdüğü |
|---|---|
take_user_by_id($id, $select_list = "*") | ID'ye göre kullanıcı satırı |
take_user_by_name($name, $select_list = "*") | İsme göre kullanıcı satırı |
take_user_by_email($email, $select_list = "*") | E-postaya göre kullanıcı satırı |
take_users_by_group($group, $select_list = "*", $limit = 0) | Gruptaki kullanıcılar |
take_users_by_ip($ip, $like = false, $select_list = "*", $limit = 0) | IP'ye göre kullanıcılar |
Kullanıcı yönetimi
| Metot | Ne yapar? |
|---|---|
change_user_name($user_id, $new_name) | Adı değiştirir; haber/yorum/oylama kayıtlarındaki yazar adını da günceller |
change_user_password($user_id, $new_password) | password_hash() ile şifreyi değiştirir |
change_user_email($user_id, $new_email) | E-postayı değiştirir (durum kodu döner) |
change_user_group($user_id, $new_group) | Kullanıcının grubunu değiştirir |
checkGroup($group) | Grubun var olup olmadığını doğrular |
Harici kimlik doğrulama (köprü entegrasyonları)
DLE'yi başka bir sistemle (forum, üyelik paneli, lisans sunucusu) bağlamak için:
| Metot | Ne yapar? |
|---|---|
external_auth($login, $password) | Harici kullanıcı doğrulaması |
external_register($login, $password, $email, $group) | Harici kayıt (durum kodu döner) |
is_md5hash($hash = '') | Verilen değerin md5 hash olup olmadığını söyler |
send_pm_to_user($user_id, $subject, $text, $from) | Kullanıcıya özel mesaj gönderir |
Önbellek ve ayarlar
| Metot | Ne yapar? |
|---|---|
save_to_cache($fname, $vars) | Veriyi önbellek dosyasına yazar |
load_from_cache($fname, $timeout = 300, $type = 'text') | Önbelleği okur (süre dolmuşsa yeniden okumaz) |
clean_cache($name = "GLOBAL") | Önbelleği temizler ("GLOBAL" = tümü) |
get_cached_files() | Önbellekteki dosya adlarını listeler |
edit_config($key, $new_value = '') | engine/data/config.php içindeki bir ayarı değiştirir + önbelleği temizler |
İçerik
| Metot | Ne yapar? |
|---|---|
take_news($cat, $fields = "*", $start = 0, $limit = 10, $sort = 'id', $sort_order = 'desc') | Kategorilere göre haber çeker |
load_table($table, $fields = "*", $where = '1', $multirow = false, $start = 0, $limit = 0, $sort = '', $sort_order = 'desc') | Genel amaçlı SQL seçici |
Panel modülü kaydı
| Metot | Ne yapar? |
|---|---|
install_admin_module($name, $title, $descr, $icon, $perm = '1') |
{prefix}_admin_sections tablosuna kayıt ekler; varsa günceller. |
uninstall_admin_module($name) |
Kaydı siler. |
change_admin_module_perms($name, $perm) |
Yalnızca allow_groups alanını değiştirir. |
Kaynak kodun özü:
// api.class.php:604-624 — install_admin_module
$this->db->query("Select name from `" . PREFIX . "_admin_sections` where name = '$name'");
if ($this->db->num_rows() > 0) {
$this->db->query("UPDATE `" . PREFIX . "_admin_sections`
set title = '$title', descr = '$descr', icon = '$icon', allow_groups = '$perm'
where name = '$name'");
return true;
} else {
$this->db->query("INSERT INTO `" . PREFIX . "_admin_sections`
(`name`, `title`, `descr`, `icon`, `allow_groups`)
VALUES ('$name', '$title', '$descr', '$icon', '$perm')");
return true;
}
Eklenti içinden kullanmak
Eklentinizin PHP bloğundan (örneğin phpinstall) bu metotları çağırabilirsiniz:
<phpinstall><![CDATA[
include_once(DLEPlugins::Check(ENGINE_DIR . '/api/api.class.php'));
$dle_api->install_admin_module(
'benim-eklentim',
'Benim Eklentim',
'Kutu ayarları',
'reaction.png',
'all'
);
]]></phpinstall>
{prefix}_admin_sections tablosuna
INSERT yazmak yeterlidir. API'yi kullanmak, DLE'nin kendi kodunu
kopyalamaktan kaçınmanızı sağlar.
Harici entegrasyon örneği
Siteniz dışında çalışan bir panelin (lisans sunucusu, üyelik sistemi) DLE kullanıcılarını
yönetmesi gerekiyorsa, DLE_API tam bu iş içindir. Dikkat: böyle bir betik
DLE'nin dışından çağrılacağı için kendi kimlik doğrulamanızı kurmalısınız.
define('DATALIFEENGINE', true);
define('ROOT_DIR', '/sitenin/tam/yolu');
define('ENGINE_DIR', ROOT_DIR . '/engine');
require_once(ENGINE_DIR . '/api/api.class.php');
// KENDİ doğrulamanız — örnek
$token = isset($_POST['token']) ? $_POST['token'] : '';
if (!hash_equals(KENDI_GIZLI_ANAHTARINIZ, $token)) {
http_response_code(403);
die('Yetkisiz');
}
$user = $dle_api->take_user_by_name($_POST['kullanici']);
if (empty($user['user_id'])) {
echo json_encode(array('ok' => false));
die();
}
$dle_api->change_user_group($user['user_id'], 3);
echo json_encode(array('ok' => true));
DLE_API'yı çağıran betiği web'den
erişilebilir bir yere koymak tüm siteyi ele geçirilebilir hâle getirir
(kullanıcı şifresi değiştirme dahil). Üç korumadan en az ikisini kullanın:
gizli anahtar/token, IP kısıtlaması, ek dosya erişimi yerine sunucu içi çağrı.
Özet
| Soru | Cevap |
|---|---|
| Çekirdek bu sınıfı kullanıyor mu? | Hayır. Harici entegrasyonlar için. |
| API anahtarı kontrolü var mı? | Yok. Güvenliği siz sağlarsınız. |
| Kaç public metot var? | 25 (1 kurucu + 24 işlev). |
| Eklentim için faydalı mı? | Panel modülü kaydı ve ayar değiştirme için evet. |
Panel modülü kaydının manuel yolu için: Admin Panel Modülü.