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.

!
Bu sınıfın API anahtarı koruması YOKTUR 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

MetotDö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

MetotNe 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:

MetotNe 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

MetotNe 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

MetotNe 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ı

★
Eklenti geliştiricisi için en değerli üç metot Bunlar tekrar çalıştırılabilir (idempotent) çalışır: kayıt varsa günceller, yoksa ekler. Yani eklentiniz her kurulduğunda aynı komutu güvenle çağırabilirsiniz.
MetotNe 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>
i
Yoksa düz SQL mi kullanmalıyım? İkisi de doğrudur. Eklenti kurulumunu daha açık ve bağımsız tutmak isterseniz doğrudan {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));
✕
Bu betiği asla açıkta bırakmayın Sınıfın kendi koruması olmadığı için, 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

SoruCevap
Ç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ü.