কীভাবে 1600 জন ব্যবহারকারী এবং 2500 পোস্ট মুছবেন?


10

কয়েক বছর আগে আমি ড্রুপাল 6.9 দিয়ে একটি সাইট কনফিগার করেছি এবং তারপরে আমি এটি সম্পর্কে ভুলে গিয়েছি। আমার কাছে 160 টি পৃষ্ঠাগুলি রয়েছে যা সমস্ত স্প্যামার এবং আমার 3 টি বাদে সমস্ত মুছতে হবে My মাইএসকিউএল কলগুলির কারণে একসাথে এই পৃষ্ঠায় করা বেদনাদায়কভাবে ধীরে ধীরে (আমার ধারণা)। মুছে ফেলার জন্য আমার প্রায় 2500 ফোরামের পোস্ট রয়েছে।

আমি সরাসরি ডাটাবেস থেকে রেকর্ডগুলি মুছতে একটু ভয় করি।

আমি "ম্যাস মুছুন" নামে একটি মডিউল দেখেছি, তবে এটি ড্রুপাল সংস্করণ 5 এর জন্য এবং সংস্করণ 6 এর জন্য উপলব্ধ নয়।

উত্তর:


17

আপনি ভিউজ বাল্ক অপারেশনস ব্যবহার করতে পারেন , এমন একটি মডিউল যা নোড, ব্যবহারকারী, মন্তব্যগুলিতে বাল্ক ক্রিয়াকলাপ চালানোর অনুমতি দেয়; এটি ব্যাচ এপিআই ব্যবহার করে সমস্ত নোড, ব্যবহারকারী বা মন্তব্যগুলিতে নির্বাচিত অপারেশন প্রয়োগ করার অনুমতি দেয় । ব্যাচ এআইপি ফর্ম প্রসেসিংকে বেশ কয়েকটি পৃষ্ঠার অনুরোধগুলিতে ছড়িয়ে দেওয়ার মঞ্জুরি দেয়, সুতরাং এটি নিশ্চিত করে যে কোনও পিএইচপি সময়সীমার কারণে প্রসেসিংটি বাধাগ্রস্ত না হয়, যখন ব্যবহারকারীকে চলমান ক্রিয়াকলাপগুলির অগ্রগতি সম্পর্কে প্রতিক্রিয়া জানাতে দেয়।


1
মুছে ফেলার জন্য সমস্ত আইটেম নির্বাচন করা আবার যন্ত্রণাদায়কভাবে ধীর - select allসমস্ত পৃষ্ঠাগুলি জুড়ে সমস্ত আইটেম নির্বাচন করে এমন একটি বোতাম সক্ষম করার জন্য ভিউ'র ভিবিও বিকল্পগুলিতে একটি সেটিং রয়েছে - এটি ক্লিক করুন এবং কিল-এম-সব!
আইয়েশক

3

নোডগুলি মারার এই উপায়টি খুব ধীর, তবে সবচেয়ে নিরাপদ

function MYMODULE_menu(){
  $items['admin/mymodule/killnodes/%'] = array(
      'title' => 'Kill nodes',
      'page callback' => 'kill_nodes',
      'page arguments' => array(3),
      'type' => MENU_CALLBACK,
      'access arguments' => array('administer site configuration'),
  );
  return $items;
}

function kill_nodes($type){
  $query = "SELECT node.nid AS nid FROM {node} node WHERE node.type IN ('%s')";
  $result = db_query($query, $type);
  $count = 0;
  while($row = db_fetch_object($result)){
    node_delete($row->nid);
    $count++;
  }
  $message = t('!count nodes has been killed. Pif-Paf!', array('!count' => $count));
  drupal_set_message($message);
  return t("That's all folks");
}

ব্যবহারকারীদের জন্য, আপনি যাকে অপসারণ করতে চান তা আপনি প্রোগ্রামিয়ালি নির্ধারণ করতে পারবেন? যদি এটি সম্ভব হয় আপনি উদাহরণস্বরূপ পূর্ববর্তী ফাংশনটি ব্যবহারকারীর ওয়ানডেড অপসারণ করতে পারেন।


3
সময়টি বাধা দেওয়ার জন্য আমি ব্যাচের এপিআই ব্যাচ দিয়ে মোড়ানোর পরামর্শ দেব।
ডিসিফার

অবশ্যই। এটি একটি সহজ উদাহরণ।
dobeerman

3

এই কাজের জন্য একটি কাস্টম মডিউল তৈরির পরিবর্তে, আপনি একটি সাধারণ স্ক্রিপ্ট ব্যবহার করতে পারেন এবং এটি ড্রাশ দিয়ে সম্পাদন করতে পারেন । যেহেতু আপনাকে প্রচুর ব্যবহারকারী এবং নোডগুলি প্রক্রিয়া করতে হবে, তাই ব্যাচ এপিআই ব্যবহারের প্রস্তাব দেওয়া হচ্ছে (এবং এটি ড্রাশের সাথে ব্যবহার করা যেতে পারে )।


2

যদি আমার মতো আপনিও পাইথন পদ্ধতির পছন্দ করেন (সম্ভবত প্রায় বিরল, তবে এখনও), এই সমস্যাটি সমাধানের এটি স্বচ্ছ এবং কার্যকর উপায়:

import os

# Build up a variable containing the usernames
# This list was built using drush sql-cli, then
# SELECT name FROM users 
#   where $your-where-condition 
#   order by uid asc 
#   INTO 
#     OUTFILE '/tmp/users.csv' 
#     FIELDS TERMINATED BY ',' 
#     ENCLOSED BY '"' 
#     lines terminated by ', ' ;
users = [result from SQL goes here]

