refresh system and remove website options

This commit is contained in:
Hesabix 2024-12-27 18:49:35 +00:00
parent 1cdd3e0bf0
commit 6238d964d7
71 changed files with 3 additions and 6616 deletions

View file

@ -6,7 +6,6 @@ twig:
]
globals:
Jdate: "@Jdate"
Blog: "@Blog"
twigFunctions: "@twigFunctions"
when@test:
twig:

View file

@ -4,7 +4,6 @@
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
parameters:
blogMediaDir: '%kernel.project_dir%/../public_html/blog/media'
archiveMediaDir: '%kernel.project_dir%/../hesabixArchive'
archiveTempMediaDir: '%kernel.project_dir%/../hesabixArchive/temp'
avatarDir: '%kernel.project_dir%/../hesabixArchive/avatars'
@ -39,9 +38,6 @@ services:
Provider:
class: App\Service\Provider
arguments: [ "@doctrine.orm.entity_manager" ]
Blog:
class: App\Service\Blog
arguments: [ "@doctrine.orm.entity_manager" ]
twigFunctions:
class: App\Service\twigFunctions
arguments: [ "@doctrine.orm.entity_manager" ]

View file

@ -1,261 +0,0 @@
<?php
namespace App\Controller;
use App\Entity\BlogCat;
use App\Entity\BlogComment;
use App\Entity\BlogPost;
use App\Entity\StackCat;
use App\Entity\StackContent;
use App\Service\Jdate;
use App\Service\Provider;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\SerializerInterface;
class BlogController extends AbstractController
{
#[Route('/api/blog/cats/get', name: 'app_blog_get_cats')]
public function app_blog_get_cats(SerializerInterface $serializer, EntityManagerInterface $entityManager): JsonResponse
{
$result = [];
$cats = $entityManager->getRepository(BlogCat::class)->findAll();
foreach ($cats as $cat){
$temp = [];
$temp['id'] = $cat->getId();
$temp['name'] = $cat->getLabel();
$temp['code'] = $cat->getCode();
$result[] = $temp;
}
return $this->json($result);
}
#[Route('/api/blog/insert', name: 'app_blog_content_insert')]
public function app_blog_content_insert(Request $request,SerializerInterface $serializer, EntityManagerInterface $entityManager): JsonResponse
{
$params = [];
if ($content = $request->getContent()) {
$params = json_decode($content, true);
}
if(array_key_exists('intro',$params) && array_key_exists('title',$params) && array_key_exists('cat',$params) && array_key_exists('body',$params )){
$cat = $entityManager->getRepository(BlogCat::class)->find($params['cat']);
$post = new BlogPost();
$post->setBody($params['body']);
$post->setCat($cat);
$post->setIntero($params['intro']);
$post->setImg($params['img']);
$post->setTitle($params['title']);
$post->setDateSubmit(time());
$post->setViews(1);
$post->setSubmitter($this->getUser());
$post->setUrl(str_replace(' ','_',$params['title']));
$entityManager->persist($post);
$entityManager->flush();
return $this->json([
'error'=> 0,
'message'=> 'ok',
'url'=>$post->getUrl()
]);
}
return $this->json([
'error'=> 999,
'message'=> 'تمام موارد لازم را وارد کنید.'
]);
}
/**
* @throws \Doctrine\ORM\NonUniqueResultException
* @throws \Doctrine\ORM\NoResultException
*/
#[Route('/api/blog/contents/search', name: 'app_blog_contents_get')]
public function app_blog_contents_get(Jdate $jdate, Provider $provider,Request $request,SerializerInterface $serializer, EntityManagerInterface $entityManager): JsonResponse
{
$params = [];
if ($content = $request->getContent()) {
$params = json_decode($content, true);
}
$params = $provider->createSearchParams($request);
$items = $entityManager->getRepository(BlogPost::class)->search($params);
$response = [];
foreach ($items as $item){
$temp = [];
$temp['id'] = $item->getId();
$temp['title'] = $item->getTitle();
$temp['intero'] = $item->getIntero();
$temp['body'] = $item->getBody();
$temp['submitter'] = $item->getSubmitter()->getFullName();
$temp['dateSubmit'] = $jdate->pastTime($item->getDateSubmit());
$temp['cat'] = $item->getCat()->getLabel();
$temp['views'] = $item->getViews();
$temp['url'] = $item->getUrl();
$temp['img'] = $item->getImg();
$response[] = $temp;
}
// calc has next page
$nextPage = true;
if((int)$provider->maxPages($params,$entityManager->getRepository(BlogPost::class)->getAllContentCount()) == $params['page'])
$nextPage = false;
return $this->json([
'data'=>$response,
'nextPage'=>$nextPage
]);
}
/**
* @throws \Doctrine\ORM\NonUniqueResultException
* @throws \Doctrine\ORM\NoResultException
*/
#[Route('/api/blog/get/last', name: 'app_blog_get_last_posts')]
public function app_blog_get_last_posts(Jdate $jdate, Provider $provider,Request $request,SerializerInterface $serializer, EntityManagerInterface $entityManager): JsonResponse
{
$items = $entityManager->getRepository(BlogPost::class)->findLast();
$response = [];
foreach ($items as $item){
$temp = [];
$temp['id'] = $item->getId();
$temp['title'] = $item->getTitle();
$temp['intero'] = $item->getIntero();
$temp['body'] = $item->getBody();
$temp['submitter'] = $item->getSubmitter()->getFullName();
$temp['dateSubmit'] = $jdate->pastTime($item->getDateSubmit());
$temp['cat'] = $item->getCat()->getLabel();
$temp['views'] = $item->getViews();
$temp['url'] = $item->getUrl();
$temp['img'] = $item->getImg();
$response[] = $temp;
}
return $this->json([
'data'=>$response,
]);
}
/**
* @throws \Doctrine\ORM\NonUniqueResultException
* @throws \Doctrine\ORM\NoResultException
*/
#[Route('/api/blog/post/get/{url}', name: 'app_blog_post_get')]
public function app_blog_post_get($url,Jdate $jdate, Provider $provider,Request $request,SerializerInterface $serializer, EntityManagerInterface $entityManager): JsonResponse
{
$post = $entityManager->getRepository(BlogPost::class)->findOneBy(['url'=>$url]);
if(!$post)
throw $this->createNotFoundException();
$temp = [];
$temp['id'] = $post->getId();
$temp['title'] = $post->getTitle();
$temp['intero'] = $post->getIntero();
$temp['body'] = $post->getBody();
$temp['submitter'] = $post->getSubmitter()->getFullName();
$temp['dateSubmit'] = $jdate->pastTime($post->getDateSubmit());
$temp['cat'] = $post->getCat()->getLabel();
$temp['views'] = $post->getViews();
$temp['url'] = $post->getUrl();
$temp['img'] = $post->getImg();
$post->setViews($post->getViews() + 1);
$entityManager->persist($post);
$entityManager->flush();
return $this->json($temp);
}
#[Route('/api/blog/comments/get/{url}', name: 'app_blog_comments_get')]
public function app_blog_comments_get($url,Jdate $jdate, Provider $provider,Request $request,SerializerInterface $serializer, EntityManagerInterface $entityManager): JsonResponse
{
$post = $entityManager->getRepository(BlogPost::class)->findOneBy(['url'=>$url]);
if(!$post)
throw $this->createNotFoundException();
$comments = $entityManager->getRepository(BlogComment::class)->findBy(['post'=>$post]);
$cmnts = [];
foreach ($comments as $comment){
$temp = [];
$temp['id'] = $comment->getId();
$temp['body'] = $comment->getBody();
$temp['submitter'] = $comment->getSubmitter()->getFullName();
$temp['dateSubmit'] = $jdate->pastTime($comment->getDateSubmit());
$temp['hash_email'] = $comment->getSubmitter()->getEmail();
$cmnts[] = $temp;
}
return $this->json($cmnts);
}
#[Route('/api/blog/comment/insert/{url}', name: 'app_blog_comment_insert')]
public function app_blog_comment_insert($url,Jdate $jdate, Provider $provider,Request $request,SerializerInterface $serializer, EntityManagerInterface $entityManager): JsonResponse
{
$params = [];
if ($content = $request->getContent()) {
$params = json_decode($content, true);
}
if($params['body']){
}
$post = $entityManager->getRepository(BlogPost::class)->findOneBy(['url'=>$url]);
if(!$post)
throw $this->createNotFoundException();
$comment = $entityManager->getRepository(BlogComment::class)->findOneBy(['post'=>$post,'submitter'=>$this->getUser()],['id'=>'DESC']);
if($comment){
if($comment->getDateSubmit() > time() - 350){
//to many request
return $this->json([
'result'=>2
]);
}
}
$comment = new BlogComment();
$comment->setDateSubmit(time());
$comment->setSubmitter($this->getUser());
$comment->setPost($post);
$comment->setBody($params['body']);
$entityManager->persist($comment);
$entityManager->flush();
$temp = [];
$temp['id'] = $comment->getId();
$temp['body'] = $comment->getBody();
$temp['submitter'] = $comment->getSubmitter()->getFullName();
$temp['dateSubmit'] = $jdate->pastTime($comment->getDateSubmit());
$temp['hash_email'] = $comment->getSubmitter()->getEmail();
return $this->json([
'result'=>1,
'data'=> $temp
]);
}
/**
* @throws \Doctrine\ORM\NonUniqueResultException
* @throws \Doctrine\ORM\NoResultException
*/
#[Route('/api/admin/blog/posts', name: 'app_admin_posts_get')]
public function app_admin_posts_get(Jdate $jdate, Provider $provider,Request $request,SerializerInterface $serializer, EntityManagerInterface $entityManager): JsonResponse
{
$items = array_reverse($entityManager->getRepository(BlogPost::class)->findAll());
$response = [];
foreach ($items as $item){
$temp = [];
$temp['id'] = $item->getId();
$temp['title'] = $item->getTitle();
$temp['submitter'] = $item->getSubmitter()->getFullName();
$temp['views'] = $item->getViews();
$temp['url'] = $item->getUrl();
$temp['cat'] = $item->getCat()->getLabel();
$temp['dateSubmit'] = $jdate->jdate('Y/n/d H:i',$item->getDateSubmit());
$response[] = $temp;
}
return $this->json($response);
}
/**
* @throws \Doctrine\ORM\NonUniqueResultException
* @throws \Doctrine\ORM\NoResultException
*/
#[Route('/api/admin/blog/post/delete/{url}', name: 'app_admin_post_delete')]
public function app_admin_post_delete($url,Jdate $jdate, Provider $provider,Request $request,SerializerInterface $serializer, EntityManagerInterface $entityManager): JsonResponse
{
$post = $entityManager->getRepository(BlogPost::class)->findOneBy(['url'=>$url]);
if($post){
$entityManager->remove($post);
$entityManager->flush();
}
return $this->json(['result'=>1]);
}
}

View file

@ -1,194 +0,0 @@
<?php
namespace App\Controller\Front;
use App\Entity\APIDocument;
use App\Entity\ChangeReport;
use App\Entity\GuideContent;
use App\Entity\Support;
use App\Form\APIDocumentType;
use App\Form\GuideType;
use App\Form\SupportType;
use App\Form\UpdateListType;
use App\Service\SMS;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Annotation\Route;
class AppController extends AbstractController
{
/**
* @Route("/app/dashboard", name="app_front_dashboard")
*/
public function app_front_app(): Response
{
return $this->render('/app/dashboard.html.twig');
}
/**
* @Route("/app/api/list", name="app_front_api_list")
*/
public function app_front_api_list(EntityManagerInterface $entityManager): Response
{
return $this->render('/app/api/list.html.twig',[
'items'=>$entityManager->getRepository(APIDocument::class)->findAll()
]);
}
/**
* @Route("/app/api/new", name="app_front_api_new")
*/
public function app_front_api_new(Request $request,EntityManagerInterface $entityManager): Response
{
$item = new APIDocument();
$form = $this->createForm(APIDocumentType::class,$item,[]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($item);
$entityManager->flush();
return $this->redirectToRoute('app_front_api_list');
}
return $this->render('/app/api/new.html.twig',[
'form'=>$form->createView()
]);
}
/**
* @Route("/app/api/edit/{id}", name="app_front_api_edit")
*/
public function app_front_api_edit(Request $request,EntityManagerInterface $entityManager,string $id): Response
{
$item = $entityManager->getRepository(APIDocument::class)->find($id);
if(!$item)
throw $this->createNotFoundException();
$form = $this->createForm(APIDocumentType::class,$item,[]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager->persist($item);
$entityManager->flush();
return $this->redirectToRoute('app_front_api_list');
}
return $this->render('/app/api/new.html.twig',[
'form'=>$form->createView()
]);
}
/**
* @Route("/app/api/delete/{id}", name="app_front_api_delete")
*/
public function app_front_api_delete(String $id,EntityManagerInterface $entityManager): Response
{
$item = $entityManager->getRepository(APIDocument::class)->find($id);
if($item){
if( $item->getId() != 1){
$entityManager->remove($item);
$entityManager->flush();
}
}
return $this->redirectToRoute('app_front_api_list');
}
/**
* @Route("/app/guide/list", name="app_front_guide_list")
*/
public function app_front_guide_list(EntityManagerInterface $entityManager): Response
{
return $this->render('/app/guide/list.html.twig',[
'items'=>$entityManager->getRepository(GuideContent::class)->findAll()
]);
}
/**
* @Route("/app/guide/delete/{id}", name="app_front_guide_delete")
*/
public function app_front_guide_delete(String $id,EntityManagerInterface $entityManager): Response
{
$item = $entityManager->getRepository(GuideContent::class)->find($id);
if($item){
$entityManager->remove($item);
$entityManager->flush();
}
return $this->redirectToRoute('app_front_guide_list');
}
/**
* @Route("/app/guide/new", name="app_front_guide_new")
*/
public function app_front_guide_new(Request $request,EntityManagerInterface $entityManager): Response
{
$item = new GuideContent();
$form = $this->createForm(GuideType::class,$item,[]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$item->setDateSubmit(time());
$item->setUrl(0);
$item->setSubmiter($this->getUser());
$entityManager->persist($item);
$entityManager->flush();
return $this->redirectToRoute('app_front_guide_list');
}
return $this->render('/app/guide/new.html.twig',[
'form'=>$form->createView()
]);
}
/**
* @Route("/app/guide/edit/{id}", name="app_front_guide_edit")
*/
public function app_front_guide_edit(string $id, Request $request,EntityManagerInterface $entityManager): Response
{
$item = $entityManager->getRepository(GuideContent::class)->find($id);
if(!$item)
throw $this->createNotFoundException();
$form = $this->createForm(GuideType::class,$item,[]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$item->setDateSubmit(time());
$item->setUrl(0);
$item->setSubmiter($this->getUser());
$entityManager->persist($item);
$entityManager->flush();
return $this->redirectToRoute('app_front_guide_list');
}
return $this->render('/app/guide/new.html.twig',[
'form'=>$form->createView()
]);
}
/**
* @throws \Exception
*/
#[Route('/app/database/sync', name: 'app_front_sync_database')]
public function app_front_sync_database(KernelInterface $kernel): Response
{
$application = new Application($kernel);
$application->setAutoExit(false);
$input = new ArrayInput([
'command' => 'doctrine:schema:update',
// (optional) define the value of command arguments
'--force' => true,
'--complete' => true
]);
// You can use NullOutput() if you don't need the output
$output = new BufferedOutput();
$application->run($input, $output);
// return the output, don't use if you used NullOutput()
$content = $output->fetch();
return $this->render('/app/sync-database.html.twig',[
'content'=>$content
]);
}
}

View file

@ -1,252 +0,0 @@
<?php
namespace App\Controller\Front;
use App\Entity\BlogComment;
use App\Entity\BlogPost;
use App\Form\BlogPostType;
use App\Form\CommentType;
use App\Service\Provider;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
class BlogController extends AbstractController
{
#[Route('/front/blog/home/{page}', name: 'general_blog_home')]
public function general_help_guide(Provider $provider,EntityManagerInterface $entityManager, String $page = '1'): Response
{
$items = $entityManager->getRepository(BlogPost::class)->search(['page'=>$page,'count'=>10]);
$nextPage = true;
if((int)($entityManager->getRepository(BlogPost::class)->getAllContentCount()/10) <= $page)
$nextPage = false;
return $this->render('blog/list.html.twig',[
'items'=>$items,
'nextPage'=>$nextPage,
'page'=>$page
]);
}
#[Route('/front/blog/post/{url}', name: 'general_blog_post')]
public function general_blog_post(Request $request,EntityManagerInterface $entityManager, String $url): Response
{
$item = $entityManager->getRepository(BlogPost::class)->findOneBy(['url'=>$url]);
if(!$item) throw $this->createNotFoundException();
$item->setViews($item->getViews() + 1);
$entityManager->persist($item);
$entityManager->flush();
$comment = new BlogComment();
$form = $this->createForm(CommentType::class,$comment);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
echo 11;
$oldComments = $entityManager->getRepository(BlogComment::class)->findBy([
'email'=>$comment->getEmail()
],['id'=>'DESC']);
if(count($oldComments) == 0){
$comment->setDateSubmit(time());
$comment->setPost($item);
$entityManager->persist($comment);
$entityManager->flush();
$comment->setBody('');
$form->addError(new FormError('دیدگاه شما ثبت شد بعد از تایید مدیر منتشر خواهد شد.'));
}
else{
if($oldComments[0]->getDateSubmit() > time() + 300){
$comment->setDateSubmit(time());
$comment->setPost($item);
$comment->setSubmitter($this->getUser());
$entityManager->persist($comment);
$entityManager->flush();
$comment->setBody('');
$form->addError(new FormError('دیدگاه شما ثبت شد بعد از تایید مدیر منتشر خواهد شد.'));
}
else{
$form->addError(new FormError('شما اخیرا یک دیدگاه ارسال کرده اید. ۵ دقیقه دیگر مجددا سعی کنید.'));
}
}
}
return $this->render('blog/post.html.twig',[
'item'=>$item,
'comments'=>$entityManager->getRepository(BlogComment::class)->findBy([
'post'=>$item,
'publish'=>true,
],['id'=>'DESC']),
'form'=>$form->createView()
]);
}
/**
* @Route("/app/blog/posts/list", name="app_front_blog_list")
*/
public function app_front_blog_list(EntityManagerInterface $entityManager): Response
{
return $this->render('/app/blog/posts.html.twig',[
'items'=>$entityManager->getRepository(BlogPost::class)->findBy([],[
'id'=>'DESC'
])
]);
}
/**
* @Route("/app/blog/post/new", name="app_front_blog_new")
*/
public function app_front_blog_new(SluggerInterface $slugger,Request $request,EntityManagerInterface $entityManager): Response
{
$item = new BlogPost();
$form = $this->createForm(BlogPostType::class,$item,[]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$brochureFile = $form->get('img')->getData();
// this condition is needed because the 'brochure' field is not required
// so the PDF file must be processed only when a file is uploaded
if ($brochureFile) {
$originalFilename = pathinfo($brochureFile->getClientOriginalName(), PATHINFO_FILENAME);
// this is needed to safely include the file name as part of the URL
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $brochureFile->guessExtension();
// Move the file to the directory where brochures are stored
try {
$brochureFile->move(
$this->getParameter('blogMediaDir'),
$newFilename
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
// updates the 'brochureFilename' property to store the PDF file name
// instead of its contents
$item->setImg($newFilename);
}
$item->setDateSubmit(time());
$url = str_replace(' ','-',$item->getTitle());
$check = $entityManager->getRepository(BlogPost::class)->findOneBy(['url'=>$url]);
$item->setUrl($url);
if($check){
$item->setUrl($url . $url);
}
$item->setViews(0);
$item->setSubmitter($this->getUser());
$entityManager->persist($item);
$entityManager->flush();
return $this->redirectToRoute('app_front_blog_list');
}
return $this->render('/app/blog/new.html.twig',[
'form'=>$form->createView()
]);
}
/**
* @Route("/app/blog/post/delete/{id}", name="app_front_blog_delete")
*/
public function app_front_blog_delete(String $id,EntityManagerInterface $entityManager): Response
{
$item = $entityManager->getRepository(BlogPost::class)->find($id);
if($item){
$entityManager->remove($item);
$entityManager->flush();
}
return $this->redirectToRoute('app_front_blog_list');
}
/**
* @Route("/app/blog/post/edit/{id}", name="app_front_blog_edit")
*/
public function app_front_blog_edit(String $id,SluggerInterface $slugger,Request $request,EntityManagerInterface $entityManager): Response
{
$item = $entityManager->getRepository(BlogPost::class)->find($id);
if(!$item) $this->createNotFoundException();
$oldFileName = $item->getImg();
$form = $this->createForm(BlogPostType::class,$item,[]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$brochureFile = $form->get('img')->getData();
// this condition is needed because the 'brochure' field is not required
// so the PDF file must be processed only when a file is uploaded
if ($brochureFile) {
$originalFilename = pathinfo($brochureFile->getClientOriginalName(), PATHINFO_FILENAME);
// this is needed to safely include the file name as part of the URL
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $brochureFile->guessExtension();
// Move the file to the directory where brochures are stored
try {
$brochureFile->move(
$this->getParameter('blogMediaDir'),
$newFilename
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
// updates the 'brochureFilename' property to store the PDF file name
// instead of its contents
$item->setImg($newFilename);
}
else{
$item->setImg($oldFileName);
}
$entityManager->persist($item);
$entityManager->flush();
return $this->redirectToRoute('app_front_blog_list');
}
return $this->render('/app/blog/new.html.twig',[
'form'=>$form->createView()
]);
}
/**
* @Route("/app/blog/comments/list", name="app_front_comments_list")
*/
public function app_front_comments_list(EntityManagerInterface $entityManager): Response
{
return $this->render('/app/blog/comments.html.twig',[
'items'=>$entityManager->getRepository(BlogComment::class)->findBy([],[
'id'=>'DESC'
])
]);
}
/**
* @Route("/app/blog/comment/delete/{id}", name="app_front_comment_delete")
*/
public function app_front_comment_delete(String $id,EntityManagerInterface $entityManager): Response
{
$item = $entityManager->getRepository(BlogComment::class)->find($id);
if($item){
$entityManager->remove($item);
$entityManager->flush();
}
return $this->redirectToRoute('app_front_comments_list');
}
/**
* @Route("/app/blog/comment/toggle/{id}", name="app_front_comment_toggle")
*/
public function app_front_comment_toggle(String $id,EntityManagerInterface $entityManager): Response
{
$item = $entityManager->getRepository(BlogComment::class)->find($id);
if($item){
if($item->isPublish()){
$item->setPublish(false);
}
else{
$item->setPublish(true);
}
$entityManager->persist($item);
$entityManager->flush();
}
return $this->redirectToRoute('app_front_comments_list');
}
}

View file

@ -1,23 +0,0 @@
<?php
namespace App\Controller\Front;
use App\Entity\GuideContent;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class GuideController extends AbstractController
{
#[Route('/front/help/guide/{id}', name: 'general_help_guide')]
public function general_help_guide(EntityManagerInterface $entityManager, String $id = 'general'): Response
{
$items = $entityManager->getRepository(GuideContent::class)->findBy(['cat'=>$id]);
return $this->render('general/guide.html.twig',[
'items'=>$items
]);
}
}

View file

@ -2,161 +2,15 @@
namespace App\Controller\Front;
use App\Entity\APIDocument;
use App\Entity\BlogPost;
use App\Entity\Business;
use App\Entity\ChangeReport;
use App\Entity\HesabdariDoc;
use App\Entity\PrinterQueue;
use App\Entity\User;
use App\Entity\Settings;
use App\Service\pdfMGR;
use App\Service\Provider;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Mime\Email;
use App\Service\SMS;
use Dompdf\Dompdf;
class UiGeneralController extends AbstractController
{
#[Route('/', name: 'general_home')]
public function general_home(SMS $sms,EntityManagerInterface $entityManager): Response
public function general_home(): JsonResponse
{
$busCount = count($entityManager->getRepository(Business::class)->findAll());
$users = count($entityManager->getRepository(User::class)->findAll());
$docs = count($entityManager->getRepository(HesabdariDoc::class)->findAll());
$lastBusiness = $entityManager->getRepository(Business::class)->findLast();
if($lastBusiness)
return $this->render('general/home.html.twig',[
'business' => $busCount,
'users' => $users,
'docs' => $docs,
'lastBusinessName' => $lastBusiness->getname(),
'lastBusinessOwner' => $lastBusiness->getOwner()->getFullName(),
'blogPosts'=> $entityManager->getRepository(BlogPost::class)->findBy([],['dateSubmit'=>'DESC'],3)
]);
return $this->render('general/home.html.twig',[
'business' => $busCount,
'users' => $users,
'docs' => $docs,
'lastBusinessName' => 'ثبت نشده',
'lastBusinessOwner' => 'ثبت نشده',
'blogPosts'=> $entityManager->getRepository(BlogPost::class)->findBy([],['dateSubmit'=>'DESC'],3)
]);
return $this->json(['message'=>'HesabixApi is running ...']);
}
#[Route('/front/faq', name: 'general_faq')]
public function general_faq(EntityManagerInterface $entityManager): Response
{
return $this->render('general/faq.html.twig',);
}
#[Route('/front/about', name: 'general_about')]
public function general_about(EntityManagerInterface $entityManager): Response
{
return $this->render('general/about.html.twig',);
}
#[Route('/front/contact', name: 'general_contact')]
public function general_contact(EntityManagerInterface $entityManager): Response
{
return $this->render('general/contact.html.twig',);
}
#[Route('/front/terms', name: 'general_terms')]
public function general_terms(EntityManagerInterface $entityManager): Response
{
return $this->render('general/terms.html.twig',);
}
#[Route('/front/privacy', name: 'general_privacy')]
public function general_privacy(EntityManagerInterface $entityManager): Response
{
return $this->render('general/privacy.html.twig',);
}
#[Route('/front/open-source', name: 'general_opensource')]
public function general_opensource(EntityManagerInterface $entityManager): Response
{
return $this->render('general/opensource.html.twig',);
}
#[Route('/front/update-list', name: 'general_changes_reports')]
public function general_changes_reports(EntityManagerInterface $entityManager): Response
{
return $this->render('general/update-list.html.twig',[
'items'=>$entityManager->getRepository(ChangeReport::class)->findBy([],['id'=>'DESC'])
]);
}
#[Route('/front/help/api/{id}', name: 'general_help_api')]
public function general_help_api(EntityManagerInterface $entityManager, String $id = '1'): Response
{
$item = $entityManager->getRepository(APIDocument::class)->find($id);
if(!$item)
throw $this->createNotFoundException();
return $this->render('general/api.html.twig',[
'cats'=>$entityManager->getRepository(APIDocument::class)->findBy([],['title'=>'ASC']),
'item'=>$item
]);
}
#[Route('/front/sponsors', name: 'general_sponsors')]
public function general_sponsors(EntityManagerInterface $entityManager): Response
{
return $this->render('general/sponsors.html.twig',[
]);
}
#[Route('/sitemap.xml', name: 'general_sitemap')]
public function general_sitemap(EntityManagerInterface $entityManager): Response
{
$response = new Response('',200,['Content-Type'=>'text/xml']);
return $this->render('general/sitemap.html.twig',[
'timeNow'=>$dateTime = date('c', time()),
'blogs'=>$entityManager->getRepository(BlogPost::class)->findAll(),
'docs'=>$entityManager->getRepository(APIDocument::class)->findAll()
],$response);
}
#[Route('/front/features/{id}', name: 'general_features')]
public function general_features(string $id,EntityManagerInterface $entityManager): Response
{
if($id == 'setup')
return $this->render('/general/features/setup.html.twig');
elseif($id == 'user_management')
return $this->render('/general/features/user_managment.html.twig');
elseif($id == 'buy_sell')
return $this->render('/general/features/buy_sell.html.twig');
throw $this->createNotFoundException();
}
#[Route('/front/apps/woocommerce', name: 'general_apps_woocommerce')]
public function general_apps_woocommerce(EntityManagerInterface $entityManager): Response
{
return $this->render('general/woocommerce.html.twig',);
}
#[Route('/front/apps/repservice', name: 'general_apps_repservice')]
public function general_apps_repservice(EntityManagerInterface $entityManager): Response
{
return $this->render('general/repservice.html.twig',);
}
#[Route('/front/apps/hesabixbox', name: 'general_apps_hesabixbox')]
public function general_apps_hesabixbox(EntityManagerInterface $entityManager): Response
{
return $this->render('general/hesabixbox.html.twig',);
}
#[Route('/front/system/get/data', name: 'general_apps_get_data')]
public function general_apps_get_data(EntityManagerInterface $entityManager): JsonResponse
{
$settings = $entityManager->getRepository(Settings::class)->findAll()[0];
return $this->json([
'footer' => $settings->getFooter()
]);
}
}

View file

@ -1,155 +1,23 @@
<?php
namespace App\Controller\Front;
use App\Controller\CustomUserMessageAuthenticationException;
use App\Entity\Business;
use App\Entity\Permission;
use App\Form\UserRegisterType;
use App\Security\BackAuthAuthenticator;
use App\Service\Provider;
use App\Service\twigFunctions;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\UserToken;
use Exception;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
use Symfony\Component\Security\Http\Attribute\CurrentUser;
use App\Entity\User;
use App\Security\EmailVerifier;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mime\Address;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use SymfonyCasts\Bundle\VerifyEmail\Exception\VerifyEmailExceptionInterface;
use Symfony\Component\EventDispatcher\EventDispatcher,
Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken,
Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class UserController extends AbstractController
{
private EmailVerifier $emailVerifier;
public function __construct(EmailVerifier $emailVerifier)
{
$this->emailVerifier = $emailVerifier;
}
/**
* function to generate random strings
* @param int $length number of characters in the generated string
* @return string a new string is created with random characters of the desired length
*/
private function RandomString(int $length = 32): string
{
return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length);
}
#[Route('/login/{msg}', name: 'front_user_login')]
public function front_user_login(AuthenticationUtils $authenticationUtils, #[CurrentUser] ?User $user,EntityManagerInterface $entityManager,$msg = null): Response
{
if($user)
return $this->redirectToRoute('general_home');
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render("/user/login.html.twig",[
'last_username' => $lastUsername,
'error' => $error,
'msg'=>$msg
]);
}
/**
* @throws Exception
*/
#[Route('/logout', name: 'front_user_logout')]
public function front_user_logout(): never
{
// controller can be blank: it will never be called!
throw new \Exception('Don\'t forget to activate logout in security.yaml');
}
#[Route('/register', name: 'front_user_register')]
public function front_user_register(twigFunctions $functions,Request $request,TranslatorInterface $translator, UserPasswordHasherInterface $userPasswordHasher, EntityManagerInterface $entityManager): Response
{
//redirect to hesabix app register page
return $this->redirect($functions->systemSettings()->getAppSite() . '/user/register');
$user = new User();
$form = $this->createForm(UserRegisterType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$exist = $entityManager->getRepository(User::class)->findOneBy(['email'=>$form->get('email')->getData()]);
if($exist){
$error = new FormError($translator->trans('There is already an account with this email'));
$form->get('email')->addError($error);
}
else{
$user->setDateRegister(time());
// encode the plain password
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('password')->getData()
)
);
$entityManager->persist($user);
$entityManager->flush();
// generate a signed url and email it to the user
$this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
(new TemplatedEmail())
->from(new Address('noreplay@hesabix.ir', 'حسابیکس'))
->to($user->getEmail())
->subject('تایید عضویت در حسابیکس')
->htmlTemplate('user/confirmation_email.html.twig')
);
// do anything else you need here, like send an email
return $this->redirectToRoute('front_user_login',['msg'=>'success']);
}
}
return $this->render('user/register.html.twig', [
'registrationForm' => $form->createView(),
]);
}
#[Route('/register/success', name: 'app_register_success')]
public function app_register_success(Request $request): Response
{
return $this->render('registration/register-success.html.twig', [
]);
}
#[Route('/verify/email', name: 'app_verify_email')]
public function verifyUserEmail(Request $request): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
// validate email confirmation link, sets User::isVerified=true and persists
try {
$this->emailVerifier->handleEmailConfirmation($request, $this->getUser());
} catch (VerifyEmailExceptionInterface $exception) {
$this->addFlash('verify_email_error', $exception->getReason());
return $this->redirectToRoute('app_register');
}
// @TODO Change the redirect on success and handle or remove the flash message in your templates
$this->addFlash('success', 'ایمیل شما تایید شد.');
return $this->redirectToRoute('app_register');
}
#[Route('/login/by/token{route}', name: 'app_login_by_token' , requirements: ['route' => '.+'])]
public function app_login_by_token(string $route,AuthenticationUtils $authenticationUtils,twigFunctions $functions,Request $request, UserPasswordHasherInterface $userPasswordHasher, UserAuthenticatorInterface $userAuthenticator, BackAuthAuthenticator $authenticator, EntityManagerInterface $entityManager): Response

