در زمینه تشریح عملیات یک تابع

kiarash.M

Active Member
با سلام ؛
خوب می دونم که همیشه بررسی کردن کارای دیگران تا فهمدین اینکه چی کار کرده اند گه قدر مار سخت ای ائه ..
ولی یک خواهش دارم چون هرچی سعی کردم متوجه نشدم که در این تابع چه اتفاقی می افته ..


من یک app رو که یک سری تاریخ ذحیره می کرد را تغییر دادم جوری که کلا صفحه انتخاب تاریخ به حالت شمسی در آمود ..
ولی مشکل اینجاست که موقع ذخیره در db به format ائه datetime سال های کوچیکتر از 1970 ذخیره نمی شند .. نمدونم شاید limit از script باشه ؛ مثلا سل 1388 نمیشه ! به جاش 1970 که min هست ذخیره میشه


در هر حال خواستم موقع ذخیره دوباره تاریخ رو میلادی save کنم ! و بعدا موقع خواند آن را تغییر دهم ولی متوجه یک چیز نشدم ..

این قطعه کد را ببینید :

PHP:
 function add() {
      $this->setTemplate('add_milestone');
      
      if (!ProjectMilestone::canAdd(logged_user(), active_project())) {
        flash_error(lang('no access permissions'));
        $this->redirectToReferer(get_url('milestone'));
      } // if
      
      $milestone_data = array_var($_POST, 'milestone');
      if (!is_array($milestone_data)) {
        $milestone_data = array(
          'due_date' => DateTimeValueLib::now(),
        ); // array
      } // if
      $milestone = new ProjectMilestone();
      tpl_assign('milestone_data', $milestone_data);
      tpl_assign('milestone', $milestone);
      
	  
	  
      if (is_array(array_var($_POST, 'milestone'))) {
        $milestone_data['due_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'milestone_due_date_month', 1), array_var($_POST, 'milestone_due_date_day', 1), array_var($_POST, 'milestone_due_date_year', 1970));
        
        $assigned_to = explode(':', array_var($milestone_data, 'assigned_to', ''));
        
        $milestone->setFromAttributes($milestone_data);
        if (!logged_user()->isMemberOfOwnerCompany()) {
          $milestone->setIsPrivate(false);
        }
        
        $milestone->setProjectId(active_project()->getId());
        $milestone->setAssignedToCompanyId(array_var($assigned_to, 0, 0));
        $milestone->setAssignedToUserId(array_var($assigned_to, 1, 0));
        
        try {
          DB::beginWork();
          
          $milestone->save();
          $milestone->setTagsFromCSV(array_var($milestone_data, 'tags'));
          ApplicationLogs::createLog($milestone, active_project(), ApplicationLogs::ACTION_ADD);
          
          DB::commit();
          
          // Send notification
          try {
            if (array_var($milestone_data, 'send_notification') == 'checked') {
              Notifier::milestoneAssigned($milestone); // send notification
            } // if
          } catch(Exception $e) {
          
          } // try
          
          flash_success(lang('success add milestone', $milestone->getName()));
          $this->redirectTo('milestone');
          
        } catch(Exception $e) {
          DB::rollback();
          tpl_assign('error', $e);
        } // try
      } // if
    } // add


این تکه در کد بالا ببنید :
PHP:
      if (is_array(array_var($_POST, 'milestone'))) {
        $milestone_data['due_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'milestone_due_date_month', 1), array_var($_POST, 'milestone_due_date_day', 1), array_var($_POST, 'milestone_due_date_year', 1970));


مثلا : array_var($_POST, 'milestone_due_date_day', 1) روز را بر میگردونه و ..
اون یک آخر تابع array_var هم به نظر limit می آد ولی بازم تغییری حاض نمیشه ..


این هم تابع array_var :

PHP:
 function request_action() {
    $action = trim(array_var($_GET, 'a', DEFAULT_ACTION));
    return $action && is_valid_function_name($action) ? $action : DEFAULT_ACTION;
  } // request_action


در حالت کلی این کد کار میکنه :
PHP:
      if (is_array(array_var($_POST, 'milestone'))) {
        $milestone_data['due_date'] = DateTimeValueLib::make(0, 0, 0, array_var($_POST, 'milestone_due_date_month', 1), array_var($_POST, 'milestone_due_date_day', 1), 1380);

عدد 1380 ذخیره نمیشه !
ولی اگر مثلا یک عدد تو بازه خودشان باشه ذخیره میشه !

فقط یک مشکل وجود داره :

چطور می تونم array_var($_POST, 'milestone_due_date_day', 1) عدد حاظل این تابع را بریزم تو یک نتغییر ( برای تبدیل آن به میلادی ) اگر این اتفاق بی افته مشکل من حل میشه ..

ممنون .
 

جدیدترین ارسال ها

بالا