প্রোগ্রামিয়ালি ব্যবহারকারীর স্থিতিকে কীভাবে "সক্রিয়" সেট করবেন?


8

প্রোগ্রামিয়্যাটিকভাবে সমস্ত ব্যবহারকারীকে সক্রিয় করতে সেট করা সম্ভব?

এই সমস্যাটি দেখা দিয়েছে কারণ আমি আমার ব্যবহারকারীদের ভিউ ব্যবহার করে প্রদর্শন করার চেষ্টা করছি তবে আমার স্থানান্তরিত ব্যবহারকারীরা "অবরুদ্ধ" থাকায় আমি এগুলিকে দৃশ্যে প্রকাশ করতে পারছি না।

কেউ কী কীভাবে কোডের স্নিপেট বা ব্যবহারকারীর স্থিতি সক্রিয় রাখতে সেট করার টিউটোরিয়াল সরবরাহ করতে পারে?

এই কোডটি যা আমার শুরুতে কার্যকর করতে হবে।

define('DRUPAL_ROOT', getcwd()); 
$_SERVER['REMOTE_ADDR'] = "localhost"; 
require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 

// Set the active DB 
db_set_active('sage'); 

উত্তর:


7

আমি নিম্নলিখিত কোড ব্যবহার করব।

$query = new EntityFieldQuery();

$result = $query->entityCondition('entity_type', 'user')
  ->propertyCondition('status', 0)
  // Avoid loading the anonymous user.
  ->propertyCondition('uid', 0, '<>')
  // Comment out the next line if you need to enable also the super user.
  ->propertyCondition('uid', 1, '<>')
  ->execute();

if (isset($result['user'])) {
  // Disable the email sent when the user account is enabled.
  // Use this code if you don't use the code marked with (1).
  // $old_value = variable_get('user_mail_status_activated_notify', TRUE);
  // variable_set('user_mail_status_activated_notify', FALSE);

  $uids = array_keys($result['user']);
  $users = entity_load('user', $uids);

  foreach ($users as $uid => $user) {
    $user->status = 1;
    $original = clone $user;      // (1)
    $user->original = $original;  // (1)
    user_save($user);
  }
  // Restore the value of the Drupal variable.
  // Use this code if you don't use the code marked with (1).
  // variable_set('user_mail_status_activated_notify', $old_value);
}
  • কোডটি কেবল সক্ষম নয় এমন অ্যাকাউন্টগুলিতে লোড করে। ইতিমধ্যে সক্ষম অ্যাকাউন্টগুলি লোড করা অকেজো।
  • কোডটি বেনামে ব্যবহারকারীর অ্যাকাউন্টটি লোড করা এড়িয়ে চলে, এটি আসল অ্যাকাউন্ট নয়।
  • ক্লাইভ ঠিক তখনই যখন তিনি বলেন যে ব্যবহারকারী_সেভ () ড্রুপাল ব্যবহার করে সক্ষম ব্যবহারকারীদের ইমেল পাঠাতে পারে। ফাংশন থেকে ব্যবহৃত কোডটি নিম্নলিখিতটি।

    // Send emails after we have the new user object.
    if ($account->status != $account->original->status) {
      // The user's status is changing; conditionally send notification email.
      $op = $account->status == 1 ? 'status_activated' : 'status_blocked';
      _user_mail_notify($op, $account);
    }

    আমার কোড সহ, শর্তটি $account->status != $account->original->statusযাচাই করা হয়নি, এবং ইমেলটি প্রেরণ করা হয়নি। বিকল্প হিসাবে, আপনি কোড হিসাবে দেখানো হয়েছে হিসাবে FALSEকল করার আগে Drual ভেরিয়েবল "ব্যবহারকারীর_মিল_স্ট্যাটাস_অ্যাক্টিভেটেড_নোটাইফাই" এর মান সেট করতে পারেন user_save()। সেই ড্রুপাল ভেরিয়েবলের মান পরিবর্তন করা বিশ্বব্যাপী প্রভাব ফেলবে এবং অন্য কোডগুলি যখন এর মানতে পরিবর্তন করে তখন তা কাজ করবে না TRUE। আমার কোডের সাহায্যে ব্যবহারকারীর অবজেক্টগুলি সংরক্ষণ করার জন্য কলটি কার্যকরভাবে কোনও ইমেল প্রেরণ করবে না তা নিশ্চিত হওয়ার জন্য অবজেক্টটির $user->originalঅনুলিপি সেট করা $userএকমাত্র উপায় user_save()