View file

@ -1,66 +0,0 @@
<?php
namespace App\Entity;
use App\Repository\APIDocumentRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: APIDocumentRepository::class)]
class APIDocument
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $body = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $dateSubmit = null;
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
public function getBody(): ?string
{
return $this->body;
}
public function setBody(string $body): self
{
$this->body = $body;
return $this;
}
public function getDateSubmit(): ?string
{
return $this->dateSubmit;
}
public function setDateSubmit(?string $dateSubmit): static
{
$this->dateSubmit = $dateSubmit;
return $this;
}
}

View file

@ -1,90 +0,0 @@
<?php
namespace App\Entity;
use App\Repository\BlogCatRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: BlogCatRepository::class)]
class BlogCat
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $label = null;
#[ORM\Column(length: 255)]
private ?string $code = null;
#[ORM\OneToMany(mappedBy: 'cat', targetEntity: BlogPost::class, orphanRemoval: true)]
private Collection $blogPosts;
public function __construct()
{
$this->blogPosts = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getLabel(): ?string
{
return $this->label;
}
public function setLabel(string $label): self
{
$this->label = $label;
return $this;
}
public function getCode(): ?string
{
return $this->code;
}
public function setCode(string $code): self
{
$this->code = $code;
return $this;
}
/**
* @return Collection<int, BlogPost>
*/
public function getBlogPosts(): Collection
{
return $this->blogPosts;
}
public function addBlogPost(BlogPost $blogPost): self
{
if (!$this->blogPosts->contains($blogPost)) {
$this->blogPosts->add($blogPost);
$blogPost->setCat($this);
}
return $this;
}
public function removeBlogPost(BlogPost $blogPost): self
{
if ($this->blogPosts->removeElement($blogPost)) {
// set the owning side to null (unless already changed)
if ($blogPost->getCat() === $this) {
$blogPost->setCat(null);
}
}
return $this;
}
}

View file

@ -1,127 +0,0 @@
<?php
namespace App\Entity;
use App\Repository\BlogCommentRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: BlogCommentRepository::class)]
class BlogComment
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $dateSubmit = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $body = null;
#[ORM\ManyToOne(inversedBy: 'blogComments')]
#[ORM\JoinColumn(nullable: false)]
private ?BlogPost $post = null;
#[ORM\Column(type: Types::BOOLEAN, nullable: true)]
private ?bool $publish = null;
#[ORM\Column(length: 255)]
private ?string $name = null;
#[ORM\Column(length: 255)]
private ?string $email = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $website = null;
public function getId(): ?int
{
return $this->id;
}
public function getDateSubmit(): ?string
{
return $this->dateSubmit;
}
public function setDateSubmit(string $dateSubmit): self
{
$this->dateSubmit = $dateSubmit;
return $this;
}
public function getBody(): ?string
{
return $this->body;
}
public function setBody(string $body): self
{
$this->body = $body;
return $this;
}
public function getPost(): ?BlogPost
{
return $this->post;
}
public function setPost(?BlogPost $post): self
{
$this->post = $post;
return $this;
}
public function isPublish(): ?bool
{
return $this->publish;
}
public function setPublish(bool $publish): self
{
$this->publish = $publish;
return $this;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): static
{
$this->name = $name;
return $this;
}
public function getEmail(): ?string
{
return $this->email;
}
public function setEmail(string $email): static
{
$this->email = $email;
return $this;
}
public function getWebsite(): ?string
{
return $this->website;
}
public function setWebsite(?string $website): static
{
$this->website = $website;
return $this;
}
}

View file

@ -1,213 +0,0 @@
<?php
namespace App\Entity;
use App\Repository\BlogPostRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: BlogPostRepository::class)]
class BlogPost
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $body = null;
#[ORM\ManyToOne(inversedBy: 'blogPosts')]
#[ORM\JoinColumn(nullable: false)]
private ?User $submitter = null;
#[ORM\Column(length: 50)]
private ?string $dateSubmit = null;
#[ORM\Column(type: Types::BIGINT)]
private ?string $views = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $img = null;
#[ORM\ManyToOne(inversedBy: 'blogPosts')]
#[ORM\JoinColumn(nullable: false)]
private ?BlogCat $cat = null;
#[ORM\Column(length: 255)]
private ?string $url = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $intero = null;
#[ORM\OneToMany(mappedBy: 'post', targetEntity: BlogComment::class, orphanRemoval: true)]
private Collection $blogComments;
#[ORM\Column(length: 255, nullable: true)]
private ?string $keywords = null;
public function __construct()
{
$this->blogComments = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
public function getBody(): ?string
{
return $this->body;
}
public function setBody(string $body): self
{
$this->body = $body;
return $this;
}
public function getSubmitter(): ?User
{
return $this->submitter;
}
public function setSubmitter(?User $submitter): self
{
$this->submitter = $submitter;
return $this;
}
public function getDateSubmit(): ?string
{
return $this->dateSubmit;
}
public function setDateSubmit(string $dateSubmit): self
{
$this->dateSubmit = $dateSubmit;
return $this;
}
public function getViews(): ?string
{
return $this->views;
}
public function setViews(string $views): self
{
$this->views = $views;
return $this;
}
public function getImg(): ?string
{
return $this->img;
}
public function setImg(?string $img): self
{
$this->img = $img;
return $this;
}
public function getCat(): ?BlogCat
{
return $this->cat;
}
public function setCat(?BlogCat $cat): self
{
$this->cat = $cat;
return $this;
}
public function getUrl(): ?string
{
return $this->url;
}
public function setUrl(string $url): self
{
$this->url = $url;
return $this;
}
public function getIntero(): ?string
{
return $this->intero;
}
public function setIntero(string $intero): self
{
$this->intero = $intero;
return $this;
}
/**
* @return Collection<int, BlogComment>
*/
public function getBlogComments(): Collection
{
return $this->blogComments;
}
public function addBlogComment(BlogComment $blogComment): self
{
if (!$this->blogComments->contains($blogComment)) {
$this->blogComments->add($blogComment);
$blogComment->setPost($this);
}
return $this;
}
public function removeBlogComment(BlogComment $blogComment): self
{
if ($this->blogComments->removeElement($blogComment)) {
// set the owning side to null (unless already changed)
if ($blogComment->getPost() === $this) {
$blogComment->setPost(null);
}
}
return $this;
}
public function getKeywords(): ?string
{
return $this->keywords;
}
public function setKeywords(?string $keywords): static
{
$this->keywords = $keywords;
return $this;
}
}

View file

@ -1,112 +0,0 @@
<?php
namespace App\Entity;
use App\Repository\GuideContentRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity(repositoryClass: GuideContentRepository::class)]
class GuideContent
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255)]
private ?string $cat = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $body = null;
#[ORM\ManyToOne(inversedBy: 'guideContents')]
#[ORM\JoinColumn(nullable: false)]
private ?User $submiter = null;
#[ORM\Column(length: 25)]
private ?string $dateSubmit = null;
#[ORM\Column(length: 255)]
private ?string $url = null;
public function getId(): ?int
{
return $this->id;
}
public function getCat(): ?string
{
return $this->cat;
}
public function setCat(string $cat): self
{
$this->cat = $cat;
return $this;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
public function getBody(): ?string
{
return $this->body;
}
public function setBody(?string $body): self
{
$this->body = $body;
return $this;
}
public function getSubmiter(): ?User
{
return $this->submiter;
}
public function setSubmiter(?User $submiter): self
{
$this->submiter = $submiter;
return $this;
}
public function getDateSubmit(): ?string
{
return $this->dateSubmit;
}
public function setDateSubmit(string $dateSubmit): self
{
$this->dateSubmit = $dateSubmit;
return $this;
}
public function getUrl(): ?string
{
return $this->url;
}
public function setUrl(string $url): self
{
$this->url = $url;
return $this;
}
}

View file

@ -1,129 +0,0 @@
<?php
namespace App\Entity;
use App\Repository\SupportRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Ignore;
#[ORM\Entity(repositoryClass: SupportRepository::class)]
class Support
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $main = null;
#[ORM\ManyToOne(inversedBy: 'supports')]
#[ORM\JoinColumn(nullable: false)]
#[Ignore]
private ?User $submitter = null;
#[ORM\Column(length: 255)]
private ?string $dateSubmit = null;
#[ORM\Column(length: 255)]
private ?string $title = null;
#[ORM\Column(type: Types::TEXT)]
private ?string $body = null;
#[ORM\Column(length: 255)]
private ?string $state = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $code = null;
public function getId(): ?int
{
return $this->id;
}
public function getMain(): ?string
{
return $this->main;
}
public function setMain(?string $main): self
{
$this->main = $main;
return $this;
}
public function getSubmitter(): ?User
{
return $this->submitter;
}
public function setSubmitter(?User $submitter): self
{
$this->submitter = $submitter;
return $this;
}
public function getDateSubmit(): ?string
{
return $this->dateSubmit;
}
public function setDateSubmit(string $dateSubmit): self
{
$this->dateSubmit = $dateSubmit;
return $this;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
public function getBody(): ?string
{
return $this->body;
}
public function setBody(string $body): self
{
$this->body = $body;
return $this;
}
public function getState(): ?string
{
return $this->state;
}
public function setState(string $state): self
{
$this->state = $state;
return $this;
}
public function getCode(): ?string
{
return $this->code;
}
public function setCode(?string $code): static
{
$this->code = $code;
return $this;
}
}

View file

@ -41,18 +41,9 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
#[ORM\OneToMany(mappedBy: 'owner', targetEntity: Business::class, orphanRemoval: true)]
private Collection $businesses;
#[ORM\OneToMany(mappedBy: 'submiter', targetEntity: GuideContent::class, orphanRemoval: true)]
private Collection $guideContents;
#[ORM\OneToMany(mappedBy: 'submitter', targetEntity: StackContent::class, orphanRemoval: true)]
private Collection $stackContents;
#[ORM\OneToMany(mappedBy: 'submitter', targetEntity: BlogPost::class, orphanRemoval: true)]
private Collection $blogPosts;
#[ORM\OneToMany(mappedBy: 'submitter', targetEntity: BlogComment::class, orphanRemoval: true)]
private Collection $blogComments;
#[ORM\OneToMany(mappedBy: 'user', targetEntity: Log::class)]
private Collection $logs;
@ -123,10 +114,7 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
{
$this->userTokens = new ArrayCollection();
$this->businesses = new ArrayCollection();
$this->guideContents = new ArrayCollection();
$this->stackContents = new ArrayCollection();
$this->blogPosts = new ArrayCollection();
$this->blogComments = new ArrayCollection();
$this->logs = new ArrayCollection();
$this->permissions = new ArrayCollection();
$this->hesabdariDocs = new ArrayCollection();
@ -300,36 +288,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
return $this;
}
/**
* @return Collection<int, GuideContent>
*/
public function getGuideContents(): Collection
{
return $this->guideContents;
}
public function addGuideContent(GuideContent $guideContent): self
{
if (!$this->guideContents->contains($guideContent)) {
$this->guideContents->add($guideContent);
$guideContent->setSubmiter($this);
}
return $this;
}
public function removeGuideContent(GuideContent $guideContent): self
{
if ($this->guideContents->removeElement($guideContent)) {
// set the owning side to null (unless already changed)
if ($guideContent->getSubmiter() === $this) {
$guideContent->setSubmiter(null);
}
}
return $this;
}
/**
* @return Collection<int, StackContent>
*/
@ -360,66 +318,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
return $this;
}
/**
* @return Collection<int, BlogPost>
*/
public function getBlogPosts(): Collection
{
return $this->blogPosts;
}
public function addBlogPost(BlogPost $blogPost): self
{
if (!$this->blogPosts->contains($blogPost)) {
$this->blogPosts->add($blogPost);
$blogPost->setSubmitter($this);
}
return $this;
}
public function removeBlogPost(BlogPost $blogPost): self
{
if ($this->blogPosts->removeElement($blogPost)) {
// set the owning side to null (unless already changed)
if ($blogPost->getSubmitter() === $this) {
$blogPost->setSubmitter(null);
}
}
return $this;
}
/**
* @return Collection<int, BlogComment>
*/
public function getBlogComments(): Collection
{
return $this->blogComments;
}
public function addBlogComment(BlogComment $blogComment): self
{
if (!$this->blogComments->contains($blogComment)) {
$this->blogComments->add($blogComment);
$blogComment->setSubmitter($this);
}
return $this;
}
public function removeBlogComment(BlogComment $blogComment): self
{
if ($this->blogComments->removeElement($blogComment)) {
// set the owning side to null (unless already changed)
if ($blogComment->getSubmitter() === $this) {
$blogComment->setSubmitter(null);
}
}
return $this;
}
/**
* @return Collection<int, Log>
*/
@ -518,28 +416,6 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
return $this->supports;
}
public function addSupport(Support $support): self
{
if (!$this->supports->contains($support)) {
$this->supports->add($support);
$support->setSubmitter($this);
}
return $this;
}
public function removeSupport(Support $support): self
{
if ($this->supports->removeElement($support)) {
// set the owning side to null (unless already changed)
if ($support->getSubmitter() === $this) {
$support->setSubmitter(null);
}
}
return $this;
}
/**
* @return Collection<int, Notification>
*/

View file

@ -1,30 +0,0 @@
<?php
namespace App\Form;
use App\Entity\APIDocument;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class APIDocumentType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('title',TextType::class)
->add('body',CKEditorType::class)
->add('submit',SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => APIDocument::class,
]);
}
}

View file

@ -1,86 +0,0 @@
<?php
namespace App\Form;
use App\Entity\BlogCat;
use App\Entity\BlogPost;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\File;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class BlogPostType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('title',TextType::class)
->add('intero',TextareaType::class)
->add(
'body',
CKEditorType::class,
[
'filebrowsers' => [
'VideoUpload',
'VideoBrowse',
],
'config' => array(
'filebrowserBrowseRoute' => 'my_route',
'filebrowserBrowseRouteParameters' => array('slug' => 'my-slug'),
'filebrowserBrowseRouteType' => UrlGeneratorInterface::ABSOLUTE_URL,
),
]
)
->add('img', FileType::class, [
'label' => 'Img',
// unmapped means that this field is not associated to any entity property
'mapped' => false,
// make it optional so you don't have to re-upload the PDF file
// every time you edit the Product details
'required' => false,
// unmapped fields can't define their validation using annotations
// in the associated entity, so you can use the PHP constraint classes
'constraints' => [
new File([
'maxSize' => '1024k',
'mimeTypes' => [
'image/gif',
'image/jpeg',
'image/png'
],
'mimeTypesMessage' => 'لطفا یک فایل تصویر انتخاب کنید.',
])
],
])
->add('cat',EntityType::class, [
// looks for choices from this entity
'class' => BlogCat::class,
// uses the User.username property as the visible option string
'choice_label' => 'label',
// used to render a select box, check boxes or radios
// 'multiple' => true,
// 'expanded' => true,
])
->add('submit',SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => BlogPost::class,
]);
}
}

View file

@ -1,34 +0,0 @@
<?php
namespace App\Form;
use App\Entity\BlogComment;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\UrlType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CommentType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name',TextType::class)
->add('email',EmailType::class,['label'=>'پست الکترونیکی(منتشر نخواهد شد)'])
->add('website',UrlType::class)
->add('body',TextareaType::class,['attr'=>['autocomplete'=>'off','rows'=>5]])
->add('submit',SubmitType::class,['label'=>'SubmitComment'])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => BlogComment::class,
]);
}
}

View file

@ -1,43 +0,0 @@
<?php
namespace App\Form;
use App\Entity\GuideContent;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class GuideType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('cat', ChoiceType::class, [
'choices' => [
'عمومی' => 'general',
'اشخاص (طرف حساب ها) ' => 'person',
'کالاها و خدمات ' => 'commodity',
'مدیریت حساب های بانکی،تنخواه‌گردان،صندوق‌ها و انتقال بین حساب‌ها ' => 'banks',
'خرید و هزینه ' => 'buy',
'فروش و درآمد ' => 'sell',
'گزارشات ' => 'reports',
'تنظیمات ' => 'settings',
],
])
->add('title',TextType::class)
->add('body',CKEditorType::class)
->add('submit',SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => GuideContent::class,
]);
}
}

View file

@ -1,28 +0,0 @@
<?php
namespace App\Form;
use App\Entity\Support;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class SupportType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('body',TextareaType::class)
->add('submit',SubmitType::class,['label'=>'ذخیره'])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Support::class,
]);
}
}

View file

@ -1,30 +0,0 @@
<?php
namespace App\Form;
use App\Entity\ChangeReport;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class UpdateListType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('body',CKEditorType::class)
->add('version',TextType::class)
->add('submit',SubmitType::class,[])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => ChangeReport::class,
]);
}
}

View file

