2012-05-14 16 views
8

oturum Nasıl olsun bağlam/rolünün öğrenmek için? Bağlamı duyarlı bir bloğu uygulamaya çalışıyorum. Blok, kullanıcılarına kendi ruh hallerine göre doğru sınavları önerecektir.Moodle nasıl kullanıcı

Rol öğretmen, öğrenci, öğretmen yardımcısı veya yönetici olabilir. Zaten get_context_instance() & has_compatibility() işlevleri bulduk, ancak bu amaç için nasıl kullanılacağını bilmiyorum.

+0

Roller ve bağlamları Moodle en karmaşık kavramlardan biri olan fonksiyonlar için sonuç kullanması, hem kısa versiyon genellikle bağlamdır tek bir kursa, tek bir kategoriye veya tüm siteye uygulanır. Bu bağlamda bir rol verilir ve kullanıcıya bu bağlamda yetenekler atar. –

cevap

3

Moodle'da rolleri bağlamında dayanmaktadır. Bu kod snippet'in sizin için yararlı olacağını düşünüyorum.

küresel $ DERS $, KULLANICI;

$context = get_context_instance(CONTEXT_COURSE,$COURSE->id); 

if (has_capability('moodle/legacy:student', $context, $USER->id, false)) { 
echo "Student"; 
} 

if (has_capability('moodle/legacy:editingteacher', $context, $USER->id, false)) { 
echo "is Teacher<br/>"; 
} 
if (has_capability('moodle/legacy:admin', $context, $USER->id, false)) { 
echo "is ADMIN<br/>"; 
} 

Ayı mükemmel olası (ama muhtemel) olduğunu akılda varsayılan Öğrenci olmadan Moodle sitesi ve Moodle 2'de beni

+0

Bu kod iyidir, ancak bir sorun var. Bakışta/derste olmadığım için ana sayfada olduğumu ve rolün ne olduğunu öğrenmek istediğimi farz edelim. Bu işe yaramaz – Ehsan

9
$context = get_context_instance (CONTEXT_SYSTEM); 
$roles = get_user_roles($context, $USER->id, false); 
$role = key($roles); 
$roleid = $roles[$role]->roleid; 

olması. x get_user_roles işlevini kullanabilir ve bu, kurs veya site veya modül bağlamında belirli bir kullanıcıya atanan rollerin listesini döndürecektir. Rolleri ayrıca modül bağlamında da alabilirsiniz.

$context = get_context_instance(CONTEXT_MODULE, $cm->id, true); 
$roles = get_user_roles($context, $USER->id, true); 
6

için çalışır Öğretmen rolleri

1
test edebilirsiniz

hangi rollerin bir kullanıcının sahip aşağıdaki şekilde:

if (user_has_role_assignment($user1->id, $roleid)) 
    echo "User is a teacher in some course"; 

öğretmenin rol kimliği genellikle 3 ve bir öğrencinin rol kimliği genelde 5 ama > İzinler - -> bir kullanıcı çeşitli rolleri unutmayın rolleri

tanımla bu Sitesi İdaresi> Kullanıcılar tablonun bakarak test edebilirsiniz. User_has_role_assignment işlevi, sisteme sahip olduğu rolleri test ediyor gibi görünüyor.

8

kontrol kullanıcıyı yönetici veya olmasın

$admins = get_admins(); 
$isadmin = false; 
foreach($admins as $admin) { 
    if ($USER->id == $admin->id) { 
     $isadmin = true; 
     break; 
    } 
} 

if ($isadmin) { 
    echo "you are an admin";  
} else { 
    echo "you are not an amidn"; 
}