@ কিয়ামলালানো, আমি আপনার কোডটি ব্যবহার করেছি, তবে আমি ত্রুটিও পাচ্ছি। আমি আমার পোস্ট আপডেট করেছি, ভুল কী হতে পারে সে সম্পর্কে আপনার কোনও ধারণা আছে?
12 '

@ চ্লং যদি আমি মনে করি সঠিকভাবে আপনার sageডাটাবেসটি একটি নন ড্রুপাল, তাই না? যদি তা হয় db_set_active()তবে আপনি কোডটি চালানোর আগে কলটি সরিয়ে ফেলুন
ক্লাইভ

@ chlong আমার কোড ব্যবহার করার সময় আমি কোনও ব্যতিক্রম পাই না। নিশ্চিত হয়ে নিন যে আপনি যে ডাটাবেসটি ব্যবহার করছেন (তার সাথে একটি সেট db_set_active()) তাতে দ্রুপাল থেকে ইনস্টল করা টেবিল রয়েছে।
kiamlaluno

@ কিমালালুনো, আমার 'ageষি' ডাটাবেস একটি দ্রুপাল ডাটাবেস, এতে ড্রুপাল সারণীগুলির সমস্ত রয়েছে। তবে আমি 'db_set_active ()' - EDIT ছাড়া চালানোর চেষ্টা করব: 'db_set_active ()' ছাড়াই কোডটি ঠিকঠাক চলবে, তবে আমার 'ageষি' ডাটাবেসের ব্যবহারকারীদের পরিবর্তন করা হয়নি। - সম্পাদনা 2: আপনার কোডটি সত্যই কাজ করে, তবে এটি কেবলমাত্র আমার ডিফল্ট সাইটের ব্যবহারকারীদের স্ট্যাটাসগুলিকেই পরিবর্তন করেছে, যা আমি চাই না :(
ক্লাব

@ chlong যদি "ageষি" কোনও দ্রুপাল সাইটের সাথে একটি দ্রুপাল ডাটাবেস সহযোগী হয়, তবে সেই সাইট থেকে কোডটি কার্যকর করার চেষ্টা করুন; যদি আপনি একই ত্রুটি পান তবে ডাটাবেসে কার্যকরভাবে সমস্ত প্রয়োজনীয় সারণী থাকে না। আমি যতদূর জানি, ব্যবহারের db_set_active()ফলে কোনও জিজ্ঞাসা ব্যর্থ হয় না।
kiamlaluno

7

আপনি একটি সমন্বয় ব্যবহার করতে পারেন user_load_multiple()এবং user_save()আপডেট করতে statusব্যবহারকারীদের সম্পত্তি:

$uids = db_query('SELECT uid FROM {users}')->fetchCol();
foreach (user_load_multiple($uids) as $account) {
  $account->status = 1;
  user_save($account);
}

এটি মনে রাখা উচিত যে আপনি যে কোনও মেল বিজ্ঞপ্তি ব্যবহারকারীদের তাদের অ্যাকাউন্টের স্থিতি সম্পর্কে অবহিত করতে সেট করেছেন তা এই পদ্ধতিটি ব্যবহার করে আহ্বান করা হবে।

যদি আপনি এটি না চান তবে আমি মনে করি আপনাকে সরাসরি {users}টেবিলে যেতে হবে এবং ম্যানুয়ালি স্ট্যাটাসটি সেট করতে হবে (প্রস্তাবিত নয়):

db_update('users')
  ->fields(array('status' => 1))
  ->execute();

2

এইভাবে আপনি সক্রিয় করতে সমস্ত ব্যবহারকারীর স্থিতি সেট করতে পারেন।

$users = entity_load('user');
foreach ($users as $user) {
  if ($user->uid != 0) {
    $user->status = 1;
    entity_save('user', $user);
  }
}

entity_save()সত্তা API মডিউল থেকে প্রয়োগ করা হয় ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.