@ -1,86 +0,0 @@
<?php
namespace App\Form;
use App\Entity\User;
use Gregwar\CaptchaBundle\Type\CaptchaType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
class UserRegisterType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('fullName',TextType::class,[
'row_attr' => [
'class' => 'form-floating mb-2',
],
])
->add('email',EmailType::class,[
'row_attr' => [
'class' => 'form-floating mb-2',
],
'constraints' => [
new Email([
'message' => 'یک ایمیل صحیح وارد کنید.'
])
]
])
->add('agreeTerms', CheckboxType::class, [
'row_attr' => [
'class' => 'alert alert-danger py-2 mb-4',
],
'mapped' => false,
'constraints' => [
new IsTrue([
'message' => 'You should agree to our terms.',
]),
],
])
->add('password', PasswordType::class, [
'row_attr' => [
'class' => 'form-floating mb-2',
],
// instead of being set onto the object directly,
// this is read and encoded in the controller
'mapped' => false,
'attr' => ['autocomplete' => 'new-password'],
'constraints' => [
new NotBlank([
'message' => 'Please enter a password',
]),
new Length([
'min' => 10,
'minMessage' => 'Your password should be at least {{ limit }} characters',
// max length allowed by Symfony for security reasons
'max' => 4096,
]),
],
])
->add('captcha', CaptchaType::class, array(
'label'=> '',
'width' => 200,
'height' => 50,
'length' => 6,
));
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}

View file