for user in users:
    print("Deleting spam user: %s..." % user),
    os.system('drush --yes -r $your-path-to-drupal -l $your-site-url user-cancel --delete-content %s > /dev/null' % user) 
    print 'Done'

পদক্ষেপগুলি মূলত:

  1. আপনার ডিবি দিয়ে লগ ইন করুন drush sql-cli -r $your-path-to-drupal -l $your-site-url
  2. উপরের এসকিউএলটি আপনার নিজের সাথে চালান যেখানে শর্ত দিন এবং ব্যবহারকারীদের ভেরিয়েবলে ফলাফলগুলি আটকান।
  3. আপনার ড্রুপাল পাথ এবং সাইটের নামটি ড্রাশ কমান্ডে আপডেট করুন
  4. এর সাথে স্ক্রিপ্টটি চালান python delete-users.py

আমি নিশ্চিত যে এটি করার আরও ভাল উপায় আছে তবে এটি আমার হ্যাক সমাধানটি ভালভাবে কাজ করে।


1
আপনি ওয়ান-লাইনার হিসাবে এটিও করতে পারেন। for i in `drush sql-query 'SELECT list of usernames'`; do drush --yes user-cancel --delete-content $i; done
ডেভিড এল

1

ডি 6 এর জন্য এই 2 টি মডিউল চেষ্টা করুন:

ব্যবহারকারী ছাঁটা https://drupal.org/project/user_prune এবং ব্যবহারকারী মুছে ফেলুন https://drupal.org/project/user_delete

ব্যবহারকারী ছাঁটাই আপনাকে নির্দিষ্ট করা মাপদণ্ডের উপর ভিত্তি করে নিষ্ক্রিয় ব্যবহারকারীদেরকে ব্যাপক পরিমাণে মুছতে দেয়।

ব্যবহারকারী মোছা আপনাকে কোনও ব্যবহারকারীকে মুছতে এবং নোড এবং মন্তব্য সহ সমস্ত জমা দেওয়া সামগ্রী মুছতে দেয়


1

আমি সমস্ত ব্যবহারকারীদের ইন্ড্রপাল delete. মুছে ফেলার জন্য একটি কাস্টম মডিউল প্রয়োগ করেছি the অ্যাডমিন / লোক অঞ্চলে এই ক্রিয়াকলাপটি সম্পূর্ণ করার জন্য একটি নতুন ফর্ম রয়েছে।

খুব ড্রশ সঙ্গে।

একটি স্যান্ডবক্স প্রকল্প। Thk।

প্রকল্পের লিঙ্ক।


1

উন্নত ব্যবহারকারী মডিউল ব্যবহার করুন । এই মডিউলটি ব্যবহারকারী পরিচালনা পাতায় একটি "উন্নত" ট্যাব যুক্ত করে। সেই ট্যাবে আপনি কোনও বৈশিষ্ট্য (ভূমিকা, স্থিতি ইত্যাদি) দ্বারা ব্যবহারকারীদের ফিল্টার করতে পারেন এবং সবগুলি নির্বাচন করতে পারেন। আপনি যদি ব্যবহারকারীদের মুছে ফেলা পদ্ধতিটি ব্যবহারকারীকে মুছুন এবং সমস্ত সামগ্রী মুছে ফেলেন তবে আপনি তাদের দ্বারা তৈরি সমস্ত সামগ্রীও মুছতে পারেন।


0

আপনার যদি ড্রশ অ্যাক্সেস থাকে এবং একটি দ্রুত সমাধান চান যা আপনাকে ব্যবহারকারীদের শ্বেত তালিকাতে রাখতে দেয় এবং অতিরিক্ত মডিউল ইনস্টল করতে জড়িত না:

drush @example.org sqlq "SELECT name FROM users WHERE name NOT IN ('keepthisuser1', 'andthisuser2')" | while read NAME; do
  drush -y @example.org user-cancel $NAME ; 
done

কপি পেস্ট করার আগে উপরের মধ্যে @example.orgরাখতে ব্যবহারকারীদের এবং তালিকা উভয়ই সামঞ্জস্য করতে নিশ্চিত করুন ('keepthisuser1', 'andthisuser2'):)


এটি ব্যবহারকারীর ক্ষেত্র এবং সকলের মতো লেজগুলি ছাড়বে।
নিক্সম্যাক

1
আপনি কী বোঝাতে চেয়েছেন তা বিশদ দিতে পারেন? আমি এটি সর্বশেষতম দ্রুপাল 7 এ পরীক্ষা করেছি এবং এটি ব্যবহারকারীর ক্ষেত্রে ডেটা ছাড়েনি। "লেজ" দ্বারা আপনি কী বোঝেন তা আমি বুঝতে পারি না।
ক্রিস বার্গেস

1
আমি এই উত্তরটি উপরের পাইথনে জড়িত অনুরূপটির সদৃশ দেখছি।
ক্রিস বার্গেস

1
আমি এই উত্তরে আমার ভোটটি বিপরীত করেছি কারণ এটি বাস্তবে প্রয়োজন মতো কাজ করে। ভোট দেওয়ার জন্য @nksmac পরিবর্তন ডাউন ভোটের প্রস্তাব দিন। দ্রষ্টব্য যে এটি কোনও এসকিউএল নয় কেবল উত্তর এবং এটি ড্রাশ ব্যবহার করে।
খ্রিস্টান

0

মডিউল মুছুন সমস্ত কাজে আসতে পারে।

ইনস্টল হয়ে গেলে আপনি এটি করতে পারেন, উদাহরণস্বরূপ:

drush delete-all articles

অথবা

drush delete-all users

ড্রপাল 6 সংস্করণে দেব কিন্তু নোটগুলি থেকে:

দ্রুত মুছে ফেলা ব্যতীত সবকিছুই কাজ করা উচিত।


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