@ -1,66 +0,0 @@
<?php
namespace App\Repository;
use App\Entity\APIDocument;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<APIDocument>
*
* @method APIDocument|null find($id, $lockMode = null, $lockVersion = null)
* @method APIDocument|null findOneBy(array $criteria, array $orderBy = null)
* @method APIDocument[] findAll()
* @method APIDocument[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class APIDocumentRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, APIDocument::class);
}
public function save(APIDocument $entity, bool $flush = false): void
{
$this->getEntityManager()->persist($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function remove(APIDocument $entity, bool $flush = false): void
{
$this->getEntityManager()->remove($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
// /**
// * @return APIDocument[] Returns an array of APIDocument objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('a')
// ->andWhere('a.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('a.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?APIDocument
// {
// return $this->createQueryBuilder('a')
// ->andWhere('a.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View file

@ -1,66 +0,0 @@
<?php
namespace App\Repository;
use App\Entity\BlogCat;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<BlogCat>
*
* @method BlogCat|null find($id, $lockMode = null, $lockVersion = null)
* @method BlogCat|null findOneBy(array $criteria, array $orderBy = null)
* @method BlogCat[] findAll()
* @method BlogCat[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class BlogCatRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, BlogCat::class);
}
public function save(BlogCat $entity, bool $flush = false): void
{
$this->getEntityManager()->persist($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function remove(BlogCat $entity, bool $flush = false): void
{
$this->getEntityManager()->remove($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
// /**
// * @return BlogCat[] Returns an array of BlogCat objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('b')
// ->andWhere('b.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('b.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?BlogCat
// {
// return $this->createQueryBuilder('b')
// ->andWhere('b.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View file

@ -1,65 +0,0 @@
<?php
namespace App\Repository;
use App\Entity\BlogComment;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<BlogComment>
*
* @method BlogComment|null find($id, $lockMode = null, $lockVersion = null)
* @method BlogComment|null findOneBy(array $criteria, array $orderBy = null)
* @method BlogComment[] findAll()
* @method BlogComment[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class BlogCommentRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, BlogComment::class);
}
public function save(BlogComment $entity, bool $flush = false): void
{
$this->getEntityManager()->persist($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function remove(BlogComment $entity, bool $flush = false): void
{
$this->getEntityManager()->remove($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
/**
* @return BlogComment[] Returns an array of BlogComment objects
*/
public function findLastComments(): array
{
return $this->createQueryBuilder('b')
->where('b.publish = true')
->orderBy('b.id', 'DESC')
->setMaxResults(10)
->getQuery()
->getResult()
;
}
// public function findOneBySomeField($value): ?BlogComment
// {
// return $this->createQueryBuilder('b')
// ->andWhere('b.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View file

@ -1,99 +0,0 @@
<?php
namespace App\Repository;
use App\Entity\BlogPost;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<BlogPost>
*
* @method BlogPost|null find($id, $lockMode = null, $lockVersion = null)
* @method BlogPost|null findOneBy(array $criteria, array $orderBy = null)
* @method BlogPost[] findAll()
* @method BlogPost[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class BlogPostRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, BlogPost::class);
}
public function save(BlogPost $entity, bool $flush = false): void
{
$this->getEntityManager()->persist($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function remove(BlogPost $entity, bool $flush = false): void
{
$this->getEntityManager()->remove($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
/*
* @return StackContent[]
*/
public function search($params): array
{
$result = $this->createQueryBuilder('s')
->setMaxResults($params['count'])
->setFirstResult(($params['page'] -1) * $params['count']);
$result->orderBy('s.id', 'DESC');
return $result->getQuery()->getResult();
}
/**
* @throws \Doctrine\ORM\NonUniqueResultException
* @throws \Doctrine\ORM\NoResultException
*/
public function getAllContentCount(): int{
return $this->createQueryBuilder('s')
->select('count(s.id)')
->getQuery()
->getSingleScalarResult()
;
}
public function findLast($count = 5)
{
return $this->createQueryBuilder('n')
->orderBy('n.id', 'DESC')
->setMaxResults($count)
->getQuery()
->getResult()
;
}
// /**
// * @return BlogPost[] Returns an array of BlogPost objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('b')
// ->andWhere('b.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('b.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?BlogPost
// {
// return $this->createQueryBuilder('b')
// ->andWhere('b.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View file

@ -1,66 +0,0 @@
<?php
namespace App\Repository;
use App\Entity\GuideContent;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<GuideContent>
*
* @method GuideContent|null find($id, $lockMode = null, $lockVersion = null)
* @method GuideContent|null findOneBy(array $criteria, array $orderBy = null)
* @method GuideContent[] findAll()
* @method GuideContent[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class GuideContentRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, GuideContent::class);
}
public function save(GuideContent $entity, bool $flush = false): void
{
$this->getEntityManager()->persist($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function remove(GuideContent $entity, bool $flush = false): void
{
$this->getEntityManager()->remove($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
// /**
// * @return GuideContent[] Returns an array of GuideContent objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('g')
// ->andWhere('g.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('g.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?GuideContent
// {
// return $this->createQueryBuilder('g')
// ->andWhere('g.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View file

@ -1,66 +0,0 @@
<?php
namespace App\Repository;
use App\Entity\Support;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<Support>
*
* @method Support|null find($id, $lockMode = null, $lockVersion = null)
* @method Support|null findOneBy(array $criteria, array $orderBy = null)
* @method Support[] findAll()
* @method Support[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class SupportRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Support::class);
}
public function save(Support $entity, bool $flush = false): void
{
$this->getEntityManager()->persist($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
public function remove(Support $entity, bool $flush = false): void
{
$this->getEntityManager()->remove($entity);
if ($flush) {
$this->getEntityManager()->flush();
}
}
// /**
// * @return Support[] Returns an array of Support objects
// */
// public function findByExampleField($value): array
// {
// return $this->createQueryBuilder('s')
// ->andWhere('s.exampleField = :val')
// ->setParameter('val', $value)
// ->orderBy('s.id', 'ASC')
// ->setMaxResults(10)
// ->getQuery()
// ->getResult()
// ;
// }
// public function findOneBySomeField($value): ?Support
// {
// return $this->createQueryBuilder('s')
// ->andWhere('s.exampleField = :val')
// ->setParameter('val', $value)
// ->getQuery()
// ->getOneOrNullResult()
// ;
// }
}

View file

@ -1,26 +0,0 @@
<?php
namespace App\Service;
use App\Entity\BlogCat;
use App\Entity\BlogComment;
use Doctrine\ORM\EntityManagerInterface;
class Blog
{
private $em;
function __construct(
EntityManagerInterface $entityManager,
)
{
$this->em = $entityManager;
}
public function getCats() : Array{
return $this->em->getRepository(BlogCat::class)->findAll();
}
public function getLastComments(){
return $this->em->getRepository(BlogComment::class)->findLastComments();
}
}

View file

@ -1,48 +0,0 @@
{% extends "app/base.html.twig" %}
{% block title %}لیست API{% endblock %}
{% block body %}
<div class="block block-rounded">
<div class="block-header block-header-default">
<h3 class="block-title">
<i class="fa fa-list"></i>
{{ block('title') }}
</h3>
<div class="block-options">
<div class="block-options-item">
<a href="/app/api/new" class="btn btn-success">جدید</a>
</div>
</div>
</div>
<div class="block-content">
<table class="table table-hover table-vcenter">
<thead>
<tr>
<th class="text-center" style="width: 50px;">#</th>
<th>عنوان</th>
<th class="text-center" style="width: 100px;">عملیات</th>
</tr>
</thead>
<tbody>
{% for index,item in items %}
<tr>
<th class="text-center" scope="row">{{ index + 1}}</th>
<td class="fw-semibold">
{{ item.title }}
</td>
<td class="text-center">
<div class="btn-group">
<a href="{{ path('app_front_api_delete',{'id':item.id}) }}" class="btn btn-sm btn-alt-secondary" aria-label=" حذف ">
<i class="fa fa-times"></i>
</a>
<a href="{{ path('app_front_api_edit',{'id':item.id}) }}" class="btn btn-sm btn-alt-secondary" aria-label=" حذف ">
<i class="fa fa-edit"></i>
</a>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View file

@ -1,27 +0,0 @@
{% extends "app/base.html.twig" %}
{% block title %}افزودن API{% endblock %}
{% block body %}
<div class="block block-rounded">
<div class="block-header block-header-default">
<h3 class="block-title">
<i class="fa fa-list"></i>
{{ block('title') }}
</h3>
<div class="block-options">
<div class="block-options-item">
<a href="/app/api/list" class="btn btn-secondary">بازگشت</a>
</div>
</div>
</div>
<div class="block-content">
{{ form_start(form) }}
{{ form_row(form.title,{'attr':{'class':'mb-2'}}) }}
{{ form_row(form.body,{'attr':{'class':'mb-2'}}) }}
<div class="mb-4">
{{ form_widget(form.submit) }}
<a href="/app/api/list" class="btn btn-primary">بازگشت</a>
</div>
{{ form_end(form) }}
</div>
</div>
{% endblock %}

View file

@ -1,166 +0,0 @@
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta content="نرم افزار حسابداری آنلاین حسابیکس" name="description"/>
<meta content="توسعه فناوران سرکش" name="author"/>
<title>{% block title %}{% endblock %}</title>
<!-- Icons -->
<!-- The following icons can be replaced with your own, they are used by desktop and mobile browsers -->
<link href="/assets/media/favicons/favicon.png" rel="shortcut icon"/>
<link href="/assets/media/favicons/favicon-192x192.png" rel="icon" sizes="192x192" type="image/png"/>
<link href="/assets/media/favicons/apple-touch-icon-180x180.png" rel="apple-touch-icon" sizes="180x180"/>
<!-- END Icons -->
<!-- Stylesheets -->
<!-- Dashmix framework -->
<link href="/assets/css/dashmix.min.css" rel="stylesheet"/>
<!-- You can include a specific file from css/themes/ folder to alter the default color theme of the template. eg: -->
<!-- <link rel="stylesheet" id="css-theme" href="assets/css/themes/xwork.min.css"> -->
<!-- END Stylesheets -->
<!--===== Custom Font css =====-->
<link href="/assets/css/custom-fonts.css" rel="stylesheet"/>
</head>
<body>
<div class="rtl-support sidebar-o sidebar-dark enable-page-overlay side-scroll page-header-fixed main-content-full-width app" id="page-container">
<!-- Sidebar -->
<!--
Sidebar Mini Mode - Display Helper classes
Adding 'smini-hide' class to an element will make it invisible (opacity: 0) when the sidebar is in mini mode
Adding 'smini-show' class to an element will make it visible (opacity: 1) when the sidebar is in mini mode
If you would like to disable the transition animation, make sure to also add the 'no-transition' class to your element
Adding 'smini-hidden' to an element will hide it when the sidebar is in mini mode
Adding 'smini-visible' to an element will show it (display: inline-block) only when the sidebar is in mini mode
Adding 'smini-visible-block' to an element will show it (display: block) only when the sidebar is in mini mode
-->
<nav aria-label="Main Navigation" id="sidebar">
<!-- Side Header -->
<div class="bg-header-dark">
<div class="content-header bg-white-5">
<!-- Logo -->
<a class="fw-semibold text-white tracking-wide" href="/">
<span class="smini-visible"> Hesab<span class="opacity-75">ix</span>
</span>
<span class="smini-hidden"><span class="text-light">
<img style="max-height:25px" src="/assets/media/favicons/favw.png"/>
(مدیریت) حسابیکس
</span>
</span>
</a>
<!-- END Logo -->
<!-- Options -->
<div>
<!-- Close Sidebar, Visible only on mobile screens -->
<!-- Layout API, functionality initialized in Template._uiApiLayout() -->
<button class="me-1 btn btn-sm btn-alt-secondary d-lg-none" data-action="sidebar_close" data-toggle="layout" type="button">
<i class="fa fa-times-circle"></i>
</button>
<!-- END Close Sidebar -->
</div>
<!-- END Options -->
</div>
</div>
<!-- END Side Header -->
<!-- Sidebar Scrolling -->
<div class="js-sidebar-scroll">
<!-- Side Navigation -->
<div class="content-side">
<ul class="nav-main">
<li class="nav-main-item">
<a class="nav-main-link" href="/app/dashboard">
<i class="nav-main-link-icon fa fa-rocket"></i>
<span class="nav-main-link-name"> پیشخوان </span>
</a>
</li>
<li class="nav-main-item">
<a class="nav-main-link" href="/app/api/list">
<i class="nav-main-link-icon fa fa-book"></i>
<span class="nav-main-link-name"> مستندات API </span>
</a>
</li>
<li class="nav-main-item">
<a class="nav-main-link" href="/app/guide/list">
<i class="nav-main-link-icon fa fa-book"></i>
<span class="nav-main-link-name"> راهنمای استفاده </span>
</a>
</li>
<li class="nav-main-item">
<a class="nav-main-link" href="/app/blog/posts/list">
<i class="nav-main-link-icon fa fa-book"></i>
<span class="nav-main-link-name"> وبلاگ </span>
</a>
</li>
<li class="nav-main-item">
<a class="nav-main-link" href="/app/database/sync">
<i class="nav-main-link-icon fa fa-book"></i>
<span class="nav-main-link-name"> به روز رسانی دیتابیس </span>
</a>
</li>
</ul>
</div>
<!-- END Side Navigation -->
</div>
<!-- END Sidebar Scrolling -->
</nav>
<!-- END Sidebar -->
<!-- Header -->
<header id="page-header">
<!-- Header Content -->
<div class="content-header">
<!-- Left Section -->
<div>
<!-- Toggle Sidebar -->
<!-- Layout API, functionality initialized in Template._uiApiLayout()-->
<button class="btn-sm btn btn-alt-secondary me-1" data-action="sidebar_toggle" data-toggle="layout" type="button">
<i class="fa fa-fw fa-bars"></i>
</button>
<!-- END Toggle Sidebar -->
</div>
<!-- END Left Section -->
</div>
<!-- END Header Content -->
<!-- Header Loader -->
<!-- Please check out the Loaders page under Components category to see examples of showing/hiding it -->
<div class="overlay-header bg-primary-darker" id="page-header-loader">
<div class="content-header">
<div class="w-100 text-center">
<i class="fa fa-fw fa-2x fa-sun fa-spin text-white"></i>
</div>
</div>
</div>
<!-- END Header Loader -->
</header>
<!-- END Header -->
<!-- Main Container -->
<main id="main-container">
<!-- Page Content -->
<div class="content p-0 m-0">
{% block body %}{% endblock %}
</div>
<!-- END Page Content -->
</main>
<!-- END Main Container -->
</div>
<!--
Dashmix JS
Core libraries and functionality
webpack is putting everything together at assets/_js/main/app.js
-->
<script src="/assets/js/dashmix.app.min.js"></script>
</body>
</html>

View file

@ -1,60 +0,0 @@
{% extends "app/base.html.twig" %}
{% block title %}دیدگاه‌های وبلاگ{% endblock %}
{% block body %}
<div class="block block-rounded">
<div class="block-header block-header-default">
<h3 class="block-title">
<i class="fa fa-list"></i>
{{ block('title') }}
</h3>
<div class="block-options">
<div class="block-options-item">
<a href="/app/blog/posts/list" class="btn btn-secondary">لیست پست‌ها</a>
</div>
</div>
</div>
<div class="block-content">
<table class="table table-hover table-vcenter">
<thead>
<tr>
<th class="text-center" style="width: 50px;">#</th>
<th>متن</th>
<th>نویسنده</th>
<th>محتوا</th>
<th>وضعیت</th>
<th class="text-center" style="width: 100px;">عملیات</th>
</tr>
</thead>
<tbody>
{% for index,item in items %}
<tr>
<th class="text-center" scope="row">{{ index + 1}}</th>
<td class="fw-semibold">
{{ item.body }}
</td>
<td class="fw-semibold">
{{ item.name }}
</td>
<td class="fw-semibold">
{{ item.post.title }}
</td>
<td class="fw-semibold">
{% if item.publish %}منتشر شده{% else %}در انتظار تایید{% endif %}
</td>
<td class="text-center">
<div class="btn-group">
<a href="{{ path('app_front_comment_delete',{'id':item.id}) }}" class="btn btn-sm btn-alt-secondary" aria-label=" حذف ">
<i class="fa fa-times"></i>
</a>
<a href="{{ path('app_front_comment_toggle',{'id':item.id}) }}" class="btn btn-sm btn-alt-secondary" aria-label=" حذف ">
<i class="fa fa-eye-low-vision"></i>
</a>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View file

@ -1,21 +0,0 @@
{% extends "app/base.html.twig" %}
{% block title %}افزودن پست{% endblock %}
{% block body %}
<div class="block block-rounded">
<div class="block-header block-header-default">
<h3 class="block-title">
<i class="fa fa-list"></i>
{{ block('title') }}
</h3>
<div class="block-options">
<div class="block-options-item">
<a href="/app/blog/posts/list" class="btn btn-secondary">بازگشت</a>
</div>
</div>
</div>
<div class="block-content">
{{ form_start(form) }}
{{ form_end(form) }}
</div>
</div>
{% endblock %}

View file

@ -1,51 +0,0 @@
{% extends "app/base.html.twig" %}
{% block title %}پست‌های وبلاگ{% endblock %}
{% block body %}
<div class="block block-rounded">
<div class="block-header block-header-default">
<h3 class="block-title">
<i class="fa fa-list"></i>
{{ block('title') }}
</h3>
<div class="block-options">
<div class="block-options-item">
<a href="/app/blog/post/new" class="btn btn-success">پست جدید</a>
</div>
<div class="block-options-item">
<a href="/app/blog/comments/list" class="btn btn-success">دیدگاه‌ها</a>
</div>
</div>
</div>
<div class="block-content">
<table class="table table-hover table-vcenter">
<thead>
<tr>
<th class="text-center" style="width: 50px;">#</th>
<th>عنوان</th>
<th class="text-center" style="width: 100px;">عملیات</th>
</tr>
</thead>
<tbody>
{% for index,item in items %}
<tr>
<th class="text-center" scope="row">{{ index + 1}}</th>
<td class="fw-semibold">
{{ item.title }}
</td>
<td class="text-center">
<div class="btn-group">
<a href="{{ path('app_front_blog_delete',{'id':item.id}) }}" class="btn btn-sm btn-alt-secondary" aria-label=" حذف ">
<i class="fa fa-times"></i>
</a>
<a href="{{ path('app_front_blog_edit',{'id':item.id}) }}" class="btn btn-sm btn-alt-secondary" aria-label=" حذف ">
<i class="fa fa-edit"></i>
</a>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View file

@ -1,5 +0,0 @@
{% extends "app/base.html.twig" %}
{% block title %}داشبورد{% endblock %}
{% block body %}
zzz
{% endblock %}

View file

@ -1,52 +0,0 @@
{% extends "app/base.html.twig" %}
{% block title %}لیست راهنماها{% endblock %}
{% block body %}
<div class="block block-rounded">
<div class="block-header block-header-default">
<h3 class="block-title">
<i class="fa fa-list"></i>
{{ block('title') }}
</h3>
<div class="block-options">
<div class="block-options-item">
<a href="/app/guide/new" class="btn btn-success">جدید</a>
</div>
</div>
</div>
<div class="block-content">
<table class="table table-hover table-vcenter">
<thead>
<tr>
<th class="text-center" style="width: 50px;">#</th>
<th>عنوان</th>
<th>دسته‌بندی</th>
<th class="text-center" style="width: 100px;">عملیات</th>
</tr>
</thead>
<tbody>
{% for index,item in items %}
<tr>
<th class="text-center" scope="row">{{ index + 1}}</th>
<td class="fw-semibold">
{{ item.title }}
</td>
<td class="fw-semibold">
{{ item.cat }}
</td>
<td class="text-center">
<div class="btn-group">
<a href="{{ path('app_front_guide_delete',{'id':item.id}) }}" class="btn btn-sm btn-alt-secondary" aria-label=" حذف ">
<i class="fa fa-times"></i>
</a>
<a href="{{ path('app_front_guide_edit',{'id':item.id}) }}" class="btn btn-sm btn-alt-secondary" aria-label=" حذف ">
<i class="fa fa-edit"></i>
</a>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}

View file

@ -1,28 +0,0 @@
{% extends "app/base.html.twig" %}
{% block title %}افزودن راهنما{% endblock %}
{% block body %}
<div class="block block-rounded">
<div class="block-header block-header-default">
<h3 class="block-title">
<i class="fa fa-list"></i>
{{ block('title') }}
</h3>
<div class="block-options">
<div class="block-options-item">
<a href="/app/guide/list" class="btn btn-secondary">بازگشت</a>
</div>
</div>
</div>
<div class="block-content">
{{ form_start(form) }}
{{ form_row(form.cat,{'cat':{'class':'mb-2'}}) }}
{{ form_row(form.title,{'attr':{'class':'mb-2'}}) }}
{{ form_row(form.body,{'attr':{'class':'mb-2'}}) }}
<div class="mb-4">
{{ form_widget(form.submit) }}
<a href="/app/guide/list" class="btn btn-primary">بازگشت</a>
</div>
{{ form_end(form) }}
</div>
</div>
{% endblock %}

View file

@ -1,23 +0,0 @@
{% extends "app/base.html.twig" %}
{% block title %}به روز رسانی دیتابیس{% endblock %}
{% block body %}
<div class="container">
<div class="row">
<div class="col">
<div class="block-content bg-white rounded-3">
<div class="pb-3">
<h3 class="mb-3">به روز رسانی دیتابیس</h3>
<div class="row">
<div class="col-sm-12 col-md-12">
<div>
{{ content }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,43 +0,0 @@
{% extends "base.html.twig" %}
{% block body %}
<div class="content">
<div class="row">
<div class="col-xl-8">
{% block content %}{% endblock %}
</div>
<div class="col-xl-4">
<!-- Recent Comments -->
<div class="block block-rounded">
<div class="block-header block-header-default">
<h3 class="block-title">نظرات اخیر</h3>
</div>
<div class="block-content">
{% set comments = Blog.getLastComments() %}
{% for comment in comments %}
<div class="push">
<b class="fw-semibold text-primary">{{ comment.name }}</b> در <a href="{{ path('general_blog_post',{'url':comment.post.url}) }}">{{ comment.post.title }}</a>
<p class="mt-1"> {{ comment.body }} </p>
</div>
{% endfor %}
</div>
</div>
<!-- END Recent Comments -->
<!-- Recent Cat -->
<div class="block block-rounded">
<div class="block-header block-header-default">
<h3 class="block-title">دسته‌بندی‌ها</h3>
</div>
<div class="block-content">
{% set cats = Blog.getCats() %}
<ul>
{% for cat in cats %}
<li><a href="#">{{ cat.label }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<!-- END Cat -->
</div>
</div>
</div>
{% endblock %}

View file

@ -1,56 +0,0 @@
{% extends "blog/base.html.twig" %}
{% block description %}تازه‌های حسابداری با وبلاگ حسابیکس{% endblock %}
{% block title %}وبلاگ{% endblock %}
{% block content %}
{% for item in items %}
<div class="block block-rounded">
<div class="block-content p-0 overflow-hidden">
<div class="row g-0">
<div class="col-md-4 col-lg-5 overflow-hidden d-flex align-items-center">
<a href="{{ path('general_blog_post',{'url':item.url}) }}">
<img alt="" class="img-fluid img-link" src="/blog/media/{{ item.img }}">
</a>
</div>
<div class="col-md-8 col-lg-7 d-flex align-items-center">
<div class="px-4 py-3">
<h4 class="mb-1">
<a class="text-primary" href="{{ path('general_blog_post',{'url':item.url}) }}"> {{ item.title}} </a>
</h4>
<div class="fs-sm mb-2">
<b class="">{{ item.submitter.fullname }}</b> در {{ Jdate.jdate('Y/n/d',item.dateSubmit)}}
</div>
<p class="mb-0"> {{ item.intero}} <a href="{{ path('general_blog_post',{'url':item.url}) }}">ادامه مطلب</a>
</p>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
<!-- Pagination -->
<nav aria-label="Page navigation">
<ul class="pagination push">
<li class="page-item">
{% if page != 1 %}
<a aria-label="Next" class="page-link" href="{{ path('general_blog_home',{'page':page - 1}) }}">
<span aria-hidden="true">
<i class="fa fa-angle-right"></i>
</span>
<span class="">صفحه قبل</span>
</a>
{% endif%}
</li>
<li class="page-item">
{% if nextPage == true %}
<a aria-label="Next" class="page-link" href="{{ path('general_blog_home',{'page':page +1}) }}">
<span class="">صفحه بعد</span>
<span aria-hidden="true">
<i class="fa fa-angle-left"></i>
</span>
</a>
{% endif%}
</li>
</ul>
</nav>
<!-- END Pagination -->
{% endblock %}

View file

@ -1,100 +0,0 @@
{% extends "blog/base.html.twig" %}
{% block title %}{{ item.title }}{% endblock %}
{% block description %}{{ item.title }}{% endblock %}
{% block keywords %}{{ item.keywords }}{% endblock %}
{% block content %}
<main id="main-container">
<!-- Hero -->
<div class="bg-image" style="background-image: url('/blog/media/{{ item.img }}');">
<div class="bg-black-75">
<div class="content content-top content-full text-center">
<h1 class="fw-bold text-white mt-5 mb-3"> {{ item.title }} </h1>
<h2 class="h3 fw-normal text-white-75 mb-5">{{ item.intero }}</h2>
<p>
<span class="badge rounded-pill bg-primary fs-base px-3 py-2 me-2 m-1">
<i class="fa fa-user-circle me-1"></i> {{ item.submitter.fullname}} </span>
<span class="badge rounded-pill bg-primary fs-base px-3 py-2 m-1">
<i class="fa fa-clock me-1"></i> {{ Jdate.jdate('Y/n/d',item.dateSubmit)}} </span>
</p>
</div>
</div>
</div>
<!-- END Hero -->
<!-- Page Content -->
<div class="content content-full bg-white">
<div class="row justify-content-center">
<div class="col-12 py-3">
<!-- Story -->
<!-- Magnific Popup (.js-gallery class is initialized in Helpers.jqMagnific()) -->
<!-- For more info and examples you can check out http://dimsemenov.com/plugins/magnific-popup/ -->
<article class="js-gallery story js-gallery-enabled container-fluid">
<p>{{ item.body | raw }}</p>
</article>
<!-- END Story -->
<!-- Actions -->
<div class="mt-5 d-flex justify-content-between push">
<div class="btn-group" role="group">
<button aria-expanded="false" aria-haspopup="true" class="btn btn-alt-secondary dropdown-toggle" data-bs-toggle="dropdown" id="dropdown-blog-story" type="button">
<i class="fa fa-share-alt opacity-50 me-1"></i> اشتراک گذاری </button>
<div aria-labelledby="dropdown-blog-story" class="dropdown-menu dropdown-menu-end fs-sm">
<a class="dropdown-item" href="javascript:void(0)">
<i class="fab fa-fw fa-facebook me-1"></i> فیس بوک </a>
<a class="dropdown-item" href="javascript:void(0)">
<i class="fab fa-fw fa-twitter me-1"></i> توییتر </a>
<a class="dropdown-item" href="javascript:void(0)">
<i class="fab fa-fw fa-linkedin me-1"></i> لینکدین </a>
</div>
</div>
</div>
<!-- END Actions -->
<div class="px-4 pt-4 rounded bg-body-extra-light">
<div class="rounded bg-light px-2 pt-2 pb-1">
<h5>ارسال دیدگاه</h5>
{{ form_start(form) }}
{{ form_errors(form) }}
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12">
{{ form_row(form.name,{'attr':{'class':'required'}}) }}
</div>
<div class="col-sm-12 col-md-6">
{{ form_row(form.email) }}
</div>
<div class="col-sm-12 col-md-6">
{{ form_row(form.website) }}
</div>
<div class="col-sm-12 col-md-12">
{{ form_row(form.body) }}
</div>
</div>
</div>
{{ form_end(form) }}
</div>
<div class="pt-3 fs-sm">
<h3>دیدگاه‌ها</h3>
{% for comment in comments %}
<div class="d-flex">
<span class="flex-shrink-0 img-link me-2">
<img alt="" class="img-avatar img-avatar32 img-avatar-thumb" src="{{ asset('https://www.gravatar.com/avatar/' ~ twigFunctions.gravatarHash(comment.email)) }}">
</span>
<div class="flex-grow-1">
<p class="mb-1">
<a class="fw-semibold" href="javascript:void(0)">{{ comment.name }}</a>
{{ comment.body }}
</p>
</div>
</div>
{% endfor %}
{% if comments | length == 0 %}
<h5 class="text-info">هنوز دیدگاهی ارسال نشده است.</h5>
{% endif %}
</div>
</div>
</div>
</div>
</div>
<!-- END Page Content -->
</main>
{% endblock %}

View file

@ -1,253 +0,0 @@
{% extends "base-betheme.html.twig" %}
{% block title %}داستان حسابیکس
{% endblock %}
{% block body %}
<div id="Content">
<div class="section mcb-section full-width" style="padding-top: 120px; padding-right: 15%; padding-left: 15%; background-image: url({{ asset('betheme/wallet2/images/wallet2-section-bg2.png') }}); background-repeat: repeat-x; background-position: center top;">
<div class="row">
<div class="col-12" data-col="one" style="padding: 0 1%;">
<div class="column_attr clearfix align_center mobile_align_center">
<h6 class="wallet2-heading">
<i class="icon-box"></i>
حسابیکس ، گامی به جلو...</h6>
<h1>
حسابیکس
<span class="themecolor">
چطور ایجاد شد؟
</span>
</h1>
<img src="{{ asset('betheme/wallet2/images/wallet2-icon1.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<p>
مدل کسب و کار ما با سایر شرکت‌ها متفاوت است. در واقع حسابیکس برای نقد سایر شرکت‌های ارائه دهنده خدمات حسابداری و به چالش کشیدن مدل درآمد آنها به وجود آمد. همه‌ی ما می‌دانیم هر کسب‌وکاری زمان‌هایی دارای افول بوده و شاید در مرحله نابودی باشند در این زمان دسترسی به اطلاعات حسابداری کسب‌و‌کار از مهمترین چالشها و تحلیل این اطلاعات است اما متاسفانه با توجه به بازار نرم افزار‌های حسابداری که روز به روز به سمت گران‌تر شدن قیمت خدمات پیش می‌روند در پیچ‌های تاریخی کسب‌وکارها را تنها می‌گذارند
</p>
<p>
احتمالا بعد از آنکه اوضاع خوب پیش نمی رود و چند ماهی فروش نداشته‌اید کم کم اکانت حسابداری شما در حال به اتمام رسیدن است و در مهمترین قسمت کار که قصد اتخاذ تصمیمات مهم را دارید متاسفانه به یکباره این اطلاعات از دسترستان خارج می‌شود.
</p>
<p>
حسابیکس دقیقا در نقطه مقابل این ماجرا به وجود آمده است. که برای یک کسب و کار بتوان به صورت رایگان از کلیه امکانات آن استفاده کرد. اگر تبلیغات را دوست ندارید می توانید با پرداخت هزینه اندک این تبلیغات را پنهان کنید. اگر با دانش برنامه نویسی آشنایی دارید همه‌چیز برای توسعه حسابیکس توسط شما مهیاست.تست کنید ، توسعه دهید و شاید دوست داشته باشید یکی مثل حسابیکس ایجاد کنید. حسابیکس متن باز است و دسترسی به کد منبع آن از طریق
github در دسترس است.
</p>
</div>
</div>
<div class="col-12" data-col="one">
<div class="image_frame image_item no_link scale-with-grid no_border">
<div class="image_wrapper"><img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-about-pic1.webp') }}" alt="wallet2-about-pic1" width="1622" height="548"></div>
</div>
</div>
</div>
</div>
<div class="section mcb-section equal-height" style="padding-top: 90px; padding-bottom: 50px; background-color: #ffffff;">
<div class="container">
<div class="row" data-col="one">
<div class="col-12">
<div class="column_attr clearfix align_center">
<h2 style="color: #000;">امکانات متمایز حسابیکس</h2>
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-icon1.svg') }}">
</div>
</div>
<div class="col-12" data-col="one">
<hr class="no_line" style="margin: 0 auto 90px auto;">
</div>
</div>
<div class="wrap mcb-wrap one column-margin-20px valign-top clearfix" data-col="one">
<div class="container">
<div class="row">
<div class="col-md-4 column_hover_color">
<div class="hover_color align_" style="background-color: #f4f4f4;" ontouchstart="this.classList.toggle('hover');">
<div class="hover_color_bg" style="background-color: #fbfbfb;">
<div class="hover_color_wrapper" style="padding: 40px 30px;">
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-about-pic2.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h5>
<span style="color: #12304a;">بودجه</span>
</h5>
<p>
<span style="color: #12304a;">حسابیکس عملا رایگان است و تنها برای یک سری امکانات اضافه در صورت نیاز هزینه‌ای اندک پرداخت می‌کنید</span>
</p>
</div>
</div>
</div>
</div>
<div class="col-md-4 column_hover_color">
<div class="hover_color align_" style="background-color: #f4f4f4;" ontouchstart="this.classList.toggle('hover');">
<div class="hover_color_bg" style="background-color: #fbfbfb;">
<div class="hover_color_wrapper" style="padding: 40px 30px;">
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-about-pic3.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h5>
<span style="color: #12304a;">گزارشات متنوع</span>
</h5>
<p>
<span style="color: #12304a;">حسابیکس دارای متنوع ترین فهرست از گزارشات مالی است و تمام بخش‌های نرم افزار دارای خروجی‌های اکسل و PDF است.</span>
</p>
</div>
</div>
</div>
</div>
<div class="col-md-4 column_hover_color">
<div class="hover_color align_" style="background-color: #f4f4f4;" ontouchstart="this.classList.toggle('hover');">
<div class="hover_color_bg" style="background-color: #fbfbfb;">
<div class="hover_color_wrapper" style="padding: 40px 30px;">
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-about-pic4.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h5>
<span style="color: #12304a;">رایانش ابری</span>
</h5>
<p>
<span style="color: #12304a;">حسابیکس به لطف استفاده از فناوری رایانش ابری به مراتب عملیات‌ها را از نرم‌افزار‌های سنتی سریع‌تر انجام می‌دهد.</span>
</p>
</div>
</div>
</div>
</div>
<div class="col-12" data-col="one">
<hr class="no_line" style="margin: 0 auto 50px auto;">
</div>
</div>
</div>
</div>
<div class="wrap mcb-wrap one valign-top clearfix" data-col="one">
<div class="container">
<div class="row">
<div class="col-md-4 column_hover_color">
<div class="hover_color align_" style="background-color: #f4f4f4;" ontouchstart="this.classList.toggle('hover');">
<div class="hover_color_bg" style="background-color: #fbfbfb;">
<div class="hover_color_wrapper" style="padding: 40px 30px;">
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-about-pic5.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h5>
<span style="color: #12304a;">امنیت داده</span>
</h5>
<p>
<span style="color: #12304a;">از کلیه اطلاعات کاربران در طول شبانه روز به صورت اتوماتیک نسخه پشتیبان تهیه و همچنین اطلاعات به صورت همزمان در دو مرکز داده متفاوت ذخیره می‌شوند.</span>
</p>
</div>
</div>
</div>
</div>
<div class="col-md-4 column_hover_color">
<div class="hover_color align_" style="background-color: #f4f4f4;" ontouchstart="this.classList.toggle('hover');">
<div class="hover_color_bg" style="background-color: #fbfbfb;">
<div class="hover_color_wrapper" style="padding: 40px 30px;">
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-about-pic6.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h5>
<span style="color: #12304a;">تصمیم گیری مالی</span>
</h5>
<p>
<span style="color: #12304a;">حسابیکس به شما کمک می‌کند اطلاعاتی شفاف و دقیق از وضعیت کسب‌و‌کار خود در لحظه داشته باشید.</span>
</p>
</div>
</div>
</div>
</div>
<div class="col-md-4 column_hover_color">
<div class="hover_color align_" style="background-color: #f4f4f4;" ontouchstart="this.classList.toggle('hover');">
<div class="hover_color_bg" style="background-color: #fbfbfb;">
<div class="hover_color_wrapper" style="padding: 40px 30px;">
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-about-pic7.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h5>
<span style="color: #12304a;">چند کاربر
</span>
</h5>
<p>
<span style="color: #12304a;">در حسابیکس چندین کاربر می‌توانند به صورت همزمان بر روی یک کسب و کار فعالیت داشته باشند و امکان اعمال محدودیت و دسترسی برای کاربران قابل انجام است.</span>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="section mcb-section" style="padding-top: 90px; padding-bottom: 90px;">
<div class="container">
<div class="row">
<div class="col-12" data-col="one">
<div class="column_attr clearfix align_center mobile_align_center">
<h6 class="wallet2-heading">
<i class="icon-wallet-line"></i>مخازن پروژه</h6>
<h2>دسترسی به کد منبع محصولات ما</h2>
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-icon1.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<p>
حسابیکس به صورت متن‌باز ارائه شده و دسترسی به کد منبع محصولات از طریق GitHub در دسترس می‌باشد.
</p>
</div>
</div>
<div class="col-12" data-col="one">
<hr class="no_line" style="margin: 0 auto 50px auto;">
</div>
<div class="col-md-4" data-col="one-third" style="padding: 0 1% 20px;">
<div class="column_attr clearfix align_center" style="background-color: #fff; padding: 25px 30px 10px; border-radius: 0 0 12px 12px;">
<a class="" href="https://github.com/morrning/hesabixUI.git" target="_blank">
<h5 style="color: #000;">Hesabix UI</h5>
</a>
<h6 class="wallet2-heading begray">رابط کاربری تحت وب</h6>
<p>
<span style="color: #12304a;">
ما برای ساخت رابط کاربری حسابیکس از VueJs 3
به همراه Bootstrap 5 استفاده کردیم.جدیدترین تکنولوژی‌های روز...
</span>
</p>
</div>
</div>
<div class="col-md-4" data-col="one-third" style="padding: 0 1% 20px;">
<div class="column_attr clearfix align_center" style="background-color: #fff; padding: 25px 30px 10px; border-radius: 0 0 12px 12px;">
<a class="" href="https://github.com/morrning/hesabixCore.git" target="_blank">
<h5 style="color: #000;">Hesabix Core</h5>
</a>
<h6 class="wallet2-heading begray">قلب تپنده ، رابط API</h6>
<p>
<span style="color: #12304a;">هسته حسابیکس توسط جدیدترین نسخه فریمورک Symfony نسخه ۷ توسعه داده شده و به لطف doctrine از طیف وسیعی از پایگاه های داده پشتیبانی می‌کند.</span>
</p>
</div>
</div>
<div class="col-md-4" data-col="one-third" style="padding: 0 1% 20px;">
<div class="column_attr clearfix align_center" style="background-color: #fff; padding: 25px 30px 10px; border-radius: 0 0 12px 12px;">
<a class="" href="https://github.com/morrning/hesabixBox.git" target="_blank">
<h5 style="color: #000;">Hesabix Box</h5>
</a>
<h6 class="wallet2-heading begray">
رابط لایه سیستم‌عامل ویندوز</h6>
<p>
<span style="color: #12304a;">دسترسی به پرینتر‌های ابری و سایر تجهیزات از جمله بارکدخوان‌ها و ترازو‌های دیجیتال از طریق این نرم‌افزار صورت می‌گیرد که با زبانVB.NET و دات نت نسخه 4 توسعه داده شده است.</span>
</p>
</div>
</div>
</div>
</div>
</div>
<div class="section mcb-section equal-height-wrap" style="padding-top: 60px; padding-bottom: 40px; background-color: #c0f8d1; background-image: url(images/wallet2-section-bg3.svg); background-repeat: repeat; background-position: center;">
<div class="container">
<div class="row">
<div class="col-md-3" data-col="one-fourth">
<div class="image_frame image_item no_link scale-with-grid no_border">
<div class="image_wrapper"><img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-home-pic4.png') }}" alt="wallet2-home-pic4" width="780" height="565"></div>
</div>
</div>
<div class="col-md-6" data-col="one-second">
<div class="column_attr clearfix align_center" style="padding: 0 5%;">
<h2>
<span style="color: #12304a;">حسابیکس با کمک‌های مالی شما به روز می‌شود.حتی با خرید یک چایی ....</span>
</h2>
</div>
</div>
<div class="col-md-3" data-col="one-fourth">
<hr class="no_line" style="margin: 0 auto 40px auto;">
<div class="button_align align_center">
<a target="_blank" class="button button_full_width button_size_2" href="https://zarinp.al/hesabix.ir">
<span class="button_label">حمایت از پروژه</span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,32 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}{{ item.title }}{% endblock %}
{% block body %}
<div class="container">
<div class="row">
<div class="col">
<div class="block-content bg-white rounded-3">
<div class="pb-3">
<h3 class="mb-3">مستندات API</h3>
<div class="row">
<div class="col-sm-12 col-md-4">
<ul class="list-group">
{% for cat in cats %}
<li class="list-group-item">
<a href="{{ path('general_help_api',{'id':cat.id}) }}">
{{ cat.title }}
</a>
</li>
{% endfor %}
</ul>
</div>
<div class="col-sm-12 col-md-8">
<h3 class="mb-3">{{ block('title') }}</h3>
<p>{{ item.body | raw }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,112 +0,0 @@
{% extends "base-betheme.html.twig" %}
{% block title %}تماس با ما{% endblock %}
{% block body %}
<div id="Content">
<div class="section mcb-section" style="padding-top: 150px; padding-bottom: 50px; background-color: #224ce8; background-image: url(images/wallet2-section-bg4.png); background-repeat: repeat-x; background-position: center top;">
<div class="container">
<div class="row" data-col="one" style="padding: 0 5%;">
<div class="col-12 text-center">
<h1>
اگر سوالی دارید،
<br>
ما اینجا هستیم تا به شما کمک کنیم.
<br>
<span class="themecolor">با ما تماس بگیرید</span>
</h1>
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-icon1.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<p>
بهترین و سریع‌ترین راه برای درخواست‌های پشتیبانی ارسال تیکت است. ارسال تیکت از داخل پنل کاربری در دسترس شما قرار دارد.همچنین با پاسخ کارشناسان به تیکت ، به شما از طریق پیامک اطلاع رسانی خواهد شد.
</p>
</div>
</div>
<div class="row" data-col="one">
<div class="col-12 column_divider">
<hr class="no_line" style="margin: 0 auto 30px auto;">
</div>
<div class="col-12 column_divider">
<hr style="margin: 0 auto 10px; background-color: rgba(255, 255, 255, 0.2);">
</div>
<div class="col-12 column_divider">
<hr class="no_line" style="margin: 0 auto 90px auto;">
</div>
</div>
<div class="row" data-col="one">
<div class="col-md-4">
<div class="column_attr clearfix mobile_align_center" style="border-left: 1px solid rgba(255, 255, 255, 0.2);">
<h6>نشانی</h6>
<p>
ایران، <br>
کرمانشاه شهرک صنعتی اسلام آباد غرب <br>
خیابان کارگر
پلاک 2
</p>
</div>
</div>
<div class="col-md-4">
<div class="column_attr clearfix mobile_align_center" style="padding: 0 4%;">
<h6 style="margin-bottom: 0px;">تلفن</h6>
<h4><a class="themecolor" href="tel:08345323211">083-4532-3211</a></h4>
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h6 style="margin-bottom: 0px;">پشتیبانی از طریق شبکه‌های اجتماعی</h6>
<h4>
<a class="themecolor" href="tel:09183282405"><span>0098-9183282405</span></a>
</h4>
</div>
</div>
<div class="col-md-4">
<div class="column_attr clearfix mobile_align_center" style="padding: 0 4%;">
<h6 style="margin-bottom: 0px;">آموزش</h6>
<h4>
<a class="themecolor" href="#"><span>training@cdn.hesabix.ir</span></a>
</h4>
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h6 style="margin-bottom: 0px;">پشتیبانی</h6>
<h4>
<a class="themecolor" href="#"><span>support@cdn.hesabix.ir</span></a>
</h4>
</div>
</div>
<div class="col-12">
<hr class="no_line" style="margin: 0 auto 20px auto;">
</div>
<div class="col-md-4">
<div class="placeholder">&nbsp;</div>
</div>
<div class="col-md-4">
<div class="column_attr clearfix align_center" style="padding: 15px 15px 0; border-radius: 41px; border: 1px solid #3a64fb;">
<h5>
<span style="margin-left: 10px;">با ما آشنا شوید</span><a style="margin-left: 10px;" href="#"><i class="fab fa-facebook" style="color: #ffffff;"></i></a>
<a class="text-warning" style="margin-left: 10px;"target="_blank" href="https://t.com/hesabix.acc"> تلگرام</i></a>
<a class="text-warning" style="margin-left: 10px;" target="_blank" href="https://instagram.com/hesabix.acc">اینستاگرام</a>
</h5>
</div>
</div>
</div>
</div>
</div>
<div class="section mcb-section equal-height-wrap" style="padding-top: 60px; padding-bottom: 40px; background-color: #c0f8d1; background-image: url(images/wallet2-section-bg3.svg); background-repeat: repeat; background-position: center;">
<div class="container">
<div class="row">
<div class="col-md-3" data-col="one-fourth">
<div class="image_frame image_item no_link scale-with-grid no_border">
<div class="image_wrapper"><img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-home-pic4.png') }}" alt="wallet2-home-pic4" width="780" height="565"></div>
</div>
</div>
<div class="col-md-6" data-col="one-second">
<div class="column_attr clearfix align_center" style="padding: 0 5%;">
<h2><span style="color: #12304a;">همین حالا شروع کنید و امور مالی خود را شفاف و منظم کنید</span></h2>
</div>
</div>
<div class="col-md-3" data-col="one-fourth">
<hr class="no_line" style="margin: 0 auto 40px auto;">
<div class="button_align align_center">
<a class="button button_full_width button_size_2" href="https://app.hesabix.ir/user/register"><span class="button_label">عضویت رایگان</span></a>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,112 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}سوالات متداول{% endblock %}
{% block body %}
<div class="container">
<div class="row">
<div class="col">
<div class="block-content bg-white rounded-3">
<div class="pb-3">
<h3>سوالات متداول</h3>
<div class="text-09">
<h2 class="text-bold text-primary">
ابر چیست؟
</h2>
<p class="prices-faq-answer text-secondary">
ابر زیرساختی مجازی از منابع محاسباتی و ذخیره‌سازی داده است که از طریق اینترنت به کاربران ارائه می‌شود. این منابع می‌توانند شامل سرورها، فضای ذخیره‌سازی داده، شبکه‌ و تجهیزات مجازی‌سازی باشند.
</p>
</div>
<hr>
<div class="text-09">
<h2 class="text-bold text-primary">
نرم ‌افزار حسابداری ابری چیست؟
</h2>
<p class="prices-faq-answer text-secondary">
نرم افزار حسابداری ابری که به آن نرم افزار حسابداری آنلاین هم می‌گویند، نرم افزاری است که به شما کمک می‌کند دفاتر حسابداری خود را آنلاین ثبت و نگهداری کنید. نرم افزار حسابداری ابری مانند حسابیکس به جای اینکه روی رایانه رومیزی یا سرورهای سازمان (در محل مشتری) نصب شود، در فضای ابری قرار دارد. همین ویژگی باعث می‌شود تا به داده‌های مالی و امکانات سیستم از هر دستگاه آنلاینی در هر زمانی و مکانی دسترسی داشته باشید.
</p>
</div>
<hr>
<div class="text-09">
<h2 class="text-bold text-primary">
آیا امکان قطع شدن حسابیکس وجود دارد؟
</h2>
<p class="prices-faq-answer text-secondary">
24 ساعته و با ضریب دسترسی بالای 99 درصد، دسترسی به حسابیکس وجود دارد.
</p>
</div>
<hr>
<div class="text-09">
<h2 class="text-bold text-primary">
آیا حسابیکس آنلاین است یا نیاز به دانلود و نصب نرم افزار است؟
</h2>
<p class="prices-faq-answer text-secondary">
شما نیاز به دانلود و نصب هیچ نرم افزاری ندارید. حسابیکس کاملاً آنلاین است
و شما پس از ثبت نام می توانید وارد حساب کاربری خود شده و حسابداری خود را شروع کنید.
</p>
</div>
<hr>
<div class="text-09">
<h2 class="text-bold text-primary">
آیا برای اپ موبایل هزینه جداگانه ای باید بپردازم؟
</h2>
<p class="prices-faq-answer text-secondary">
خیر، اپ موبایل حسابیکس رایگان بوده و شما با همان اکانت خود
که در وب سایت وارد می شوید می توانید وارد اپ موبایل هم شوید
و نیازی به پرداخت هزینه جداگانه نیست.
</p>
</div>
<hr>
<div class="text-09">
<h2 class="text-bold text-primary">
چقدر طول می‌کشد تا به حسابیکس مسلط شویم؟
</h2>
<p class="prices-faq-answer text-secondary">
فقط کافی است کار با حسابیکس را آغاز کنید. متوجه می‌شوید که تجربه کاربری نرم‌افزار طوری است که با حداقل زمان به نرم‌افزار مسلط شوید.همچنین می‌توانید از بخش دانشنامه به مطالب و ویدئوهای آموزشی دسترسی داشته باشید.
</p>
</div>
<hr>
<div class="text-09">
<h2 class="text-bold text-primary">
آیا برای کار با حسابیکس نیاز به دانش حسابداری است؟
</h2>
<p class="prices-faq-answer text-secondary">
خیر، حسابیکس بگونه ای طراحی شده که تقریبا همه کارهای لازم بصورت اتوماتیک انجام می شوند.
به عنوان مثال با ثبت فاکتور فروش، سند حسابداری مربوطه بصورت اتوماتیک ثبت می شود، همینطور در مورد
سایر عملیات های حسابداری مثل دریافت، پرداخت، ضایعات و ...
<br>
اگر چه حسابداران و افرادی که دانش حسابداری دارند نیز می توانند بخوبی با حسابیکس کار کنند
و از مزایای دانش خود بهره ببرند.
</p>
</div>
<hr>
<div class="text-09">
<h2 class="text-bold text-primary">
نسخه پشتیبان در این نرم‌افزار چگونه تهیه می‌شود؟
</h2>
<p class="prices-faq-answer text-secondary">
حسابیکس، خودکار و روزانه، از اطلاعات شما نسخه پشتیبان تهیه می‌کند؛ بنابراین نگرانی بابت از بین رفتن اطلاعات وجود ندارد.بعلاوه بصورت خودکار هر روز از داده های کاربران نسخه پشتیبان تهیه و تمامی داده ها بصورت رمزنگاری شده روی فضای ابری نگهداری می شوند.همچنین کاربران می توانند نسخه مستقیم پایگاه داده را با تماس با بخش پشتیبانی دریافت کنند.
</p>
</div>
<hr>
<div class="text-09">
<h2 class="text-bold text-primary">
آینده نرم‌افزارهای حسابداری ابری چیست؟
</h2>
<p class="prices-faq-answer text-secondary">
به نظر می‌رسد با امکانات متمایز این تکنولوژی، در آینده نزدیک نرم‌افزارهای سنتی حذف شوند و با نرم‌افزارهای ابری جایگزین شوند. حدود 70% کسب‌وکارهای کوچک و متوسط در دنیا نرم‌افزار حسابداری ابری را به نرم‌افزار حسابداری سنتی ترجیح می‌دهند. این روند در ایران در حال شکل‌گیری است.
</p>
</div>
<hr>
<div class="text-09">
<h2 class="text-bold text-primary">
اگر اینترنت قطع شود امکان کار با حسابیکس وجود دارد؟
</h2>
<p class="prices-faq-answer text-secondary">
برای استفاده از نرم افزارهای ابری شما باید به شبکه اینترنت دسترسی داشته باشید. به دلیل استفاده حسابیکس از سرورهای داخل ایران، با قطع شدن اینترنت بین المللی امکان دسترسی به دیتا برای کاربران حسابیکس وجود دارد و با محدودیتی مواجه نخواهند شد.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,83 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}ویژگی‌ها: خرید و فروش {% endblock %}
{% block body %}
<div class="container bg-white rounded-3">
<div class="row py-3">
<div class="col-md-12 align-items-md-center">
<div class="alert bg-warning m-auto" role="alert">
<div class="row align-items-center">
<div class="col-sm-12 col-md-8">
<h3 class="alert-heading fs-1 my-2">خرید و فروش</h3>
<p class="">
در حسابداری ابری حسابیکس، به راحتی فاکتورهای خرید و فروش را ثبت، مبلغ فاکتور را دریافت و پرداخت و رسید و حواله انبار را با چند کلیک صادر کنید.
</p>
</div>
<div class="col-sm-12 col-md-4">
<img class="img-fluid" src="{{ asset('/img/features/buy_sell.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2"> صدور فاکتور </h4>
<p class="mb-0 text-muted">در نرم‌افزار حسابداری حسابیکس، به راحتی و سهولت می توانید کالاها را به فاکتور اضافه کنید، همچنین امکان استفاده از بارکدخوان یا اسکن لیبل بارکد از طریق موبایل برای شما فراهم است. صدور فاکتور به سایر ارزها، محاسبه خودکار تخفیف و مالیات به صورت درصد و مبلغی، هزینه حمل و تعیین بازاریاب به ازای هر فاکتور از دیگر امکانات این بخش است.</p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-12">
<img class="img-fluid" src="{{ asset('/img/features/faktors_sell.png') }}">
</div>
</div>
</div>
</div>
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2">محاسبه پورسانت بازاریاب </h4>
<p class="mb-0 text-muted"> در صورت تعیین فروشنده فاکتور، پورسانت فروشنده محاسبه شده و سند هزینه بازاریابی به طور اتوماتیک در سیستم ثبت خواهد شد. همچنین امکان محاسبه و مشاهده گزارش پورسانت فروشندگان در مقاطع زمانی مختلف وجود دارد. </p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-12">
<img class="img-fluid" src="{{ asset('/img/features/persons.png') }}">
</div>
</div>
</div>
</div>
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2"> دریافت و پرداخت ذیل فاکتور </h4>
<p class="mb-0 text-muted"> بلافاصله پس از ثبت فاکتور می‌توانید مبلغ آن‌را در قالب قبض دریافت و پرداخت ثبت کنید. امکان دریافت و پرداخت در بانک، صندوق، چک یا خرج چک، همچنین به صورت اعتباری فراهم شده است. </p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-12">
<img class="img-fluid" src="{{ asset('/img/features/recive.png') }}">
</div>
</div>
</div>
</div>
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2"> رسید و حواله انبار </h4>
<p class="mb-0 text-muted"> بلافاصله پس از ثبت فاکتور، حواله انبار را به صورت سریع می‌توانید صادر کنید، کافی‌است که انبار مربوطه را به صورت کلی یا به ازای هر ردیف کالا انتخاب کنید. حواله به صورت خودکار صادر خواهد شد. </p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-12">
<img class="img-fluid" src="{{ asset('/img/features/storeroom_invoice.png') }}">
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,77 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}ویژگی‌ها: نصب نگهدار و پشتیبانی{% endblock %}
{% block body %}
<div class="container bg-white rounded-3">
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2"> بدون نیاز به نصب و کار بر روی هر دستگاهی </h4>
<p class="mb-0 text-muted"> برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید، فرقی نمی کند که این دستگاه تبلت یا موبایل باشد یا اینکه رایانه و لپ تاپ. نیاز نیست که هیچگونه نرم افزاری را نصب کنید. کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید. </p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-4">
<div class="item item-2x item-rounded ms-auto bg-xinspire-lighter">
<i class="fa fa-2x fa-computer text-xinspire-dark"></i>
</div>
</div>
<div class="col-4">
<div class="item item-2x item-rounded m-auto bg-xinspire-lighter">
<i class="fa fa-2x fa-redo fa-mobile text-xinspire-dark"></i>
</div>
</div>
<div class="col-4">
<div class="item item-2x item-rounded me-auto bg-xinspire-lighter">
<i class="fa fa-2x fa-redo fa-table text-xinspire-dark"></i>
</div>
</div>
</div>
</div>
</div>
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2"> بدون نیاز به نگهداری </h4>
<p class="mb-0 text-muted"> حسابیکس ویروسی نمی شود و از روی سیستم شما پاک نخواهد شد. حسابیکس بهم نمی‌ریزد و خراب شدنی نیست. حسابیکس نیاز به آپدیت و بروز رسانی ندارد و هربار که به حسابیکس وارد می‌شوید، آخرین نسخه موجود، تمیز و تازه، در دسترس شما قرار می‌گیرد. </p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-6">
<div class="item item-2x item-rounded ms-auto bg-xinspire-lighter">
<i class="fa fa-2x fa-server text-xinspire-dark"></i>
</div>
</div>
<div class="col-6">
<div class="item item-2x item-rounded me-auto bg-xinspire-lighter">
<i class="fa fa-2x fa-cogs fa-spin text-xinspire-dark"></i>
</div>
</div>
</div>
</div>
</div>
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2"> بدون نیاز به تهیه نسخه پشتیبان </h4>
<p class="mb-0 text-muted"> در حسابداری ابری حسابیکس لازم نیست که از اطلاعات خود پشتیبانی تهیه کنید (هرچند امکان پذیر است)، حسابیکس به طور خودکار هر شب از اطلاعات شما پشتیبانی تهیه کرده و آن را به مدت ۳۰ روز نگهداری می‌کند. </p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-6">
<div class="item item-2x item-rounded ms-auto bg-xinspire-lighter">
<i class="fa fa-2x fa-folder text-xinspire-dark"></i>
</div>
</div>
<div class="col-6">
<div class="item item-2x item-rounded me-auto bg-xinspire-lighter">
<i class="fa fa-2x fa-undo fa-spin text-xinspire-dark"></i>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,51 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}ویژگی‌ها: مدیریت کاربران {% endblock %}
{% block body %}
<div class="container bg-white rounded-3">
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2"> دعوت کاربران به کسب و کار </h4>
<p class="mb-0 text-muted"> در حسابداری آنلاین حسابیکس می‌توانید کاربران مختلفی را به کسب و کار خود دعوت کنید. همچنین هر کاربر می‌تواند همزمان در چندین کسب و کار مختلف مشارکت داشته باشد و در هر زمان نیز کسب و کار را ترک کند. </p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-12">
<img class="img-fluid" src="{{ asset('/img/features/users_list.png') }}">
</div>
</div>
</div>
</div>
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2">سطوح دسترسی پیشرفته </h4>
<p class="mb-0 text-muted"> مدیر سیستم می تواند دسترسی کاربر را بر روی کلیه امکانات سیستم تعیین کند. کلیه عملیات نظیر ذخیره، مشاهده، ویرایش یا حذف توسط مدیر سیستم برای کاربران قابل تنظیم است. </p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-12">
<img class="img-fluid" src="{{ asset('/img/features/users_perms.png') }}">
</div>
</div>
</div>
</div>
<div class="row py-3">
<div class="col-md-5 d-md-flex align-items-md-center">
<div>
<h4 class="mb-2"> تاریخچه فعالیت کاربران </h4>
<p class="mb-0 text-muted"> تمامی فعالیت های صورت گرفته بر روی کلیه اطلاعات سیستم توسط کاربران در سیستم به صورت لاگ ذخیره می شود. سابقه تغییرات برای کلیه اسناد و اطلاعات ثبت شده در سیستم قابل مشاهده و گزارش گیری است. </p>
</div>
</div>
<div class="col-md-6 offset-md-1 d-md-flex align-items-md-center">
<div class="block block-rounded block-fx-pop row g-sm w-100 py-4 my-3">
<div class="col-12">
<img class="img-fluid" src="{{ asset('/img/features/users_logs.png') }}">
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,84 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}راهنمای بخش {% if items | length != 0 %}{{ items.0.cat }}{% endif %}{% endblock %}
{% block description %}{{ block('title') }}{% endblock %}
{% block body %}
<div class="container">
<div class="row">
<div class="col">
<div class="block-content bg-white rounded-3">
<div class="pb-3">
<h3 class="mb-3">راهنمای استفاده از حسابیکس</h3>
<div class="row">
<div class="col-sm-12 col-md-4">
<ul class="list-group mb-3">
<li class="list-group-item">
<a href="/front/help/guide/general">
نگاه کلی
</a>
</li>
<li class="list-group-item">
<a href="/front/help/guide/person">
اشخاص (طرف حساب ها)
</a>
</li>
<li class="list-group-item">
<a href="/front/help/guide/commodity">
کالاها و خدمات
</a>
</li>
<li class="list-group-item">
<a href="/front/help/guide/banks">
مدیریت حساب های بانکی،تنخواه‌گردان،صندوق‌ها و انتقال بین حساب‌ها
</a>
</li><li class="list-group-item">
<a href="/front/help/guide/buy">
خرید و هزینه
</a>
</li><li class="list-group-item">
<a href="/front/help/guide/sell">
فروش و درآمد
</a>
</li><li class="list-group-item">
<a href="/front/help/guide/reports">
گزارشات
</a>
</li><li class="list-group-item">
<a href="/front/help/guide/settings">
تنظیمات
</a>
</ul>
</div>
<div class="col-sm-12 col-md-8">
{% if items | length == 0 %}
<div class="text-center">
<h3 class="text-warning">
فعلا راهنمایی وجود ندارد.
</h3>
</div>
{% else %}
<div class="accordion" id="accordionExample">
{% for item in items %}
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapse{{ item.id }}" aria-expanded="true" aria-controls="collapseOne">
<i class="fa fa-fast-backward me-2"></i>
{{ item.title}}
</button>
</h2>
<div id="collapse{{ item.id }}" class="accordion-collapse collapse {% if loop.first %}show{% endif %}" data-bs-parent="#accordionExample">
<div class="accordion-body bg-white">
{{ item.body | raw }}
</div>
</div>
</div>
{% endfor %}
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,66 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}
حسابیکس باکس رابط ویندوزی حسابیکس
{% endblock %}
{% block body %}
<main
id="main-container p-0 m-0">
<!-- Hero -->
<div class="bg-image">
<div class="bg-black-75">
<div class="content content-top content-full text-center">
<h1 class="text-white">
<i class="fa fa-shop"></i>
</h1>
<h1 class="fw-bold text-white mt-5 mb-3">حسابیکس باکس رابط ویندوزی حسابیکس</h1>
<h2 class="h3 fw-normal text-white-75 mb-5">
رابط تحت ویندوز حسابیکس با نام حسابیکس باکس جهت ارتباط با حسابیکس بر روی بستر ویندوز توسعه داده شده است و هماکنون در مرحله آزمایشی قرار دارد.
</h2>
<a to="#">
<a target="_blank" href="https://github.com/morrning/hesabixBox/releases" class="btn btn-primary rounded-pill fs-base px-3 py-2 me-2 m-1">
<i class="fa fa-user-circle me-1"></i>
دریافت حسابیکس باکس
</span>
</a>
<br>
<i class="fa fa-arrow-down text-white"></i>
</div>
</div>
</div>
<!-- END Hero -->
<!-- Page Content -->
<div class="container-fluid">
<div class="row justify-content-center">
<div
class="col-sm-11 py-2">
<!-- Story -->
<article class="story justify-content-between">
<div class="rounded-3 bg-white p-3 mb-3">
<div class="row">
<div class="col-sm-12 col-md-12">
<p>
برای اتصال پرینتر‌های ابری الزاما باید این نرم افزار بر روی رایانه مورد نظر نصب باشد.
</p>
</div>
</div>
<h2 class="text-primary">پیش نیاز‌ها:</h2>
<ul>
<li>
Dotnet framework 6 runtime
</li>
<li>
Adobe Acrobat Reader 2010 یا نسخه بالاتر
</li>
</ul>
</div>
</article>
<!-- END Story -->
</div>
</div>
</div>
<!-- END Page Content -->
</main>
{% endblock %}

View file

@ -1,338 +0,0 @@
{% extends "base-betheme.html.twig" %}
{% block title %}
نرم افزار حسابداری آنلاین ، متن باز و کاملا رایگان
{% endblock %}
{% block body %}
<div class="px-4 py-3 text-center">
<div class="row">
<div class="col-sm-12 col-md-6 mb-2 pt-4">
<h1 class="fw-bold text-primary-darker">
<img class="" src="/img/logo-blue.png" alt="حسابیکس لوگو" width="72" height="72">
حسابداری آنلاین حسابیکس
</h1>
<p class="lead mb-4">
برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید، فرقی نمی‌کند که این دستگاه تبلت یا موبایل باشد یا اینکه رایانه و لپ تاپ.
نیاز نیست که هیچگونه نرم افزاری را نصب کنید. کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید.
</p>
<div class="d-grid gap-2 d-sm-flex justify-content-sm-center">
<a href="{{ twigFunctions.systemSettings().appSite }}/user/login" class="btn btn-success btn-lg px-4 gap-3">
<i class="fa fa-door-open"></i>
ورود | عضویت رایگان
</a>
{% if is_granted('ROLE_ADMIN') %}
<a href="/app/dashboard" class="btn btn-alt-danger btn-lg px-4 gap-3">
<i class="fa fa-door-open"></i>
پنل مدیریت
</a>
{% endif %}
</div>
</div>
<div class="col-sm-12 col-md-6 mb-2">
<img alt="پیش نمایش حسابیکس" class="img-fluid rounded-3" src="/img/cover.jpg"/>
</div>
</div>
</div>
<div class="container py-3 d-block d-sm-none">
<div class="row">
<div class="col-12 d-md-flex align-items-md-center">
<div class="block block-rounded w-100 my-3 bg-image text-center bg-primary-op">
<div class="block-content block-content-full bg-white-90">
<img alt="" class="img-avatar img-avatar96 img-avatar-thumb" src="{{asset('/img/logo-blue.png')}}">
<p class="text-black-75 fw-medium mb-0">نتیجه اعتماد کاربران</p>
</div>
<div class="block-content block-content-full bg-body-extra-light">
<div class="row g-sm my-2">
<div class="col-4">
<p class="mb-2">
<i class="fa fa-fw fa-2x fa-shop text-muted"></i>
</p>
<p class="fs-sm mb-0">
{{ business | number_format }}
کسب‌و‌کار
</p>
</div>
<div class="col-4">
<p class="mb-2">
<i class="fa fa-fw fa-2x fa-user-tie text-muted"></i>
</p>
<p class="fs-sm mb-0">
{{ users | number_format }}
کاربر
</p>
</div>
<div class="col-4">
<p class="mb-2">
<i class="fa fa-fw fa-2x fa-money-bill-wave text-muted"></i>
</p>
<p class="fs-sm mb-0">
{{ docs | number_format }}
سند
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container d-none d-sm-block">
<div class="row items-push py-5">
<div class="col-sm-3 col-xl-3 mb-2">
<a class="block block-rounded block-fx-pop text-center h-100 mb-0 border border-primary" href="javascript:void(0)">
<div class="block-content block-content-full">
<div class="item item-circle bg-primary-lighter mx-auto my-3">
<i class="fa fa-users text-primary"></i>
</div>
<div class="display-5 fw-bold">
{{ users | number_format }}
</div>
<div class="text-muted mt-1">
کاربران
</div>
</div>
</a>
</div>
<div class="col-sm-3 col-xl-3 mb-2">
<a class="block block-rounded block-fx-pop text-center h-100 mb-0 border border-primary" href="javascript:void(0)">
<div class="block-content block-content-full">
<div class="item item-circle bg-xinspire-lighter mx-auto my-3">
<i class="fa fa-home-user text-xinspire-dark"></i>
</div>
<div class="display-5 fw-bold">
{{ business | number_format }}
</div>
<div class="text-muted mt-1">
کسب‌و‌کارها
</div>
</div>
</a>
</div>
<div class="col-sm-3 col-xl-3 mb-2">
<a class="block block-rounded block-fx-pop text-center h-100 mb-0 border border-primary" href="javascript:void(0)">
<div class="block-content block-content-full">
<div class="item item-circle bg-xsmooth-lighter mx-auto my-3">
<i class="fa fa-paperclip text-xsmooth"></i>
</div>
<div class="display-5 fw-bold">
{{ docs | number_format }}
</div>
<div class="text-muted mt-1">
اسناد
</div>
</div>
</a>
</div>
<div class="col-sm-3 col-xl-3 mb-2">
<a class="block block-rounded block-fx-pop text-center h-100 mb-0 border border-primary" href="javascript:void(0)">
<div class="block-content block-content-full">
<div class="item item-circle bg-xplay-lighter mx-auto my-3">
<i class="fa fa-box text-xplay"></i>
</div>
<div class="display-5 fw-bold">
780,000+
</div>
<div class="text-muted mt-1">
کالاها‌و‌خدمات
</div>
</div>
</a>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-6 mb-2">
<div class="col-12 mb-2">
<div class="card">
<div class="card-body">
<h5 class="card-title text-primary-dark">
حسابیکس چیست؟
</h5>
<p class="card-text">
حسابیکس اولین نرم افزار کامل حسابداری تحت وب است. این نرم افزار بر اساس فناوری رایانش ابری ساخته شده است. یعنی کلیه اطلاعات شما بر روی سرورهای حسابیکس قرار می گیرد. ما امنیت اطلاعات و حریم خصوصی کلیه کاربران را به طور کامل تضمین می کنیم. برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید، فرقی نمی کند که این دستگاه تبلت یا موبایل باشد یا اینکه رایانه و لپ تاپ. نیاز نیست که هیچگونه نرم افزاری را نصب کنید. کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید.
</p>
</div>
</div>
</div>
<div class="col-12 mb-2">
<div class="card">
<div class="card-body">
<h5 class="card-title text-primary-dark">
ساده و قدرتمند
</h5>
<p class="card-text">
برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید، مهم نیست که این دستگاه تبلت یا موبایل باشد یا اینکه رایانه و لپ تاپ.
نیاز نیست که هیچگونه نرم افزاری را نصب کنید. کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید.
</p>
</div>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6 mb-2">
<div class="row">
<div class="col-12 mb-2">
<div class="card">
<div class="card-body">
<h5 class="card-title text-primary-dark">
نقاط قوت و تمایز
</h5>
<p class="card-text">
در حسابیکس می توانید فاکتورهای مشتریان را به صورت آنلاین برای آنها ارسال کنید، مشتری نیز می تواند فاکتور یا حتی مانده بدهی خود را به صورت آنلاین پرداخت کند. کلیه اسناد مربوطه نیز توسط نرم افزار به صورت اتوماتیک صادر می شوند. از سوی دیگر ذینفعان کسب و کار شما، مانند مشتریان یا تامین کنندگان، می توانند به صورت آنلاین و بروز، کارت حساب خود را مشاهده کنند.
</p>
</div>
</div>
</div>
<div class="col-12 mb-2">
<div class="card">
<div class="card-body">
<h5 class="card-title text-primary-dark">
سریع و به روز
</h5>
<p class="card-text">
با وجود اینکه حسابیکس بر روی بستر اینترنت ارائه می شود، این نرم افزار بسیار سریع است. تجربه کاربری ارائه شده در حسابیکس نه تنها از لحاظ سرعت با نرم افزارهای تحت ویندوز رقابت می کند بلکه در بسیاری از موارد عملیات را سریعتر انجام می دهد. به علاوه حسابیکس همیشه بروز است. هر زمان که به سیستم وارد می شوید، آخرین نسخه از نرم افزار در دسترس شما قرار می گیرد. این امکانات به رایگان در اختیار کلیه کاربران قرار می گیرد.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="py-3 py-sm-5">
<div class="block block-rounded block-transparent bg-body">
<div class="block-content block-content-full">
<div class="row justify-content-sm-between align-items-center p-md-3">
<div class="col-sm-6">
<h4 class="mb-2">
راه اندازی حسابیکس در کسب و کار شما
</h4>
<p class="text-muted mb-sm-0">
حسابیکس بسیار انعطاف پذیر و برای مدیریت اکثر کسب و کارها کارآمد است.برای آموزش راه اندازی اولیه کسب و کار خود در حسابیکس کافی است با ما تماس بگیرید .
راه‌اندازی کسب و کار و مشاوره با کارشناسان ما کاملا رایگان است
</p>
</div>
<div class="col-sm-6 text-sm-end">
<a class="btn btn-primary px-4 py-2 mt-1" href="{{ path('general_contact') }}">
تماس با ما
<i class="fa fa-fw fa-arrow-left opacity-50 ms-1"></i>
</a>
<a class="btn btn-info px-4 py-2 mt-1" href="{{ twigFunctions.systemSettings().appSite }}/user/login">
ارسال تیکت
<i class="fa fa-fw fa-arrow-left opacity-50 ms-1"></i>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12">
<div class="block block-rounded block-transparent">
<div class="bg-image">
<div class="block-content block-content-full bg-white rounded-2">
<div class="row px-0 justify-content-sm-between align-items-center">
<div class="col-sm-12">
<h4 class="mb-2 text-primary-dark">
<i class="fa fa-user-plus"></i>
جدیدترین عضو حسابیکس...
</h4>
<p class=" mb-sm-0">
به جدیدترین عضو حسابیکس
<span class="text-primary">
{{ lastBusinessOwner }}
</span>
که کسب‌و‌کار خود را با نام
<span class="text-primary">
{{ lastBusinessName }}
</span>
ایجاد کرده‌اند خوش‌آمد می‌گوییم.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container mb-3 d-none d-sm-block">
<div class="row">
<div class="col-12 py-2 text-center">
<h1>حامیان حسابیکس</h1>
</div>
<div class="col-sm-12 col-md-4">
<div class="card">
<img src="{{ asset('/banners/raddata.png') }}" class="card-img-top" alt="راددیتا">
<div class="card-body text-center">
<h5 class="card-title text-primary">مرکز ارتباطات راد دیتا</h5>
<p class="card-text">پیشرو در ارائه خدمات فنی مهندسی و سرویس های مرکز داده در ایران و خارج با بالاترین کیفیت و قیمت مناسب</p>
<a href="https://raddata.ir" target="_blank" class="btn btn-primary">وب سایت</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4">
<div class="card">
<img src="{{ asset('/img/parspack-black.png') }}" class="card-img-top bg-black p-3" alt="پارس‌پک">
<div class="card-body text-center">
<h5 class="card-title text-primary">پارس‌پک</h5>
<p class="card-text">از یک استارت‌آپ کوچک تا سازمانی بزرگ پشتیبان‌تان هستیم. پیشرو در راهکارهای ابری</p>
<a href="https://parspack.com" target="_blank" class="btn btn-primary">وب سایت</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4">
<div class="card">
<img src="{{ asset('/img/melipayamak-card.png') }}" class="img-flude card-img-top bg-white p-3" alt="ملی پیامک">
<div class="card-body text-center">
<h5 class="card-title text-primary">سامانه پیام کوتاه ملی‌پیامک</h5>
<p class="card-text">ملی پیامک یک سامانه پیامکی معمولی نیست! یک ابزار قدرتمند است برای آنکه مشتری را جذب کنید، از او نگهداری کنید، یک رابطه پایدار بسازید و خدمات بهتری ارائه دهید. وقت آن رسیده که نگاهی بزرگ‌تر به پیام کوتاه داشته باشیم.
</p>
<a href="https://www.melipayamak.com/?utm_source=hesabix&utm_medium=affiliate&utm_campaign=hesabix-camp" target="_blank" class="btn btn-primary">
<i class="fa fa-link me-2"></i>
سفارش پنل پیامک
</a>
</div>
</div>
</div>
</div>
</div>
<div class="content content-boxed mt-0 pt-0">
{% if blogPosts | length > 0 %}
<h3>
وبلاگ حسابیکس
</h3>
<div class="row items-push">
{% for item in blogPosts %}
<div class="col-sm-12 col-md-4">
<a class="block block-rounded block-transparent d-md-flex align-items-md-stretch bg-image h-100 mb-0 js-click-ripple-enabled" data-toggle="click-ripple" href="{{ path('general_blog_post',{'url':item.url}) }}" style="background-image: url('/blog/media/{{ item.img }}'); overflow: hidden; position: relative; z-index: 1;">
<div class="block-content block-content-full bg-black-50">
<span class="d-inline-block py-1 px-2 rounded bg-black-75 fs-sm fw-bold text-uppercase text-white">
{{ item.cat.label }}
</span>
<div class="py-6">
<div class="fs-sm mb-2">
<i class="fa fa-star text-warning"></i>
<i class="fa fa-star text-warning"></i>
<i class="fa fa-star text-warning"></i>
<i class="fa fa-star text-warning"></i>
<i class="fa fa-star text-warning"></i>
</div>
<h3 class="fw-bold text-white mb-1">
{{ item.title }}
</h3>
</div>
<span class="fs-sm fw-bold text-uppercase text-white-75">
{{ item.submitter.fullname }}
|
{{ Jdate.jdate('Y/n/d',item.dateSubmit) }}
</span>
</div>
</a>
</div>
{% endfor %}
</div>
{% endif %}
</div>
{% endblock %}

View file

@ -1,270 +0,0 @@
{% extends "base-betheme.html.twig" %}
{% block title %}
نرم افزار حسابداری آنلاین ، متن باز و کاملا رایگان
{% endblock %}
{% block body %}
<div class="section mcb-section" style="padding-top: 90px; padding-bottom: 100px; background-image: url({{ asset('betheme/wallet2/images/wallet2-section-bg2.png') }}); background-repeat: no-repeat; background-position: right top;">
<div class="container">
<div class="row">
<div class="col-12 text-center" data-col="one">
<h2>حسابیکس چیست؟ </h2>
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-icon1.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<p>
حسابیکس اولین نرم افزار کامل حسابداری تحت وب است. این نرم افزار بر اساس فناوری رایانش ابری ساخته شده است. یعنی کلیه اطلاعات شما بر روی سرورهای حسابیکس قرار می گیرد. ما امنیت اطلاعات و حریم خصوصی کلیه کاربران را به طور کامل تضمین می کنیم. برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید، فرقی نمی کند که این دستگاه تبلت یا موبایل باشد یا اینکه رایانه و لپ تاپ. نیاز نیست که هیچگونه نرم افزاری را نصب کنید. کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید. </p>
<hr class="no_line" style="margin: 0 auto 70px auto;">
</div>
<div class="col-md-4 text-center mb-1" data-col="one-third" style="padding: 0 1%;">
<div class="column_attr clearfix align_center" style="background-color: #43c9c7; padding: 50px 30px 35px; border-radius: 12px;">
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-pricing-pic2.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h4>
سریع و امن
</h4>
<p>
با وجود اینکه حسابیکس بر روی بستر اینترنت ارائه می شود، این نرم افزار بسیار سریع است. تجربه کاربری ارائه شده در حسابیکس نه تنها از لحاظ سرعت با نرم افزارهای تحت ویندوز رقابت می کند بلکه در بسیاری از موارد عملیات را سریعتر انجام می دهد. به علاوه حسابیکس همیشه بروز است. هر زمان که به سیستم وارد می شوید، آخرین نسخه از نرم افزار در دسترس شما قرار می گیرد. این امکانات به رایگان در اختیار کلیه کاربران قرار می گیرد.
</p>
</div>
</div>
<div class="col-md-4 text-center mb-1" data-col="one-third" style="padding: 0 1%;">
<div class="column_attr clearfix align_center" style="background-color: #ff6868; padding: 50px 30px 35px; border-radius: 12px;">
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-pricing-pic3.svg') }}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<h4>
نقاط قوت و تمایز
</h4>
<p>
در حسابیکس می توانید فاکتورهای مشتریان را به صورت آنلاین برای آنها ارسال کنید، مشتری نیز می تواند فاکتور یا حتی مانده بدهی خود را به صورت آنلاین پرداخت کند. کلیه اسناد مربوطه نیز توسط نرم افزار به صورت اتوماتیک صادر می شوند. از سوی دیگر ذینفعان کسب و کار شما، مانند مشتریان یا تامین کنندگان، می توانند به صورت آنلاین و بروز، کارت حساب خود را مشاهده کنند.
</p>
</div>
</div>
<div class="col-md-4 text-center mb-1" data-col="one-third" style="padding: 0 1%;">
<div class="column_attr clearfix align_center" style="background-color: #49a8ff; padding: 50px 30px 35px; border-radius: 12px;">
<img class="scale-with-grid" src="{{ asset('betheme/wallet2/images/wallet2-pricing-pic4.svg') }}">
<hr class="no_line" style="margin: 0 auto 30px auto;">
<h4>
ساده و قدرتمند
</h4>
<p>
برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید، مهم نیست که این دستگاه تبلت یا موبایل باشد یا اینکه رایانه و لپ تاپ. نیاز نیست که هیچگونه نرم افزاری را نصب کنید. کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید.
</p>
</div>
</div>
<div class="col-12" data-col="one">
<hr class="no_line" style="margin: 0 auto 60px auto;">
</div>
<div class="col-12" data-col="one">
<div class="column_attr clearfix align_center">
<h2>
نتیجه اعتماد کاربران
</h2>
</div>
</div>
<div class="col-12" data-col="one">
<hr class="no_line" style="margin: 0 auto 60px auto;">
</div>
<div class="col-xs-6 col-sm-6 col-md-3" data-col="one-fourth">
<div class="column_attr clearfix align_center bg-contain" style="background-image: url('{{asset('betheme/wallet2/images/wallet2-wrap-bg1.svg')}}'); background-repeat: no-repeat; background-position: center; padding: 60px 60px 45px;">
<div class="google_font" style="font-family: 'PeydaWebFaNum', sans-serif; font-size: 48px; line-height: 48px; font-weight: 600; letter-spacing: 0px; color: #fff;">
<span class="counter-inline animate-math"><span class="number" data-to="{{ users }}">0</span></span>
</div>
<img class="scale-with-grid" src="{{asset('betheme/wallet2/images/wallet2-icon1.svg')}}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<p>کاربر</p>
</div>
</div>
<div class="col-xs-6 col-sm-6 col-md-3" data-col="one-fourth">
<div class="column_attr clearfix align_center bg-contain" style="background-image: url('{{asset('betheme/wallet2/images/wallet2-wrap-bg1.svg')}}'); background-repeat: no-repeat; background-position: center; padding: 60px 60px 45px;">
<div class="google_font" style="font-family: 'PeydaWebFaNum', sans-serif; font-size: 48px; line-height: 48px; font-weight: 600; letter-spacing: 0px; color: #fff;">
<span class="counter-inline animate-math"><span class="number" data-to="{{ business }}">0</span></span>
</div>
<img class="scale-with-grid" src="{{asset('betheme/wallet2/images/wallet2-icon1.svg')}}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<p>کسب‌و‌کار</p>
</div>
</div>
<div class="col-xs-6 col-sm-6 col-md-3" data-col="one-fourth">
<div class="column_attr clearfix align_center bg-contain" style="background-image: url('{{asset('betheme/wallet2/images/wallet2-wrap-bg1.svg')}}'); background-repeat: no-repeat; background-position: center; padding: 60px 60px 45px;">
<div class="google_font" style="font-family: 'PeydaWebFaNum', sans-serif; font-size: 48px; line-height: 48px; font-weight: 600; letter-spacing: 0px; color: #fff;">
<span class="counter-inline animate-math"><span class="number" data-to="{{ docs }}">0</span></span>
</div>
<img class="scale-with-grid" src="{{asset('betheme/wallet2/images/wallet2-icon1.svg')}}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<p>سند</p>
</div>
</div>
<div class="col-xs-6 col-sm-6 col-md-3" data-col="one-fourth">
<div class="column_attr clearfix align_center bg-contain" style="background-image: url('{{asset('betheme/wallet2/images/wallet2-wrap-bg1.svg')}}'); background-repeat: no-repeat; background-position: center; padding: 60px 60px 45px;">
<div class="google_font" style="font-family: 'PeydaWebFaNum', sans-serif; font-size: 48px; line-height: 48px; font-weight: 600; letter-spacing: 0px; color: #fff;">
<span class="counter-inline animate-math"><span class="number" data-to="286000">0</span></span>
</div>
<img class="scale-with-grid" src="{{asset('betheme/wallet2/images/wallet2-icon1.svg')}}">
<hr class="no_line" style="margin: 0 auto 15px auto;">
<p>کالا و خدمات</p>
</div>
</div>
<div class="col-12" data-col="one">
<hr class="no_line" style="margin: 0 auto 60px auto;">
</div>
<div class="col-12" data-col="one" style="padding: 0 10%;">
<hr class="no_line" style="margin: 0 auto 30px auto;">
<div class="column_attr clearfix" style="background-color: #3a64fb; padding: 15px 15px 0; border-radius: 41px;">
<p>
<span style="margin-left: 10px;"><i class="icon-info" style="color: #ffffff;"></i></span>
<span style="padding-bottom: 5px;">
حسابیکس بسیار انعطاف پذیر و برای مدیریت اکثر کسب و کارها کارآمد است.برای آموزش راه اندازی اولیه کسب و کار خود در حسابیکس کافی است با ما تماس بگیرید . راه‌اندازی کسب و کار و مشاوره با کارشناسان ما کاملا رایگان است
</span>
</p>
</div>
<hr class="no_line" style="margin: 0 auto 60px auto;">
<div class="button_align align_center">
<a class="button button_size_2 button_theme" href="{{path('general_contact')}}"><span class="button_label">تماس با ما</span></a>
</div>
</div>
<div class="col-12" data-col="one">
<hr class="no_line" style="margin: 0 auto 90px auto;">
</div>
</div>
</div>
</div>
{% endblock %}
{% block top_menu %}
<div class="mfn-main-slider mfn-rev-slider">
<!-- START Home Wallet2 REVOLUTION SLIDER 6.5.8 -->
<p class="rs-p-wp-fix"></p>
<rs-module-wrap id="rev_slider_1_1_wrapper" data-source="gallery" style="visibility: hidden; background: transparent; padding: 0; margin: 0px auto; margin-top: 0; margin-bottom: 0;">
<rs-module id="rev_slider_1_1" data-version="6.5.8">
<rs-slides>
<rs-slide style="position: absolute;" data-key="rs-1" data-title="اسلاید" data-in="o:0;" data-out="a:false;">
<img src="betheme/wallet2/images/dummy.png" class="rev-slidebg tp-rs-img rs-lazyload" data-lazyload="betheme/wallet2/images/wallet2-section-bg1.png" data-bg="p:center top;f:auto;r:repeat-x;" />
<!--
-->
<rs-layer
id="slider-1-slide-1-layer-1"
data-type="shape"
data-rsp_ch="on"
data-xy="x:r;yo:230px,230px,150px,150px;"
data-text="w:normal;s:20,20,12,12;l:0,0,15,15;"
data-dim="w:100%;h:460px,460px,287px,287px;"
data-basealign="slide"
data-ford="frame_0;frame_1;frame_2;frame_3;frame_999;"
data-frame_1="y:-1px,-1px,0px,0px;"
data-frame_999="o:0;st:w;"
data-frame_2="y:15px,15px,9px,9px;oX:50%;oY:50%;oZ:0;tp:600;e:power1.inOut;st:1500;sp:2500;"
data-frame_3="y:-15px,-15px,-9px,-9px;oX:50%;oY:50%;oZ:0;tp:600;e:power1.inOut;st:4000;sp:2500;"
data-tloop="f:frame_2;t:frame_3;"
style="z-index: 5; background-color: rgba(0, 0, 0, 0);"
>
<rs-bg-elem style="background: url('betheme/wallet2/images/wallet2-slider-pic2.svg') no-repeat right center; background-size: contain;"></rs-bg-elem>
</rs-layer>
<!--
-->
<rs-layer
id="slider-1-slide-1-layer-2"
data-type="text"
data-rsp_ch="on"
data-xy="x:c;xo:1px,1px,0,1px;yo:160px,160px,150px,150px;"
data-text="w:normal;s:47,47,50,50;l:57,57,55,55;fw:500;a:center;"
data-frame_999="o:0;st:w;"
style="z-index: 6; font-family: 'PeydaWebFaNum';"
>
همه امـــــور مالـــــی شما <br />
<span style="color: #88fcab;">در یک مکـــــان</span>
</rs-layer>
<!--
-->
<rs-layer
id="slider-1-slide-1-layer-3"
data-type="text"
data-rsp_ch="on"
data-xy="x:c;yo:310px,310px,194px,194px;"
data-text="w:normal;s:20,20,20,20;l:25,25,25,25;fw:500;"
data-vbility="t,t,f,t"
data-frame_999="o:0;st:w;"
style="z-index: 7; font-family: 'PeydaWebFaNum';"
class="text-center"
>
برای کار با حسابیکس فقط به یک دستگاه متصل به اینترنت نیاز دارید،
کافیست در سایت ثبت نام کرده و بلافاصله کسب و کار خود را مدیریت کنید.
حسابیکس کاملا رایگان و متن باز است.
</rs-layer>
<!--
-->
<a
id="slider-1-slide-1-layer-4"
class="rs-layer"
href="https://app.hesabix.ir"
target="_self"
data-type="button"
data-color="#224ce8"
data-rsp_ch="on"
data-xy="x:c;yo:360px,360px,280px,280px;"
data-text="w:normal;s:18,18,35,35;l:30,30,55,55;fw:600;"
data-padding="t:15;r:65;b:15;l:65;"
data-border="bor:41px,41px,41px,41px;"
data-frame_999="o:0;st:w;"
style="z-index: 8; background-color: #88fcab; font-family: 'PeydaWebFaNum'; margin-top:30px; margin-bottom:30px;"
>
ورود یا عضویت کاملا رایگان
</a>
<!--
-->
<rs-layer
data-type="image"
data-rsp_ch="on"
data-xy="x:c;xo:20px,20px,30px,30px;yo:480px,480px,420px,420px;"
data-text="w:normal;s:20,20,12,12;l:0,0,15,15;"
data-dim="w:814px,814px,700px,700px;h:557px,557px,479px,479px;"
data-ford="frame_0;frame_1;frame_2;frame_3;frame_999;"
data-frame_1="y:-1px,-1px,0px,0px;"
data-frame_999="o:0;st:w;"
data-frame_2="y:-5px,-5px,-3px,-3px;oX:50%;oY:50%;oZ:0;tp:600;e:power1.inOut;st:1500;sp:2500;"
data-frame_3="y:5px,5px,3px,3px;oX:50%;oY:50%;oZ:0;tp:600;e:power1.inOut;st:4000;sp:2500;"
data-tloop="f:frame_2;t:frame_3;"
style="z-index: 9;"
>
<img src="{{ asset('img/cover.jpg')}}" class="tp-rs-img rs-lazyload" data-lazyload="{{ asset('img/cover.jpg')}}" />
</rs-layer>
<!--
-->
</rs-slide>
</rs-slides>
</rs-module>
</rs-module-wrap>
<!-- END REVOLUTION SLIDER -->
</div>
<div class="section mcb-section equal-height-wrap" style="padding-top: 60px; padding-bottom: 40px; background-color: #c0f8d1; background-image: url({{asset('betheme/wallet2/images/wallet2-section-bg3.svgg')}}); background-repeat: repeat; background-position: center;">
<div class="container">
<div class="row">
<div class="col-md-3" data-col="one-fourth">
<div class="image_frame image_item no_link scale-with-grid no_border">
<div class="image_wrapper"><img class="scale-with-grid" src="{{asset('betheme/wallet2/images/wallet2-home-pic4.png')}}" alt="wallet2-home-pic4" width="780" height="565"></div>
</div>
</div>
<div class="col-md-6" data-col="one-second">
<div class="column_attr clearfix align_center" style="padding: 0 5%;">
<h2>
<span style="color: #12304a;">
همین حالا شروع کنید و امور مالی خود را سازماندهی کنید
</span>
</h2>
</div>
</div>
<div class="col-md-3" data-col="one-fourth">
<hr class="no_line" style="margin: 0 auto 40px auto;">
<div class="button_align align_center">
<a class="button button_full_width button_size_2" href="https://app.hesabix.ir/user/register">
<span class="button_label">عضویت</span>
</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

File diff suppressed because one or more lines are too long

View file

@ -1,59 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}حریم خصوصی{% endblock %}
{% block body %}
<div class="container">
<div class="row">
<div class="col">
<div class="block-content bg-white rounded-3">
<div class="container text-right">
<h3 style="color: dimgray; font-weight: bolder">سیاست حفظ اطلاعات و محرمانگی اطلاعات کاربران در حسابیکس </h3>
<hr>
<div style="margin-top: 25px;"></div>
<p>
حسابیکس معتقد است اصول حفظ حریم شخصی و اطلاعات کاربران بسیار مهم و حساس است. در این سند اصول محرمانگی اطلاعات حسابیکس و نیز راهکارهای حسابیکس برای حفظ حریم شخصی و اطلاعات کاربران سایت حسابیکس توضیح داده شده است.</p>
<p><strong>محتویات این سند</strong>
</p>
<ul>
<li>این سند شامل توضیحی درباره اطلاعات خصوصی ای است که حسابیکس از کاربران سایت جمع آوری می کند و نیز نحوه استفاده حسابیکس از این اطلاعات. این اطلاعات شامل مواردی است که مخصوص هر کاربر بوده و به کمک آن ها می توان کاربران حسابیکس را به صورت منحصر به فرد شناسایی نمود. برای نمونه می توان به نام، نشانی، نشانی الکترونیک (ایمیل)، شماره تلفن و سایر اطلاعاتی که به صورت عادی در دسترس عموم مردم نیست اشاره نمود.</li>
<li>این سند به مواردی که در اختیار حسابیکس نیست و حسابیکس هیچ کنترلی بر آن ها ندارد نمی پردازد. شرکت های مشتری خدمات حسابیکس و افراد ثالثی که در استخدام حسابیکس نیستند از جمله این موارد هستند.</li>
</ul>
<p><strong>اطلاعات جمع آوری شده و نحوه استفاده از آن ها</strong></p>
<ul>
<li>شما با ثبت نام و ارسال فرمهای سفارش و پشتیبانی در سایت حسابیکس اطلاعات خصوصی خود از قبیل نام، نشانی، نشانی الکترونیک و … را در اختیار حسابیکس قرار می دهید.</li>
<li>پس از ورود به سایت حسابیکس شما یک کاربر ناشناخته نیستید و اطلاعات مربوط به استفاده شما از خدمات حسابیکس نگهداری می گردد. این اطلاعات شامل اطلاعات پایه نرم افزار ، سفارشات و تراکنشها، سرویسهای مورد استفاده، اطلاعات فردی و مانند آن بوده ولی محدود به این موارد نیست.</li>
<li>حسابیکس کلیه تراکنش های شما از جمله تراکنش های مالی را جمع آوری و نگهداری می کند.</li>
<li>حسابیکس به صورت خودکار پس از ورود شما به سایت حسابیکس اطلاعاتی از قبیل IP شما، اطلاعات کوکی های حسابیکس و صفحاتی که مشاهده می کنید را جمع آوری و نگهداری می کند.</li>
<li>حسابیکس از این اطلاعات در راستای بعضی از مقاصد از قبیل ارتقاء خدمات حسابیکس، تهیه محتوای مناسب، برنامه های تبلیغاتی و مانند آن استفاده می کند.</li>
<li>حسابیکس اطلاعات شما را اجاره نمی دهد، نمی فروشد و به اشتراک نمی گذارد به جز در موارد زیر:
<ul>
<li>در صورت ادغام حسابیکس در یک شرکت دیگر. در این حالت قبل از به اشتراک گذاری اطلاعات شما، این موضوع به شما اطلاع داده شده و نظر شما را درباره ادامه استفاده از خدمات حسابیکس یا خروج کامل پرسیده می شود.</li>
<li>در صورت تخطی شما از قوانین <router-link to="terms">شرایط و ضوابط سرویسها</router-link> ، و در صورت وجود شاکی خصوصی نسبت به عملکرد شما، اطلاعات شما در اختیار مراجع قانونی قرار&nbsp;می گیرد.</li>
<li>در صورتی که مراجع قضایی اطلاعات شما را –به هر دلیلی- از حسابیکس بخواهند این اطلاعات در اختیار ایشان قرار می گیرد.</li>
</ul>
</li>
<li>حسابیکس ممکن است بر روی کامپیوتر شما کوکی ذخیره کرده و در مراجعات بعدی شما به سایت حسابیکس از آن استفاده کند.</li>
</ul>
<p><strong>ویرایش و تغییر اطلاعات شخصی</strong></p>
<ul>
<li>شما می توانید اطلاعات ثبت شده خود را در سایت حسابیکس تغییر دهید. این اطلاعات شامل کلیه اطلاعاتی است که در هنگام عضویت در حسابیکس آن ها را در سایت حسابیکس وارد نموده اید؛ مگر آنها که از لحاظ شناسایی هویت برای کارکرد حسابیکس ملاک امنیت حساب کاربری داشته باشد مثل ایمیل و نام خانوادگی و…</li>
<li>شما می توانید به طور کامل از حسابیکس و کلیه خدمات آن خارج شوید. در این حالت برخی از اطلاعات شما از حسابیکس حذف شده و تعدادی دیگر از آن ها حداقل به مدت یک سال بایگانی می شوند. این اطلاعات شامل نام، نام خانوادگی، نشانی الکترونیک، شماره تلفن همراه، پیام های ارسالی و مانند آن بوده ولی محدود به موارد فوق نیست.</li>
</ul>
<p><strong>محدودیت دسترسی به اطلاعات</strong></p>
<ul>
<li>حسابیکس دسترسی کارمندان خود به اطلاعات شما را محدود نموده و فقط کارمندانی که مستقیماً باید برای ارایه خدمات حسابیکس یا انجام وظایف خود در این راستا با شما در تماس باشند به این اطلاعات دسترسی دارند.</li>
<li>حسابیکس جهت حفظ امنیت اطلاعات محرمانه، ممکن است اطلاعات مهم مثل رمز عبور و … را به صورت رمز شده در پایگاه های داده خود ذخیره کند به نوعی که در صورت دسترسی ناخواسته و غیر مجاز به آن ها، این اطلاعات قابل استفاده توسط دیگران نباشد؛ اگر چه نمیتوانیم هیچ تضمینی در این رابطه به شما بدهیم.</li>
<li>امیدواریم كه بتوانیم به شما این تضمین را بدهیم كه از اطلاعات شخصی تان تحت بالاترین استانداردهای امنیتی استفاده خواهد شد. حسابیکس تلاش خواهد كرد كه تمامی راه های معقول را طی كند تا امنیت هر نوع اطلاعاتی را كه از شما در اختیار دارد،‌ حفظ كند. همچنین اطلاعات شخصی شما در شبكه های امنی ذخیره می شوند اما متاسفانه،‌ با وجود فناوری فوق و ادوات امنیتی، نمی توان ایمنی هیچ مخابره داده ای از طریق اینترنت را به صورت %100 تضمین كرد. بنابراین ما نمی توانیم این اطمینان را به صورت قطعی بدهیم كه اطلاعاتی كه برای ما می فرستید،‌ در حین ارسال (مخابره) در هر شرایطی در امان خواهند بود و علاوه بر آن نمی توانیم مسئولیت اتفاقات ناشی از دسترسی غیر قانونی به اطلاعات شخصی شما را قبول كنیم. (همانند دسترسی ISP ها به اطلاعات ارسالی از رایانه شما) حسابیکس مسئولیت عواقب ناشی از دستیابی غیر قانونی شخص یا گروه ثالثی به اطلاعات شخصی شما را نیز نخواهد پذیرفت.</li>
</ul>
<p><strong>سایت های لینک شده</strong><br>
این سایت ممكن است با وب سایت های دیگر (“سایت های لینك”) پیوند داشته باشد. سایت های لینك شده تحت نظارت حسابیکس نیستند و حسابیکس در مورد آنها مسئولیتی ندارد. شما باید توجه داشته باشید كه اطلاعات شخصی كه برای سایت های لینك می فرستید،‌ تحت نظارت خط مشی حریم خصوصی حسابیکس نخواهد بود و ما جداً توصیه می كنیم كه نسبت به سیستم حفظ حریم خصوصی و سیاست های امنیتی آنها اطلاع حاصل كنید.</p>
<p><strong>تغییرات در این سیاست ها</strong><br>
حسابیکس حق دارد در هر زمان بدون اطلاع قبلي در متن این سیاست نامه تغييرات ايجاد کند. اگرچه سعي ميشود از طريق ايميل کليه کاربران از تغييرات مطلع شوند ولي کاربران موظف اند با مراجعه مداوم به اين متن، از تغييرات آن مطلع گشته و در صورت مخالفت با آن ، درخواست قطع سرويس خود را نمايند و یا از سایت حسابیکس خارج شده و به آن مراجعه نکنند. در غير اين صورت تمام پيامد هاي احتمالي آن بر عهده کاربران خواهد بود .</p>
<p><strong>پرسش ها و پیشنهادها</strong><br>
در صورتی که درباره این سیاست ها پرسشی دارید یا پیشنهادهایی برای تغییرات و بهبود آن ها دارید، با استفاده از فرم ارتباط با ما آن را با تیم حسابیکس در میان بگذارید.</p>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,105 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}افزونه مدیریت تعمیرگاه)تعمیرکاران)
{% endblock %}
{% block body %}
<main
id="main-container p-0 m-0">
<!-- Hero -->
<div class="bg-image" style="background-image: url('/img/plugins/repservice.png');">
<div class="bg-black-75">
<div class="content content-top content-full text-center">
<h1 class="text-white">
<i class="fa fa-shop"></i>
</h1>
<h1 class="fw-bold text-white mt-5 mb-3">افزونه مدیریت تعمیرگاه</h1>
<h2 class="h3 fw-normal text-white-75 mb-5">
افزونه تعمیرکاران یکپارچه طراحی شد تا تمام نیازهای شما را در مدیریت تعمیرگاه و فروشگاه تان را بصورت کامل رفع
کند.
</h2>
<a to="#">
<span class="badge rounded-pill bg-primary fs-base px-3 py-2 me-2 m-1">
<i class="fa fa-user-circle me-1"></i>
خرید در بازار حسابیکس
</span>
</a>
<br>
<i class="fa fa-arrow-down text-white"></i>
</div>
</div>
</div>
<!-- END Hero -->
<!-- Page Content -->
<div class="container-fluid">
<div class="row justify-content-center">
<div
class="col-sm-11 py-2">
<!-- Story -->
<article class="story justify-content-between">
<div class="rounded-3 bg-white p-3 mb-3">
<div class="row">
<div class="col-sm-12 col-md-6">
<h3 class="text-primary mt-0">
افزونه مدیریت تعمیرگاه(تعمیرکاران)
</h3>
<p>
افزونه تعمیرکاران بهترین انتخاب برای مدیریت انواع مراکز تعمیر و خدمات و همچنین فروشگاه های در حال توسعه است؛ چرا که افزونه تعمیرکاران نیازی به نصب ندارد, همیشه با موبایل و کامپیوتر در دسترس است و رابط کاربری بسیار آسانی دارد و از همه مهمتر تمام نیازهای تعمیرگاه و فروشگاه را در قالب یک نرم افزار پشتیبانی می‌کند.
مناسب تمامی تعمیرگاه های تلفن همراه، کامپیوتر، خودرو، بردهای الکترونیکی، لوازم برقی، وسایل صوتی تصویری، یخچال فریزر، تلویزیون و…
</p>
</div>
<div class="col-sm-12 col-md-6">
<img class="img-fluid" src="/img/plugins/repservice.jpg"/>
</div>
</div>
<h2 class="text-primary">امکانات:</h2>
<ul>
<li>
صدور قبض های پذیرش تعمیرگاه قابل چاپ و پیامکی
</li>
<li>
بدون نیاز به خرید سرشماره پیامک خدماتی
</li>
<li>
گزارشات کامل از دستگاه های ورودی و خروجی تعمیرگاه
</li>
<li>
ثبت قبض های پذیرش بصورت آنلاین با گوشی
</li>
<li>
ارسال پیامک خودکار به تعمیرکار موقع ثبت پذیرش دستگاه تعمیری
</li>
<li>
مشاهده لیست دستگاه های تعمیری
</li>
<li>
درج س{{doc.money.shortName}}/پلاک دستگاه های تعمیری درقبض پذیرش
</li>
<li>
ارسال پیامک خودکار هنگام تغییر وضعیت دستگاه به آماده تحویل
</li>
<li>
مشاهده فاکتور تعمیرگاه بصورت آنلاین بصورت پیامکی
</li>
<li>
قابلیت چاپ قبض تعمیرگاه
</li>
<li>
قابلیت ارایه خروجی اکسل از تمام گزارشات تعمیرگاه
</li>
<li>
یکپارچه با
حسابیکس
و بسته حسابداری پیشرفته
</li>
</ul>
</div>
</article>
<!-- END Story -->
</div>
</div>
</div>
<!-- END Page Content -->
</main>
{% endblock %}

View file

@ -1,151 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->
<url>
<loc>https://hesabix.ir/</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https://hesabix.ir/front/faq</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/guide</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/blog/home</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/about</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/contact</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/terms</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/privacy</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/open-source</loc>
<lastmod>2023-10-20T11:24:11+00:00</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/guide/general</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/api</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/update-list</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/guide/person</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.64</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/guide/commodity</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.64</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/guide/banks</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.64</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/guide/buy</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.64</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/guide/sell</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.64</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/guide/reports</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.64</priority>
</url>
<url>
<loc>https://hesabix.ir/front/help/guide/settings</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.64</priority>
</url>
<url>
<loc>https://hesabix.ir/front/features/setup</loc>
<lastmod>2023-11-10T16:17:43+00:00</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/features/user_management</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/features/buy_sell</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/apps/woocommerce</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/front/apps/repservice</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://hesabix.ir/login</loc>
<lastmod>{{ timeNow }}</lastmod>
<priority>0.64</priority>
</url>
{% for blog in blogs %}
<url>
<loc>{{ absolute_url(path('general_blog_post',{'url':blog.url})) }}</loc>
<lastmod>{{ blog.dateSubmit | date('c') }}</lastmod>
<priority>0.80</priority>
</url>
{% endfor %}
{% for doc in docs %}
<url>
<loc>{{ absolute_url(path('general_help_api',{'id':doc.id})) }}</loc>
<lastmod>
{% if doc.dateSubmit is null %}
{{ timeNow }}
{% else %}
{{ doc.dateSubmit | date('c') }}
{% endif %}
</lastmod>
<priority>0.80</priority>
</url>
{% endfor %}
</urlset>

View file

@ -1,64 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}حامیان مالی{% endblock %}
{% block body %}
<div class="row mt-0 pt-0">
<div class="col-sm-12 col-md-12">
<div class="content">
<div class="py-3 text-center">
<h2 class="fw-bold mb-3">
حسابیکس با
<i class="fa fa-fw fa-heart text-danger"></i>
و به صورت متن‌باز توسط گروهی از علاقه‌مندان توسعه داده می‌شود.
</h2>
<p class="fs-lg mb-0">لطفا با حمایت از حسابیکس در توسعه آن سهیم باشید.</p>
<div class="my-3">حامیان گرامی ، برای نمایش بنر کسب و کار خود در صفحات وب سایت از طریق بخش پشتیبانی تیکت ارسال کنید.</div>
<a class="btn btn-lg btn-success mt-4" target="_blank" href="https://zarinp.al/hesabix.ir">
<i class="fa fa-donate me-3"></i>
پرداخت آنلاین کمک مالی
</a>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-12 py-2 text-center">
<h1>حامیان حسابیکس</h1>
</div>
<div class="col-sm-12 col-md-4">
<div class="card">
<img src="{{ asset('/banners/raddata.png') }}" class="card-img-top" alt="راددیتا">
<div class="card-body text-center">
<h5 class="card-title text-primary">مرکز ارتباطات راد دیتا</h5>
<p class="card-text">پیشرو در ارائه خدمات فنی مهندسی و سرویس های مرکز داده در ایران و خارج با بالاترین کیفیت و قیمت مناسب</p>
<a href="https://raddata.ir" target="_blank" class="btn btn-primary">وب سایت</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4">
<div class="card">
<img src="{{ asset('/img/parspack-black.png') }}" class="card-img-top bg-black p-3" alt="پارس‌پک">
<div class="card-body text-center">
<h5 class="card-title text-primary">پارس‌پک</h5>
<p class="card-text">از یک استارت‌آپ کوچک تا سازمانی بزرگ پشتیبان‌تان هستیم. پیشرو در راهکارهای ابری</p>
<a href="https://parspack.com" target="_blank" class="btn btn-primary">وب سایت</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4">
<div class="card">
<img src="{{ asset('/img/melipayamak-card.png') }}" class="img-flude card-img-top bg-white p-3" alt="ملی پیامک">
<div class="card-body text-center">
<h5 class="card-title text-primary">سامانه پیام کوتاه ملی‌پیامک</h5>
<p class="card-text">ملی پیامک یک سامانه پیامکی معمولی نیست! یک ابزار قدرتمند است برای آنکه مشتری را جذب کنید، از او نگهداری کنید، یک رابطه پایدار بسازید و خدمات بهتری ارائه دهید. وقت آن رسیده که نگاهی بزرگ‌تر به پیام کوتاه داشته باشیم. </p>
<a href="https://www.melipayamak.com/?utm_source=hesabix&utm_medium=affiliate&utm_campaign=hesabix-camp" target="_blank" class="btn btn-primary">
<i class="fa fa-link me-2"></i>
سفارش پنل پیامک
</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,143 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}قوانین ارائه خدمات{% endblock %}
{% block body %}
<div class="container">
<div class="row">
<div class="col">
<div class="block-content bg-white rounded-3">
<div class="container text-right">
<h3 style="color: dimgray; font-weight: bolder">توافقنامه استفاده از سرویس‌های ابری حسابیکس </h3>
<hr>
<div style="margin-top: 25px;"></div>
<p style="margin-bottom: 20px; font-size: 12pt;">
این توافقنامه مابین از یک طرف و مشتری سامانه ابری حسابیکس از طرف دیگر می باشد.
</p>
<ol id="terms" type="1">
<li>
در زمان تکمیل فرم ثبت نام در سایت، مشتری با علامت زدن گزینه
<strong>"من شرایط استفاده و سیاست حفظ حریم خصوصی را خوانده و با آن موافقم"</strong>
، می پذیرد که مفاد این توافقنامه را بصورت کامل مطالعه کرده و تمام موارد آن مورد قبول او می باشد. چنانچه مشتری گزینه مذکور را علامت نزند، به هیچ عنوان اجازه ثبت نام و استفاده از خدمات ابری وب سایت را نخواهد داشت. بنابراین استفاده از خدمات سرویس ابری وب سایت به منزله پذیرش مفاد این توافقنامه می باشد.
</li>
<li>
اشخاص حقیقی یا حقوقی که مشتری به نمایندگی از آنها فرم های عضویت در سامانه ابری حسابیکس را تکمیل کرده، نیز شرایط و توافقات استفاده از سیستم و همچنین سیاست های حفظ حریم خصوصی را قبول دارند و پذیرفته اند، و فرض می شود که مشتری از طرف آنها مجاز بوده و یا اختیار داشته که این توافق را انجام دهد. به این معنا که حسابیکس در خصوص مشکلات احتمالی بعدی در این خصوص، هیچگونه مسئولیتی نداشته و صاحب ایمیل ثبت شده در سرورهای حسابیکس و مشخصات سازنده حساب کاربری، تعیین کننده وضعیت آن خواهد بود.
</li>
<li>
مشتری، کاربران و نمایندگان مشتری، مسئول حفاظت از امنیت حساب کاربری خود می باشند. این افراد موظفند که کلمه عبوری را انتخاب کنند که امنیت لازم را دارا بوده و قابل حدس زدن توسط سایرین نباشد. همچنین کاربران موظف هستند تا در مقاطع زمانی مناسب نسبت به تغییر کلمه عبور خود اقدام کنند. علاوه بر آن، در صورتی که احساس می کنند کلمه عبور آنها در دسترس سایرین قرار گرفته، بایستی بلافاصله نسبت به تغییر آن اقدام نمایند، در غیر این صورت کلیه عواقب ناشی از این سهل انگاری، بر عهده کاربران خواهد بود و حسابیکس مسئولیتی در این خصوص نخواهد داشت.
</li>
<li>
چنانچه به هر دلیلی امکان دسترسی به ایمیل و شماره تلفن ثبت شده نباشد، حسابیکس تحت هیچ شرایطی رمز را تغییر نداده و برای شخص سوم ارسال نمی کند. بنابراین اگر رمز عبور مفقود گردید، فقط از طریق دسترسی به ایمیل یا شماره تلفن ثبت شده امکان بازیابی رمز وجود دارد و درصورت عدم دسترسی به ایمیل و شماره تلفن ثبت شده، حسابیکس تحت هیچ شرایطی رمز را تغییر نداده و ارسال نمی کند.
</li>
<li>
حسابیکس هیچ مسئولیتی در قبال لو رفتن اطلاعات مشتری در صورتی که منشا آن کوتاهی مشتری در حفظ امنیت حساب کاربری خود باشد، نخواهد داشت. مسئول تشخیص این امر مدیر سیستم حسابیکس می باشد. مدیر سیستم با مراجعه به لاگها و گزارش های امنیتی موجود در پنل خود، امکان بررسی و تشخیص این امر را خواهد داشت.
</li>
<li>
حسابیکس تعهد می کند که بالاترین ضریب اطمینان را برای دسترسی به سرویس های ابری خود فراهم سازد. در مواردی که نیاز به قطع خدمت رسانی می باشد، شرکت متعهد می شود که موضوع را حداقل ۱۲ ساعت قبل به اطلاع مشتری برساند.
</li>
<li>
حسابیکس هیچ مسئولیتی در قبال لو رفتن اطلاعات مشتری در صورتی که منشا آن حملات هکری باشد، نخواهد داشت. البته حسابیکس آخرین پروتکل ها و به روز ترین شیوه های امنیتی را برای پیشگیری از وقوع موارد فوق به کار می بندد.
</li>
<li>
حسابیکس تعهد می دهد از هر زمان که نتواند به فعالیت خود ادامه دهد، به مدت دو سال سرورهای خود را روشن نگه دارد و مشتریان امکان دسترسی به اطلاعات خود را خواهند داشت.
</li>
<li>
کسب و کارهای آزمایشی، چنانچه پس از گذشت ۳۰ روز از تاریخ انقضای آنها شارژ و تمدید نگردند، بصورت خودکار از سیستم حذف می شوند.
</li>
<li>
ارائه خدمات پشتیبانی به وسیله ایمیل و تماس تلفنی رایگان بوده و هزینه ای بابت آن دریافت نمی شود. حسابیکس هیچگونه تعهدی نسبت به ارائه خدمات پشتیبانی به صورت حضوری نخواهد داشت. پشتیبانی شامل پاسخگویی به سؤالات و رفع مشکلات احتمالی است که در حین استفاده از سیستم برای کاربران بوجود می آید. اضافه کردن ویژگی های جدید به نرم افزار و آموزش کاربران، مشمول خدمات پشتیبانی قرار نمی گیرند.
</li>
<li>
حساب کاربری به منظور انجام فرآیندهای وابسته به موضوع نرم افزار وب سایت، در اختیار مشتری، نمایندگان و کاربران قرار داده شده است. هرگونه تلاش برای هک کردن سیستم و نیز تلاش به هر نحوی در جهت ایجاد خدشه در امنیت و کارکرد خدمت و یا سایر جنبه های خدمات مرتبط با آن، پیگرد قانونی داشته، منجر به حذف حساب کاربری شده و هیچ گونه وجهی به مشتری مسترد نخواهد شد و امکان پیگیری های قضایی برای تامین حقوق تضییع شده برای حسابیکس فراهم می باشد. مسئول تشخیص این موضوع، مدیر سیستم سامانه حسابیکس می باشد.
</li>
<li>
حسابیکس از طریق آدرس ایمیل درج شده در حساب کاربری مشتری، نماینده یا کاربر، با این افراد ارتباط برقرار می کند. کلیه اطلاعیه ها و اعلانات از طریق این آدرس ایمیل به افراد اعلام خواهد شد، اشخاص فوق الذکر موظف هستند در هنگام ثبت نام، آدرس ایمیل معتبر را وارد کنند و در صورت نیاز با خارج کردن آدرس ایمیل وب سایت از پوشه هرزنامه <strong>(Spam)</strong> امکان ایجاد ارتباط را میسر سازند. ایمیل های حسابیکس از دامنه <strong>hesabix.ir</strong> ارسال می شوند. همچنین تغییرات در این توافقنامه از طریق ایمیل به مشتری اطلاع رسانی می شود.
</li>
<li>
مشتری باید تمامی قوانین جمهوری اسلامی ایران خصوصا
<strong>"قانون تجارت الکترونیکی"، "قانون جرائم رایانه ای" و "قانون ثبت اختراعات، طرحهای صنعتی و علائم تجاری، "قانون حمایت از حقوق پدیدآورندگان نرم افزار های رایانه ای و لایسنس پروانه همگانی گنو ویرایش سوم" </strong>
را رعایت نماید و هرگونه مسئولیت ناشی از عدم رعایت این قوانین توسط صاحب حساب و یا سایر كاربران وی به عهده مشتری است و حسابیکس هیچ مسئولیتی در این مورد نخواهد داشت.
</li>
<li>
در صورت فسخ/خاتمه/لغو این توافقنامه حق دسترسی و استفاده از اطلاعات مشتری برای وی فورا متوقف می شود و ضمن نگهداری اطلاعات مشتری تا ۶۰ روز پس از فسخ، بنا به درخواست و بدون دریافت هزینه جدید در اختیار مشتری قرار می گیرد، پس از گذشت ۶۰ روز اطلاعات مشتری حذف شده و به هیچ عنوان قابل بازگشت نمی باشد.
</li>
<li>
نام تجاری حسابیکس ، علامت تجاری، سایت حسابیکس ، خدمات، هرگونه متن و تصویر و ویژگی های ظاهری و محتوایی وب سایت و سایر رسانه ها، منحصر به تیم توسعه حسابیکس بوده و کلیه حقوق مادی و معنوی آن متعلق به حسابیکس می باشد.سورس کدهایی که طبق توافق نامه گنو ویرایش سوم منتشر شده اند از این ماده مستثنی می باشند.
</li>
<li>
هرگونه سوء استفاده از نام یا علامت تجاری حسابیکس،وبسایت اینترنتی حسابیکس ، مکاتبه از طرف حسابیکس و یا استفاده از نام ها و یا علائم تصویری مشابه که تشخیص و تمییز آن از حسابیکس برای کاربر عادی ممکن نبوده، موجب گمراهی آنان شود ممنوع بوده از طریق طرح دعوای حقوقی در مراجع قانونی ذیصلاح شامل مراجع رسیدگی به جرائم رایانه ای، مراجع رسیدگی به جرائم مالکیت فکری و... در داخل و یا خارج از کشور و نیز اطلاع‌رسانی به سرویس دهندگان و سرویس گیرندگان اینترنتی قابل پیگرد خواهد بود.
</li>
<li>
در صورت احراز هرگونه اقدامی از سوی کاربر که منجر به ورود خسارت به شهرت، اعتبار و دارایی‌های حسابیکس شود حسابیکس این حق را برای خود محفوظ می‌داند که قرارداد با کاربر را فسخ نموده، حساب کاربر را مسدود کند و در صورت نیاز، علیه شخص اقدام قانونی لازم را انجام دهد. در این صورت کلیه خسارات و مطالبات قانونی در مراجع دارای صلاحیت پیگیری خواهد شد.
</li>
<li>
در راستای حمایت از حقوق و مالكیت های مادی و معنوی، انجام فعالیت های زیر برای مشتری مجاز نیست و حسابیکس اجازه دارد تا به منظور تامین امنیت سایر کاربران، بلافاصله و بدون اطلاع و اخطار قبلی حساب کاربری مشتری را مسدود کرده و کلیه اطلاعات مشتری را بایگانی کند و دسترسی مشتری به سامانه را قطع کند. مسئول تشخیص این امر مدیر سیستم حسابیکس می باشد. همچنین در این صورت هیچ وجهی به مشتری مسترد نخواهد شد:
<ul>
<li>
انتقال هرنوع كرم نرم افزاری یا ویروس یا هر كد نرم‌افزاری مخرب در زمان استفاده از وب سایت.
</li>
<li>
هر گونه هك كردن نرم افزار و یا وب سایت.
</li>
<li>
هرگونه فعالیت مخالف قوانین جمهوری اسلامی ایران.
</li>
</ul>
</li>
<li>
تمامی اطلاعاتی كه توسط كاربران مشتری در حین استفاده از خدمت در وب سایت ثبت می شود متعلق به همان مشتری بوده و حسابیکس هیچگونه مالکیتی نسبت به این اطلاعات ندارد. مشتری به تنهایی مسئول دقت، کیفیت، یکپارچگی، قانونی بودن، قابل اتکا بودن، مناسب بودن و استفاده مناسب از داده های خود می باشد و حسابیکس هیچگونه مسئولیتی در قبال حذف، تصحیح، صدمه دیدن، خرابی و یا مشکل در ذخیره شدن درست داده های سمت مشتری ندارد.
</li>
<li>
داده‌هایی که هنگام ثبت نام مستقیماً از کاربر متقاضی أخذ می‌شود، شامل مشخصات فردی (نام و نام خانوادگی)، پست الکترونیک و شماره تلفن همراه، صرفاً در جهت احراز هویت کاربر و امکان برخورداری از خدمات استفاده قرار می‌گیرد. شرکت متعهد می‌گردد داده‌های مذکور را صرفا در محدوده ارائه خدمات مذکور مورد استفاده قرار دهد. شرکت متعهد می‌گردد، داده‌ها و اطلاعات کاربران متقاضی را به اشخاص ثالث اعم از حقیقی و یا حقوقی با مقاصد تجاری و غیرتجاری خارج از حیطه خدمات فوق‌الذکر، بدون کسب رضایت صاحبان آن افشا ننماید. حسابیکس به حفظ اسرار تجاری، حقوق مالكیت فکری و نیز اطلاعات شخصی و خصوصی مشتریان خود که اطلاعات آن در وبسایت و برنامه حسابیکس بارگذاری و ثبت شده متعهد و ملتزم بوده و به صورت پیشگیرانه کلیه اقدامات مورد نیاز جهت حفاظت از محرمانگی این اطلاعات و جلوگیری از افشای آنها را انجام می دهد.
<br>
تبصره- اطلاعات فوق محرمانه می باشد و در اختیار هیچ شخصیت حقیقی و یا حقوقی ثالثی قرار نمیگیرد، مگر به دستور مراجع ذیصلاح قضایی.
</li>
<li>
اطلاعات مذکور در بند قبل حتی پس از انحلال این قرارداد و حساب کاربری مربوطه، به طور دائم محرمانه تلقی می گردد.
</li>
<li>
در صورت وجود مشكل در صورتحساب، مشتری می تواند تا ۳۰ روز از طریق ایمیل <strong>(info@hesabix.ir)</strong> یا با نامه رسمی مراتب را برای رسیدگی اعلام كند.
</li>
<li>
حسابیکس هیچ مسئولیتی در قبال ضرر و زیان های غیر مستقیم یا مستقیم مشتری درباره سود، شهرت، اطلاعات و دیگر زیان هایی که صرفا در نتیجه مطلق استفاده از خدمات وب سایت می شود را ندارد.
</li>
<li>
برای بستن حساب لازم است مشتری درخواست مربوطه را از طریق ایمیل به آدرس <strong>info@hesabix.ir</strong> اعلام کند.
</li>
<li>
پس از بستن یا قطع حساب به درخواست مشتری، تمامی محتوا و اطلاعات مشتری پس از ۶۰ روز حذف می شود. این اطلاعات پس از این مرحله قابل بازگشت نیست.
</li>
<li>
در صورت عدم رعایت تمام و یا بخشی از شرایط این توافق نامه از طرف مشتری و یا در صورتی که محرز شود مشتری هویت یا اطلاعات تماس خود را ناصحیح اعلام نموده یا تغییر هرکدام از آنها را به حسابیکس اطلاع نداده است، حسابیکس حق فسخ این قرارداد و مسدود نمودن حساب مشتری بدون اعلام قبلی را داراست. در این حالت هیچ گونه وجهی به مشتری مسترد نخواهد شد.
</li>
<li>
حسابیکس نسبت به مشكلاتی كه برای ارائه سرویس به علت وجود مشكل در اینترنت و یا دیگر بسترهای ارتباطی الكترونیك بوجود می آید، مسئولیتی ندارد.
</li>
<li>
در صورت بروز هرگونه حوادث غیر مترقبه و سایر عوامل خارج از اختیار حسابیکس ، از قبیل اعتصاب، اغتشاش عمومی، صاعقه، آتش سوزی، سیل و زلزله یا حوادث موثر در محیط و مانند اینها، به نحوی که انجام تعهدات و خدمات این توافقنامه را برای حسابیکس غیرممكن سازد و یا با اشكال مواجه نماید، هیچگونه مسئولیتی در قبال عدم انجام تعهدات متوجه حسابیکس نمی باشد و مشتری حق هرگونه ادعایی نسبت به حسابیکس را از خود سلب می نماید. با این حال در صورت بروز چنین مواردی حسابیکس تلاش خود برای کاهش اثرات این موارد را می نماید.
</li>
<li>
برخی از خدمات حسابیکس با مشارکت خدمات شرکتهای دیگری ارائه شود که حسابیکس کنترلی بر روی آنها ندارد. در چنین شرایطی کاربران می‌پذیرند که این خدمات، قوانین استفاده و مقررات مختص خود را دارند و حسابیکس مسئولیتی در خصوص آن ندارد.
</li>
<li>
حسابیکس به صورت مستمر خدمات خود را توسعه و بهبود می بخشد. به همین علت در طول زمان امكاناتی به خدمات و نرم افزار اضافه و امكانات متناظر با آنها تغییر یافته، جایگزین و یا حذف می شوند.
</li>
<li>
حسابیکس حق اصلاح و تغییر شرایط و مقررات ذكر شده در این سند و قیمت خدمات و سرویس های ارائه شده را در هر زمان برای خود محفوظ می داند.
</li>
<li>
همواره آخرین نسخه این توافقنامه در آدرس اینترنتی
<strong>https://hesabix.ir/terms</strong>
قرار دارد.
</li>
<li>
هر گونه خودداری حسابیکس در پیگیری و اجرای حقوق خود در این توافقنامه، به معنی چشم پوشی و اعراض از این حقوق نبوده، همواره فرصت و امکان پیگیری این حقوق و مطالبات برای حسابیکس برقرار است.
</li>
<li>
قوانین و مقررات ذكر شده در این توافقنامه بر هر نوع توافق قبلی بین حسابیکس و مشتری اولویت و ترجیح خواهد داشت.
</li>
</ol>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,22 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}فهرست تغییرات و به روز رسانی ها{% endblock %}
{% block body %}
<div class="container">
<div class="row">
<div class="col">
<div class="block-content bg-white rounded-3">
{% for item in items %}
<div class="container text-right">
<h3 style="color: dimgray; font-weight: bolder">
تغییرات نسخه {{ item.version }}
تاریخ:
{{ Jdate.jdate('Y/n/d',item.dateSubmit) }}
</h3>
<p class="mt-0 pt-0">{{ item.body | raw }}</p>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,38 +0,0 @@
{% extends "base.html.twig" %}
{% block title %}افزونه ووکامرس حسابیکس{% endblock %}
{% block body %}
<div class="container">
<div class="row">
<div class="col">
<div class="block-content bg-white rounded-3">
<div class="pb-3 justify-content-center text-center">
<img src="{{asset('img/logo-woocommerce.png')}}" class="img-flude" alt="logo-woocommerce">
<h3>افزونه ووکامرس حسابیکس <span class="text-danger"> (آزمایشی) </span></h3>
<div>
<p class="text-secondary mt-3">
این افزونه فروشگاه ووکامرس شما را به نرم افزار حسابداری آنلاین حسابیکس متصل می کند.
به وسیله ی این افزونه کالاها،
مشتریان و سفارشات شما به محض ثبت در سیستم فروشگاه،
در حسابیکس نیز بصورت خودکار ثبت و ذخیره می شوند.
همچنین با پرداخت مشتری، سند دریافت وجه از مشتری نیز در حسابیکس ثبت می شود.
</p>
<p class="text-secondary mt-3">
بدیهی است برای استفاده از این افزونه باید ابتدا یک حساب کاربری در حسابیکس داشته باشید.
پس از ثبت نام در حسابیکس و ورود به حساب خود،
و سپس ورود به یک کسب و کار، در قسمت تنظیمات / API می توانید کلید
API مربوط به کسب و کار خود را دریافت و در قسمت تنظیمات
این افزونه وارد نمایید. پس از آن افزونه شما آماده استفاده است.
</p>
</div>
<div class="text-center">
<a target="_blank" href="https://github.com/morrning/hesabixWCPlugin/releases" class="btn btn-success">
<i class="fa fa-download"></i>
دریافت افزونه
</a>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,20 +0,0 @@
{% extends 'base.html.twig' %}
{% block title %}Hello PreinvoiceController!{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
<h1>Hello {{ controller_name }}! ✅</h1>
This friendly message is coming from:
<ul>
<li>Your controller at <code>/var/www/next.hesabix.ir/hesabixCore/src/Controller/PreinvoiceController.php</code></li>
<li>Your template at <code>/var/www/next.hesabix.ir/hesabixCore/templates/preinvoice/index.html.twig</code></li>
</ul>
</div>
{% endblock %}

View file

@ -1,20 +0,0 @@
{% extends 'base.html.twig' %}
{% block title %}Hello ProjectController!{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
<h1>Hello {{ controller_name }}! ✅</h1>
This friendly message is coming from:
<ul>
<li>Your controller at <code>/var/www/next.hesabix.ir/hesabixCore/src/Controller/ProjectController.php</code></li>
<li>Your template at <code>/var/www/next.hesabix.ir/hesabixCore/templates/project/index.html.twig</code></li>
</ul>
</div>
{% endblock %}

View file

@ -1,11 +0,0 @@
<h1>سلام به حسابیکس خوش آمدید.</h1>
<p>
برای تایید آدرس ایمیل خود لطفا لینک زیر را کلیک کنید: <br><br>
<a href="{{ signedUrl }}">تایید آدرس ایمیل</a>.
</p>
<p>
با احترام
تیم پشتیبانی حسابیکس
</p>

View file

@ -1,147 +0,0 @@
<!DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
<style type="text/css">body, html {
direction: rtl;
margin: 0px;
padding: 0px;
-webkit-font-smoothing: antialiased;
text-size-adjust: none;
width: 100% !important;
}
table td, table {
}
#outlook a {
padding: 0px;
}
.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {
line-height: 100%;
}
.ExternalClass {
width: 100%;
}
@media only screen and (max-width: 480px) {
table, table tr td, table td {
width: 100% !important;
}
img {
width: inherit;
}
.layer_2 {
max-width: 100% !important;
}
.edsocialfollowcontainer table {
max-width: 25% !important;
}
.edsocialfollowcontainer table td {
padding: 10px !important;
}
}
</style>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
</head>
<body style="padding:0; margin: 0;">
<table align="center" style="width: 100%; height: 100%; background-color: #efefef;">
<tbody>
<tr>
<td valign="top" id="dbody" data-version="2.31" style="padding-top: 50px; padding-bottom: 50px; background-color: #efefef; width: 100%;">
<!--[if (gte mso 9)|(IE)]><table align="center" style="max-width:600px" width="600" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table align="center" style="max-width:600px" width="600" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<table class="layer_1" align="center" border="0" cellpadding="0" cellspacing="0" style="max-width: 600px; width: 100%; box-sizing: border-box; margin: 0px auto;">
<tbody>
<tr>
<td class="drow" valign="top" align="center" style="background-color: #ffffff; box-sizing: border-box; font-size: 0px;">
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<div class="layer_2" style="max-width: 600px; width: 100%; display: inline-block; vertical-align: top; margin: 0px auto;">
<table class="edcontent" style="border-collapse: collapse;width:100%" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="edimg" valign="top" style="padding: 0px; box-sizing: border-box; text-align: center;">
<img style="border-width: 0px; border-style: none; max-width: 600px; width: 100%;" alt="Image" src="https://api.elasticemail.com/userfile/a18de9fc-4724-42f2-b203-4992ceddc1de/violetinvitation_top.jpg" width="600">
</td>
</tr>
</tbody>
</table>
</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
<tr>
<td class="drow" valign="top" align="center" style="background-color: #ffffff; box-sizing: border-box; font-size: 0px;">
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<div class="layer_2" style="max-width: 600px; width: 100%; display: inline-block; vertical-align: top; margin: 0px auto;">
<table class="edcontent" style="border-collapse: collapse;width:100%" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="edtext" valign="top" style="padding: 20px; color: #5f5f5f; font-size: 12px; font-family: Tahoma, Geneva, sans-serif; text-align: right; direction: rtl; box-sizing: border-box;">
<div class="style1" style="text-align: center; color: #000000; font-size: 28px; font-family: Helvetica, Arial, sans-serif;">
<strong>
<span style="color: #5f497a;">حسابیکس
</span>
<br>
</strong>
</div>
<span style="line-height: 2.25em;">
<span style="font-size: 18px;">
<p style="margin: 0px; padding: 0px;">
<br>
</p>
<div style="text-align: center;">
کد بازیابی کلمه عبور شما به شرح زیر می باشد.
<br>
در صورتی که شما درخواست بازیابی گذرواژه خود را نداشته اید این پیام را نادیده بگیرید.
</div>
</span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
<tr>
<td class="drow" valign="top" align="center" style="background-color: #ffffff; box-sizing: border-box; font-size: 0px;">
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<div class="layer_2" style="max-width: 600px; width: 100%; display: inline-block; vertical-align: top; margin: 0px auto;">
<table border="0" cellspacing="0" cellpadding="0" class="edcontent" style="border-collapse: collapse;width:100%">
<tbody>
<tr>
<td valign="top" class="edbutton" style="padding: 20px;">
<table cellspacing="0" cellpadding="0" style="text-align: center; margin: 0px auto;" align="center">
<tbody>
<tr>
<td align="center" style="background: #ff0334; border-radius: 4px; padding: 12px;">
<a href="#" target="_blank" style="font-weight: bold; color: #ffffff; font-size: 16px; font-family: Helvetica, Arial, sans-serif; text-decoration: none; width: 100%; display: inline-block;"><span style="color: #ffffff;">{{ code }}</span></a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
</tbody>
</table>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
</tbody>
</table>
</body>
</html>

View file

@ -1,147 +0,0 @@
<!DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
<style type="text/css">body, html {
direction: rtl;
margin: 0px;
padding: 0px;
-webkit-font-smoothing: antialiased;
text-size-adjust: none;
width: 100% !important;
}
table td, table {
}
#outlook a {
padding: 0px;
}
.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {
line-height: 100%;
}
.ExternalClass {
width: 100%;
}
@media only screen and (max-width: 480px) {
table, table tr td, table td {
width: 100% !important;
}
img {
width: inherit;
}
.layer_2 {
max-width: 100% !important;
}
.edsocialfollowcontainer table {
max-width: 25% !important;
}
.edsocialfollowcontainer table td {
padding: 10px !important;
}
}
</style>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
</head>
<body style="padding:0; margin: 0;">
<table align="center" style="width: 100%; height: 100%; background-color: #efefef;">
<tbody>
<tr>
<td valign="top" id="dbody" data-version="2.31" style="padding-top: 50px; padding-bottom: 50px; background-color: #efefef; width: 100%;">
<!--[if (gte mso 9)|(IE)]><table align="center" style="max-width:600px" width="600" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table align="center" style="max-width:600px" width="600" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<table class="layer_1" align="center" border="0" cellpadding="0" cellspacing="0" style="max-width: 600px; width: 100%; box-sizing: border-box; margin: 0px auto;">
<tbody>
<tr>
<td class="drow" valign="top" align="center" style="background-color: #ffffff; box-sizing: border-box; font-size: 0px;">
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<div class="layer_2" style="max-width: 600px; width: 100%; display: inline-block; vertical-align: top; margin: 0px auto;">
<table class="edcontent" style="border-collapse: collapse;width:100%" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="edimg" valign="top" style="padding: 0px; box-sizing: border-box; text-align: center;">
<img style="border-width: 0px; border-style: none; max-width: 600px; width: 100%;" alt="Image" src="https://api.elasticemail.com/userfile/a18de9fc-4724-42f2-b203-4992ceddc1de/violetinvitation_top.jpg" width="600">
</td>
</tr>
</tbody>
</table>
</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
<tr>
<td class="drow" valign="top" align="center" style="background-color: #ffffff; box-sizing: border-box; font-size: 0px;">
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<div class="layer_2" style="max-width: 600px; width: 100%; display: inline-block; vertical-align: top; margin: 0px auto;">
<table class="edcontent" style="border-collapse: collapse;width:100%" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="edtext" valign="top" style="padding: 20px; color: #5f5f5f; font-size: 12px; font-family: Tahoma, Geneva, sans-serif; text-align: right; direction: rtl; box-sizing: border-box;">
<div class="style1" style="text-align: center; color: #000000; font-size: 28px; font-family: Helvetica, Arial, sans-serif;">
<strong>
<span style="color: #5f497a;">حسابیکس
</span>
<br>
</strong>
</div>
<span style="line-height: 2.25em;">
<span style="font-size: 18px;">
<p style="margin: 0px; padding: 0px;">
<br>
</p>
<div style="text-align: center;">
به حسابیکس خوش آمدید. کد فعال سازی شما به شرح ذیل می باشد.
<br>
در صورت مواجعه با مشکل در فعال سازی حساب کاربری خود با پشتیبانی حسابیکس تماس بگیرید.
</div>
</span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
<tr>
<td class="drow" valign="top" align="center" style="background-color: #ffffff; box-sizing: border-box; font-size: 0px;">
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<div class="layer_2" style="max-width: 600px; width: 100%; display: inline-block; vertical-align: top; margin: 0px auto;">
<table border="0" cellspacing="0" cellpadding="0" class="edcontent" style="border-collapse: collapse;width:100%">
<tbody>
<tr>
<td valign="top" class="edbutton" style="padding: 20px;">
<table cellspacing="0" cellpadding="0" style="text-align: center; margin: 0px auto;" align="center">
<tbody>
<tr>
<td align="center" style="background: #ff0334; border-radius: 4px; padding: 12px;">
<a href="#" target="_blank" style="font-weight: bold; color: #ffffff; font-size: 16px; font-family: Helvetica, Arial, sans-serif; text-decoration: none; width: 100%; display: inline-block;"><span style="color: #ffffff;">{{ code }}</span></a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
</tbody>
</table>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
</tbody>
</table>
</body>
</html>

View file

@ -1,145 +0,0 @@
<!DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
<style type="text/css">body, html {
direction: rtl;
margin: 0px;
padding: 0px;
-webkit-font-smoothing: antialiased;
text-size-adjust: none;
width: 100% !important;
}
table td, table {
}
#outlook a {
padding: 0px;
}
.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {
line-height: 100%;
}
.ExternalClass {
width: 100%;
}
@media only screen and (max-width: 480px) {
table, table tr td, table td {
width: 100% !important;
}
img {
width: inherit;
}
.layer_2 {
max-width: 100% !important;
}
.edsocialfollowcontainer table {
max-width: 25% !important;
}
.edsocialfollowcontainer table td {
padding: 10px !important;
}
}
</style>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
</head>
<body style="padding:0; margin: 0;">
<table align="center" style="width: 100%; height: 100%; background-color: #efefef;">
<tbody>
<tr>
<td valign="top" id="dbody" data-version="2.31" style="padding-top: 50px; padding-bottom: 50px; background-color: #efefef; width: 100%;">
<!--[if (gte mso 9)|(IE)]><table align="center" style="max-width:600px" width="600" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table align="center" style="max-width:600px" width="600" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<table class="layer_1" align="center" border="0" cellpadding="0" cellspacing="0" style="max-width: 600px; width: 100%; box-sizing: border-box; margin: 0px auto;">
<tbody>
<tr>
<td class="drow" valign="top" align="center" style="background-color: #ffffff; box-sizing: border-box; font-size: 0px;">
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<div class="layer_2" style="max-width: 600px; width: 100%; display: inline-block; vertical-align: top; margin: 0px auto;">
<table class="edcontent" style="border-collapse: collapse;width:100%" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="edimg" valign="top" style="padding: 0px; box-sizing: border-box; text-align: center;">
<img style="border-width: 0px; border-style: none; max-width: 600px; width: 100%;" alt="Image" src="https://api.elasticemail.com/userfile/a18de9fc-4724-42f2-b203-4992ceddc1de/violetinvitation_top.jpg" width="600">
</td>
</tr>
</tbody>
</table>
</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
<tr>
<td class="drow" valign="top" align="center" style="background-color: #ffffff; box-sizing: border-box; font-size: 0px;">
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<div class="layer_2" style="max-width: 600px; width: 100%; display: inline-block; vertical-align: top; margin: 0px auto;">
<table class="edcontent" style="border-collapse: collapse;width:100%" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="edtext" valign="top" style="padding: 20px; color: #5f5f5f; font-size: 12px; font-family: Tahoma, Geneva, sans-serif; text-align: right; direction: rtl; box-sizing: border-box;">
<div class="style1" style="text-align: center; color: #000000; font-size: 28px; font-family: Helvetica, Arial, sans-serif;">
<strong>
<span style="color: #5f497a;">حسابیکس
</span>
<br>
</strong>
</div>
<span style="line-height: 2.25em;">
<span style="font-size: 18px;">
<p style="margin: 0px; padding: 0px;">
<br>
</p>
<div style="text-align: center;">
کلمه عبور ورود به حسابیکس به درخواست شما تغییر یافت . جهت ورود از کلمه عبور زیر استفاده نمایید.
</div>
</span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
<tr>
<td class="drow" valign="top" align="center" style="background-color: #ffffff; box-sizing: border-box; font-size: 0px;">
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<!--[if (gte mso 9)|(IE)]><table width="100%" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td valign="top"><![endif]-->
<div class="layer_2" style="max-width: 600px; width: 100%; display: inline-block; vertical-align: top; margin: 0px auto;">
<table border="0" cellspacing="0" cellpadding="0" class="edcontent" style="border-collapse: collapse;width:100%">
<tbody>
<tr>
<td valign="top" class="edbutton" style="padding: 20px;">
<table cellspacing="0" cellpadding="0" style="text-align: center; margin: 0px auto;" align="center">
<tbody>
<tr>
<td align="center" style="background: #ff0334; border-radius: 4px; padding: 12px;">
<a href="#" target="_blank" style="font-weight: bold; color: #ffffff; font-size: 16px; font-family: Helvetica, Arial, sans-serif; text-decoration: none; width: 100%; display: inline-block;"><span style="color: #ffffff;">{{ code }}</span></a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
</tbody>
</table>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->
</td>
</tr>
</tbody>
</table>
</body>
</html>

View file

@ -1,69 +0,0 @@
{% extends "blank.html.twig" %}
{% block title %}ورود به حسابیکس{% endblock %}
{% block body %}
<div id="page-container">
<!-- Main Container -->
<main id="main-container">
<!-- Page Content -->
<div class="bg-image" style="background-image: url('/assets/media/photos/photo21.jpg');">
<div class="row g-0 justify-content-center bg-primary-dark-op">
<div class="hero-static col-sm-8 col-md-6 col-xl-4 d-flex align-items-center p-2 px-sm-0">
<!-- Sign In Block -->
<div class="block block-transparent block-rounded w-100 mb-0 overflow-hidden">
<div class="block-content block-content-full px-lg-5 px-xl-6 py-4 py-md-5 py-lg-6 bg-body-extra-light">
<!-- Header -->
<div class="mb-2 text-center">
<a class="link-fx fw-bold fs-1" href="{{ path('general_home') }}">
<span class="text-dark">حساب</span><span class="text-primary">یکس</span>
</a>
<p class="text-uppercase fw-bold fs-sm text-muted"> ورود </p>
</div>
<!-- END Header -->
{% if msg %}
<div class="alert alert-success mb-2">تبریک! حساب کاربری شما ایجاد شد. لطفا با اطلاعات ثبت نام به حساب کاربری خود وارد شوید.</div>
{% endif %}
{% if error %}
<div class="alert alert-danger mb-2">{{ error.messageKey|trans(error.messageData, 'security') }}</div>
{% endif %}
<form action="{{ path('front_user_login') }}" method="post">
<div class="form-floating mb-3">
<input class="form-control" type="text" id="username" name="_username" value="{{ last_username }}">
<label>پست الکترونیکی</label>
</div>
<div class="form-floating mb-3">
<input class="form-control" type="password" id="password" name="_password">
<label>کلمه عبور</label>
</div>
<input type="hidden" name="_target_path" value="/">
<input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}">
<div class="d-sm-flex justify-content-sm-between align-items-sm-center text-center text-sm-start mb-4">
<div class="form-check">
<input checked="" class="form-check-input" id="login-remember-me" name="login-remember-me" type="checkbox">
<label class="form-check-label" for="login-remember-me">مرا به خاطر بسپار</label>
</div>
<div class="fw-semibold fs-sm py-1">
<a href="javascript:void(0)">رمز عبور را فراموش کرده اید؟</a>
</div>
</div>
<div class="text-center mb-3">
<button class="btn btn-hero btn-primary" type="submit">
<i class="fa fa-fw fa-sign-in-alt opacity-50 me-1"></i> ورود </button>
</div>
</form>
</div>
<div class="block-content bg-body">
<div class="d-flex justify-content-center text-center push">
<a class="btn btn-sm btn-alt-secondary" href="/">
<i class="fa fa-home"></i>
صفحه نخست
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
</div>
{% endblock %}

View file

@ -1,88 +0,0 @@
{% extends "blank.html.twig" %}
{% block title %}عضویت در حسابیکس{% endblock %}
{% block body %}
<div id="page-container">
<!-- Main Container -->
<main id="main-container">
<!-- Page Content -->
<div class="row g-0 justify-content-center bg-body-dark">
<div class="hero-static col-sm-10 col-md-8 col-xl-6 d-flex align-items-center p-2 px-sm-0">
<!-- Sign Up Block -->
<div class="block block-rounded block-transparent block-fx-pop w-100 mb-0 overflow-hidden bg-image" style="background-image: url('/assets/media/photos/photo21.jpg');">
<div class="row g-0">
<div class="col-md-6 order-md-1 bg-body-extra-light">
<div class="block-content block-content-full px-md-2 py-md-5 py-lg-6">
<!-- Header -->
<div class="mb-2 text-center">
<a class="link-fx fw-bold fs-1" href="{{ path('general_home') }}">
<span class="text-dark">حساب</span><span class="text-primary">یکس</span>
</a>
<p class="text-uppercase fw-bold fs-sm text-muted">ایجاد حساب جدید</p>
</div>
<!-- END Header -->
<!-- Sign Up Form -->
{{ form_start(registrationForm) }}
{% for flashError in app.flashes('verify_email_error') %}
<div class="alert alert-danger" role="alert">{{ flashError }}</div>
{% endfor %}
{{ form_start(registrationForm,{'attr':{'class':'ajax-off'}}) }}
{{ form_row(registrationForm.fullName) }}
{{ form_row(registrationForm.email) }}
{{ form_row(registrationForm.password, {
label: 'Password'
}) }}
{{ form_row(registrationForm.captcha, {
label: 'تشخیص ربات'
}) }}
{{ form_row(registrationForm.agreeTerms) }}
<div class="d-grid gap-2">
<button type="submit" class="btn btn-alt-primary">
<i class="fa fa-plus-square"></i>
{% trans %}Register{% endtrans %}
</button>
</div>
{{ form_end(registrationForm) }}
<br>
<div class="justify-content-center text-center">
<a href="{{ path('general_home') }}" class="btn btn-sm btn-alt-secondary">
<i class="fa fa-home"></i>
صفحه نخست
</a>
<a href="{{ path('front_user_login') }}" class="btn btn-sm btn-alt-secondary">
<i class="fa fa-door-open"></i>
{% trans %}Login{% endtrans %}
</a>
<a href="{{ path('front_user_login') }}" class="btn btn-sm btn-alt-secondary">
<i class="fa fa-lock-open"></i>
{% trans %}Forget Password{% endtrans %}
</a>
</div>
<!-- END Sign Up Form -->
</div>
</div>
<div class="col-md-6 order-md-0 bg-xwork-op d-flex align-items-center">
<div class="block-content block-content-full px-lg-5 py-md-5 py-lg-6">
<div class="d-flex">
<a class="flex-shrink-0 img-link me-3" href="javascript:void(0)">
<img alt="" class="img-avatar img-avatar-thumb" src="/assets/media/avatars/avatar0.jpg">
</a>
<div class="flex-grow-1">
<p class="text-white fw-semibold mb-1 justify-content-between"> حسابیکس مجموعه کاملی از ابزارهای حسابداری ابری است که همیشه به صورت رایگان در اختیار شما خواهد بود.ما اطلاعات مالی شما را به سازمان های مالیاتی و ... قرار نخواهیم داد مگر با دستور مقامات قضائی. </p>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- END Sign Up Block -->
</div>
</div>
<!-- END Page Content -->
</main>
<!-- END Main Container -->
</div>
{% endblock %}